8000 [HttpFoundation] Fix Request::getHost() when having several hosts in … · MacDada/symfony@9a2b2de · GitHub
[go: up one dir, main page]

Skip to content

Commit 9a2b2de

Browse files
[HttpFoundation] Fix Request::getHost() when having several hosts in X_FORWARDED_HOST
1 parent cb12e32 commit 9a2b2de

File tree

2 files changed

+5
-5
lines changed

2 files changed

+5
-5
lines changed

src/Symfony/Component/HttpFoundation/Request.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -962,7 +962,7 @@ public function getPort()
962962
{
963963
if ($this->isFromTrustedProxy()) {
964964
if (self::$trustedHeaders[self::HEADER_CLIENT_PORT] && $port = $this->headers->get(self::$trustedHeaders[self::HEADER_CLIENT_PORT])) {
965-
return $port;
965+
return (int) $port;
966966
}
967967

968968
if (self::$trustedHeaders[self::HEADER_CLIENT_PROTO] && 'https' === $this->headers->get(self::$trustedHeaders[self::HEADER_CLIENT_PROTO], 'http')) {
@@ -1211,9 +1211,9 @@ public function isSecure()
12111211
public function getHost()
12121212
{
12131213
if ($this->isFromTrustedProxy() && self::$trustedHeaders[self::HEADER_CLIENT_HOST] && $host = $this->headers->get(self::$trustedHeaders[self::HEADER_CLIENT_HOST])) {
1214-
$elements = explode(',', $host);
1214+
$elements = explode(',', $host, 2);
12151215

1216-
$host = $elements[count($elements) - 1];
1216+
$host = $elements[0];
12171217
} elseif (!$host = $this->headers->get('HOST')) {
12181218
if (!$host = $this->server->get('SERVER_NAME')) {
12191219
$host = $this->server->get('SERVER_ADDR', '');

src/Symfony/Component/HttpFoundation/Tests/RequestTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1631,7 +1631,7 @@ public function testTrustedProxies()
16311631
$request = Request::create('http://example.com/');
16321632
$request->server->set('REMOTE_ADDR', '3.3.3.3');
16331633
$request->headers->set('X_FORWARDED_FOR', '1.1.1.1, 2.2.2.2');
1634-
$request->headers->set('X_FORWARDED_HOST', 'foo.example.com, real.example.com:8080');
1634+
$request->headers->set('X_FORWARDED_HOST', 'foo.example.com:1234, real.example.com:8080');
16351635
$request->headers->set('X_FORWARDED_PROTO', 'https');
1636163 7A22 6
$request->headers->set('X_FORWARDED_PORT', 443);
16371637
$request->headers->set('X_MY_FOR', '3.3.3.3, 4.4.4.4');
@@ -1662,7 +1662,7 @@ public function testTrustedProxies()
16621662
// trusted proxy via setTrustedProxies()
16631663
Request::setTrustedProxies(array('3.3.3.3', '2.2.2.2'));
16641664
$this->assertEquals('1.1.1.1', $request->getClientIp());
1665-
$this->assertEquals('real.example.com', $request->getHost());
1665+
$this->assertEquals('foo.example.com', $request->getHost());
16661666
$this->assertEquals(443, $request->getPort());
16671667
$this->assertTrue($request->isSecure());
16681668

0 commit comments

Comments
 (0)
0