|
65 | 65 | use Symfony\Component\Form\FormTypeGuesserInterface; |
66 | 66 | use Symfony\Component\Form\FormTypeInterface; |
67 | 67 | use Symfony\Component\HttpClient\ScopingHttpClient; |
| 68 | +use Symfony\Component\HttpFoundation\Request; |
68 | 69 | use Symfony\Component\HttpKernel\CacheClearer\CacheClearerInterface; |
69 | 70 | use Symfony\Component\HttpKernel\CacheWarmer\CacheWarmerInterface; |
70 | 71 | use Symfony\Component\HttpKernel\Controller\ArgumentValueResolverInterface; |
@@ -242,6 +243,11 @@ public function load(array $configs, ContainerBuilder $container) |
242 | 243 | $container->setParameter('kernel.default_locale', $config['default_locale']); |
243 | 244 | $container->setParameter('kernel.error_controller', $config['error_controller']); |
244 | 245 |
|
| 246 | + if (($config['trusted_proxies'] ?? false) && ($config['trusted_headers'] ?? false)) { |
| 247 | + $container->setParameter('kernel.trusted_proxies', $config['trusted_proxies']); |
| 248 | + $container->setParameter('kernel.trusted_headers', $this->resolveTrustedHeaders($config['trusted_headers'])); |
| 249 | + } |
| 250 | + |
245 | 251 | if (!$container->hasParameter('debug.file_link_format')) { |
246 | 252 | $links = [ |
247 | 253 | 'textmate' => 'txmt://open?url=file://%%f&line=%%l', |
@@ -2094,6 +2100,30 @@ private function registerNotifierConfiguration(array $config, ContainerBuilder $ |
2094 | 2100 | } |
2095 | 2101 | } |
2096 | 2102 |
|
| 2103 | + private function resolveTrustedHeaders(array $headers): int |
| 2104 | + { |
| 2105 | + $trustedHeaders = 0; |
| 2106 | + |
| 2107 | + foreach ($headers as $h) { |
| 2108 | + switch ($h) { |
| 2109 | + case 'forwarded': $trustedHeaders |= Request::HEADER_FORWARDED; break; |
| 2110 | + case 'x-forwarded-for': $trustedHeaders |= Request::HEADER_X_FORWARDED_FOR; break; |
| 2111 | + case 'x-forwarded-host': $trustedHeaders |= Request::HEADER_X_FORWARDED_HOST; break; |
| 2112 | + case 'x-forwarded-proto': $trustedHeaders |= Request::HEADER_X_FORWARDED_PROTO; break; |
| 2113 | + case 'x-forwarded-port': $trustedHeaders |= Request::HEADER_X_FORWARDED_PORT; break; |
| 2114 | + case '!x-forwarded-host': $trustedHeaders &= ~Request::HEADER_X_FORWARDED_HOST; break; |
| 2115 | + case 'x-forwarded-all': |
| 2116 | + if (!\in_array('!x-forwarded-prefix', $headers)) { |
| 2117 | + throw new LogicException('When using "x-forwarded-all" in "framework.trusted_headers", "!x-forwarded-prefix" must be explicitly listed until support for X-Forwarded-Prefix is implemented.'); |
| 2118 | + } |
| 2119 | + $trustedHeaders |= Request::HEADER_X_FORWARDED_ALL; |
| 2120 | + break; |
| 2121 | + } |
| 2122 | + } |
| 2123 | + |
| 2124 | + return $trustedHeaders; |
| 2125 | + } |
| 2126 | + |
2097 | 2127 | /** |
2098 | 2128 | * {@inheritdoc} |
2099 | 2129 | */ |
|
0 commit comments