Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit f657dd2

Browse files
Zacharias Luitennicolas-grekas
Zacharias Luiten
authored andcommitted
[HttpKernel] Fixed invalid REMOTE_ADDR in inline subrequest when configuring trusted proxy with subnet
1 parent 81eb54e commit f657dd2

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)