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

Skip to content

Commit 42d3c4c

Browse files
committed
added support for the X-Forwarded-For header (closes #6982, closes #7000)
1 parent 6a9c510 commit 42d3c4c

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
@@ -413,6 +413,14 @@ protected function fetch(Request $request, $catch = false)
413413
$subRequest->headers->remove('if_modified_since');
414414
$subRequest->headers->remove('if_none_match');
415415

416+
// modify the X-Forwarded-For header if needed
417+
$forwardedFor = $subRequest->headers->get('X-Forwarded-For');
418+
if ($forwardedFor) {
419+
$subRequest->headers->set('X-Forwarded-For', $forwardedFor.', '.$subRequest->server->get('REMOTE_ADDR'));
420+
} else {
421+
$subRequest->headers->set('X-Forwarded-For', $subRequest->server->get('REMOTE_ADDR'));
422+
}
423+
416424
// fix the client IP address by setting it to 127.0.0.1 as HttpCache
417425
// is always called from the same process as the backend.
418426
$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)