10000 [HttpKernel] added support for the X-Forwarded-For header (closes #69… · symfony/symfony@1fdded5 · GitHub
[go: up one dir, main page]

Skip to content

Commit 1fdded5

Browse files
committed
[HttpKernel] added support for the X-Forwarded-For header (closes #6982, closes #7000)
1 parent be65d7c commit 1fdded5

File tree

2 files changed

+32
-0
lines changed

2 files changed

+32
-0
lines changed

src/Symfony/Component/HttpKernel/HttpCache/HttpCache.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -418,6 +418,14 @@ protected function fetch(Request $request, $catch = false)
418418
$subRequest->headers->remove('if_modified_since');
419419
$subRequest->headers->remove('if_none_match');
420420

421+
// modify the X-Forwarded-For header if needed
422+
$forwardedFor = $subRequest->headers->get('X-Forwarded-For');
423+
if ($forwardedFor) {
424+
$subRequest->headers->set('X-Forwarded-For', $forwardedFor.', '.$subRequest->server->get('REMOTE_ADDR'));
425+
} else {
426+
$subRequest->headers->set('X-Forwarded-For', $subRequest->server->get('REMOTE_ADDR'));
427+
}
428+
421429
// fix the client IP address by setting it to 127.0.0.1 as HttpCache
422430
// is always called from the same process as the backend.
423431
$subRequest->server->set('REMOTE_ADDR', '127.0.0.1');

src/Symfony/Component/HttpKernel/Tests/HttpCache/HttpCacheTest.php

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1042,4 +1042,28 @@ public function testClientIpIsAlwaysLocalhostForForwardedRequests()
10421042

10431043
$this->assertEquals('127.0.0.1', $this->kernel->getBackendRequest()->server->get('REMOTE_ADDR'));
10441044
}
1045+
1046+
/**
1047+
* @dataProvider getXForwardedForData
1048+
*/
1049+
public function testXForwarderForHeaderForForwardedRequests($xForwardedFor, $expected)
1050+
{
1051+
$this->setNextResponse();
1052+
$server = array('REMOTE_ADDR' => '10.0.0.1');
1053+
if (false !== $xForwardedFor) {
1054+
$server['HTTP_X_FORWARDED_FOR'] = $xForwardedFor;
1055+
}
1056+
$this->request('GET', '/', $server);
1057+
1058+
$this->assertEquals($expected, $this->kernel->getBackendRequest()->headers->get('X-Forwarded-For'));
1059+
}
1060+
1061+
public function getXForwardedForData()
1062+
{
1063+
return array(
1064+
array(false, '10.0.0.1'),
1065+
array('10.0.0.2', '10.0.0.2, 10.0.0.1'),
1066+
array('10.0.0.2, 10.0.0.3', '10.0.0.2, 10.0.0.3, 10.0.0.1'),
1067+
);
1068+
}
10451069
}

0 commit comments

Comments
 (0)
0