Skip to content

Commit 9d0ff4f

Browse files
bug #28003 [HttpKernel] Fixes invalid REMOTE_ADDR in inline subrequest when configuring trusted proxy with subnet (netiul)
This PR was merged into the 2.8 branch. Discussion ---------- [HttpKernel] Fixes invalid REMOTE_ADDR in inline subrequest when configuring trusted proxy with subnet | Q | A | ------------- | --- | Branch? | 2.8 | Bug fix? | yes | New feature? | no | BC breaks? | no | Deprecations? | no | Tests pass? | yes | Fixed tickets | #28000 <!-- #-prefixed issue number(s), if any --> | License | MIT | Doc PR | n/a When trusted proxies are configured including a subnet a subrequest initiated by the InlineFragmentRenderer would contain an invalid REMOTE_ADDR server variable. Commits ------- f657dd2 [HttpKernel] Fixed invalid REMOTE_ADDR in inline subrequest when configuring trusted proxy with subnet
2 parents 81eb54e + f657dd2 commit 9d0ff4f

File tree

2 files changed

+31
-2
lines changed

2 files changed

+31
-2
lines changed

src/Symfony/Component/HttpKernel/Fragment/InlineFragmentRenderer.php

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,8 +122,7 @@ protected function createSubRequest($uri, Request $request)
122122
// Do nothing
123123
}
124124

125-
$trustedProxies = Request::getTrustedProxies();
126-
$server['REMOTE_ADDR'] = $trustedProxies ? reset($trustedProxies) : '127.0.0.1';
125+
$server['REMOTE_ADDR'] = $this->resolveTrustedProxy();
127126

128127
unset($server['HTTP_IF_MODIFIED_SINCE']);
129128
unset($server['HTTP_IF_NONE_MATCH']);
@@ -140,6 +139,17 @@ protected function createSubRequest($uri, Request $request)
140139
return $subRequest;
141140
}
142141

142+
private function resolveTrustedProxy()
143+
{
144+
if (!$trustedProxies = Request::getTrustedProxies()) {
145+
return '127.0.0.1';
146+
}
147+
148+
$firstTrustedProxy = reset($trustedProxies);
149+
150+
return false !== ($i = strpos($firstTrustedProxy, '/')) ? substr($firstTrustedProxy, 0, $i) : $firstTrustedProxy;
151+
}
152+
143153
/**
144154
* {@inheritdoc}
145155
*/

src/Symfony/Component/HttpKernel/Tests/Fragment/InlineFragmentRendererTest.php

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,25 @@ public function testFirstTrustedProxyIsSetAsRemote()
226226
Request::setTrustedProxies(array());
227227
}
228228

229+
public function testIpAddressOfRangedTrustedProxyIsSetAsRemote()
230+
{
231+
$expectedSubRequest = Request::create('/');
232+
$expectedSubRequest->headers->set('Surrogate-Capability', 'abc="ESI/1.0"');
233+
$expectedSubRequest->server->set('REMOTE_ADDR', '1.1.1.1');
234+
$expectedSubRequest->headers->set('x-forwarded-for', array('127.0.0.1'));
235+
$expectedSubRequest->server->set('HTTP_X_FORWARDED_FOR', '127.0.0.1');
236+
237+
Request::setTrustedProxies(array('1.1.1.1/24'));
238+
239+
$strategy = new InlineFragmentRenderer($this->getKernelExpectingRequest($expectedSubRequest));
240+
241+
$request = Request::create('/');
242+
$request->headers->set('Surrogate-Capability', 'abc="ESI/1.0"');
243+
$strategy->render('/', $request);
244+
245+
Request::setTrustedProxies(array());
246+
}
247+
229248
/**
230249
* Creates a Kernel expecting a request equals to $request
231250
* Allows delta in comparison in case REQUEST_TIME changed by 1 second.

0 commit comments

Comments
 (0)