‪TYPO3CMS  11.5
SlugSiteRequestAllowInsecureSiteResolutionByQueryParametersEnabledTest.php
Go to the documentation of this file.
1 <?php
2 
3 declare(strict_types=1);
4 
5 /*
6  * This file is part of the TYPO3 CMS project.
7  *
8  * It is free software; you can redistribute it and/or modify it under
9  * the terms of the GNU General Public License, either version 2
10  * of the License, or any later version.
11  *
12  * For the full copyright and license information, please read the
13  * LICENSE.txt file that was distributed with this source code.
14  *
15  * The TYPO3 project - inspiring people to share!
16  */
17 
19 
21 use TYPO3\TestingFramework\Core\Functional\Framework\DataHandling\Scenario\DataHandlerFactory;
22 use TYPO3\TestingFramework\Core\Functional\Framework\DataHandling\Scenario\DataHandlerWriter;
23 use TYPO3\TestingFramework\Core\Functional\Framework\Frontend\InternalRequest;
24 
26 {
28  'SYS' => [
29  'devIPmask' => '123.123.123.123',
30  'encryptionKey' => '4408d27a916d51e624b69af3554f516dbab61037a9f7b9fd6f81b4d3bedeccb6',
31  'features' => [
32  'security.frontend.allowInsecureSiteResolutionByQueryParameters' => true,
33  ],
34  ],
35  'FE' => [
36  'cacheHash' => [
37  'requireCacheHashPresenceParameters' => ['value', 'testing[value]', 'tx_testing_link[value]'],
38  'excludedParameters' => ['L', 'tx_testing_link[excludedValue]'],
39  'enforceValidation' => true,
40  ],
41  'debug' => false,
42  ],
43  ];
44 
45  protected function ‪setUp(): void
46  {
47  parent::setUp();
48  $this->withDatabaseSnapshot(function () {
49  $this->importCSVDataSet(__DIR__ . '/../Fixtures/be_users.csv');
50  $backendUser = $this->setUpBackendUser(1);
52  $scenarioFile = __DIR__ . '/Fixtures/SlugScenario.yaml';
53  $factory = DataHandlerFactory::fromYamlFile($scenarioFile);
54  $writer = DataHandlerWriter::withBackendUser($backendUser);
55  $writer->invokeFactory($factory);
56  static::failIfArrayIsNotEmpty($writer->getErrors());
57  $this->setUpFrontendRootPage(
58  1000,
59  [
60  'typo3/sysext/core/Tests/Functional/Fixtures/Frontend/JsonRenderer.typoscript',
61  'typo3/sysext/frontend/Tests/Functional/SiteHandling/Fixtures/JsonRenderer.typoscript',
62  ],
63  [
64  'title' => 'ACME Root',
65  ]
66  );
67  $this->setUpFrontendRootPage(
68  3000,
69  [
70  'typo3/sysext/core/Tests/Functional/Fixtures/Frontend/JsonRenderer.typoscript',
71  'typo3/sysext/frontend/Tests/Functional/SiteHandling/Fixtures/JsonRenderer.typoscript',
72  ],
73  [
74  'title' => 'ACME Archive',
75  ]
76  );
77  });
78  }
79 
80  public static function ‪siteWithPageIdRequestsAreCorrectlyHandledDataProvider(): \Generator
81  {
82  yield 'valid same-site request is redirected' => ['https://website.local/?id=1000&L=0', 307];
83  yield 'valid same-site request is processed' => ['https://website.local/?id=1100&L=0', 200];
84  // This case is allowed due to security.frontend.allowInsecureSiteResolutionByQueryParameters, should otherwise be 404
85  yield 'invalid off-site request with unknown domain is denied' => ['https://otherdomain.website.local/?id=3000&L=0', 200];
86  yield 'invalid off-site request with unknown domain and without L parameter is denied' => ['https://otherdomain.website.local/?id=3000', 404];
87  yield 'invalid cross-site request without L parameter is denied' => ['https://website.local/?id=3000', 404];
88  // This case is allowed due to security.frontend.allowInsecureSiteResolutionByQueryParameters, should otherwise be 404
89  yield 'invalid cross-site request *not* denied' => ['https://website.local/?id=3000&L=0', 200];
90  }
91 
96  public function ‪siteWithPageIdRequestsAreCorrectlyHandled(string $uri, int $expectation): void
97  {
99  'website-local',
100  $this->‪buildSiteConfiguration(1000, 'https://website.local/'),
101  [
102  $this->‪buildDefaultLanguageConfiguration('EN', '/'),
103  ],
104  $this->‪buildErrorHandlingConfiguration('Fluid', [404])
105  );
107  'archive-acme-com',
108  $this->‪buildSiteConfiguration(3000, 'https://archive.acme.com/'),
109  [
110  $this->‪buildDefaultLanguageConfiguration('EN', '/'),
111  ],
112  $this->‪buildErrorHandlingConfiguration('Fluid', [404])
113  );
114 
115  $response = $this->executeFrontendSubRequest(new InternalRequest($uri));
116  self::assertSame($expectation, $response->getStatusCode());
117  }
118 }
‪TYPO3\CMS\Core\Tests\Functional\SiteHandling\SiteBasedTestTrait\buildErrorHandlingConfiguration
‪array buildErrorHandlingConfiguration(string $handler, array $codes)
Definition: SiteBasedTestTrait.php:186
‪TYPO3\CMS\Core\Tests\Functional\SiteHandling\SiteBasedTestTrait\writeSiteConfiguration
‪writeSiteConfiguration(string $identifier, array $site=[], array $languages=[], array $errorHandling=[])
Definition: SiteBasedTestTrait.php:58
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\AbstractTestCase
Definition: AbstractTestCase.php:29
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\SlugSiteRequestAllowInsecureSiteResolutionByQueryParametersEnabledTest\siteWithPageIdRequestsAreCorrectlyHandledDataProvider
‪static siteWithPageIdRequestsAreCorrectlyHandledDataProvider()
Definition: SlugSiteRequestAllowInsecureSiteResolutionByQueryParametersEnabledTest.php:80
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\SlugSiteRequestAllowInsecureSiteResolutionByQueryParametersEnabledTest\siteWithPageIdRequestsAreCorrectlyHandled
‪siteWithPageIdRequestsAreCorrectlyHandled(string $uri, int $expectation)
Definition: SlugSiteRequestAllowInsecureSiteResolutionByQueryParametersEnabledTest.php:96
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\SlugSiteRequestAllowInsecureSiteResolutionByQueryParametersEnabledTest
Definition: SlugSiteRequestAllowInsecureSiteResolutionByQueryParametersEnabledTest.php:26
‪TYPO3\CMS\Core\Tests\Functional\SiteHandling\SiteBasedTestTrait\buildDefaultLanguageConfiguration
‪array buildDefaultLanguageConfiguration(string $identifier, string $base)
Definition: SiteBasedTestTrait.php:126
‪TYPO3\CMS\Core\Core\Bootstrap\initializeLanguageObject
‪static initializeLanguageObject()
Definition: Bootstrap.php:598
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\SlugSiteRequestAllowInsecureSiteResolutionByQueryParametersEnabledTest\setUp
‪setUp()
Definition: SlugSiteRequestAllowInsecureSiteResolutionByQueryParametersEnabledTest.php:45
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling
Definition: AbstractTestCase.php:18
‪TYPO3\CMS\Core\Core\Bootstrap
Definition: Bootstrap.php:70
‪TYPO3\CMS\Core\Tests\Functional\SiteHandling\SiteBasedTestTrait\buildSiteConfiguration
‪array buildSiteConfiguration(int $rootPageId, string $base='')
Definition: SiteBasedTestTrait.php:111
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\SlugSiteRequestAllowInsecureSiteResolutionByQueryParametersEnabledTest\$configurationToUseInTestInstance
‪$configurationToUseInTestInstance
Definition: SlugSiteRequestAllowInsecureSiteResolutionByQueryParametersEnabledTest.php:27