рд╡реЗрдм рд╕рд╛рдЗрдЯреЛрдВ рдореЗрдВ рдПрдХ рдЫреЛрдЯреА рдЬреНрдЮрд╛рдд рднреЗрджреНрдпрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ

рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп рдкрд╣рд▓рд╛ рд╕реБрд░рдХреНрд╖рд╛ рдирд┐рдпрдо рд╣реИ: -
рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рдкрд░ рднрд░реЛрд╕рд╛ рди рдХрд░реЗрдВред
рдЗрд╕ рдирд┐рдпрдо рдХреЗ рд▓рдЧрднрдЧ рд╕рднреА рд▓реЛрдЧ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЬрд╛рдирддреЗ рд╣реИрдВ рдФрд░ рд╕рдореНрдорд╛рдирд┐рдд рд╣реИрдВред рд╣рдо рдлреЙрд░реНрдо рдбреЗрдЯрд╛, рдХреБрдХреАрдЬрд╝, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдпреВрдЖрд░рдЖрдИ рдХреЛ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред
рд▓реЗрдХрд┐рди рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдореБрдЭреЗ рдпрд╣ рдЬрд╛рдирдХрд░ рдЖрд╢реНрдЪрд░реНрдп рд╣реБрдЖ рдХрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рд╡реИрд░рд┐рдПрдмрд▓ рд╣реИ рдЬреЛ рд▓рдЧрднрдЧ рдХреЛрдИ рднреА рдлрд╝рд┐рд▓реНрдЯрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдпрд╣ HTTP_HOST рдФрд░ SERVER_NAME рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдХреЗ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗ рд╕рдордЭреМрддрд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реЛрдЧрд╛ред


рдпрджрд┐ рдЖрдк "HTTP_HOST" рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЧрд┐рддреБрдм рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЦреЛрдЬ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк $_SERVER['HTTP_HOST'] 43 рдРрд╕реЗ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ $_SERVER['HTTP_HOST'] ред рдПрдХ рддреНрд╡рд░рд┐рдд рдирдЬрд╝рд░ рдХреЗ рджреМрд░рд╛рди, рдореБрдЭреЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдорд╛рдорд▓реЗ рдорд┐рд▓реЗ рдЬрдм рдЗрд╕ рдЪрд░ рдореЗрдВ рдЖрдП рдбреЗрдЯрд╛ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд┐рдП рдмрд┐рдирд╛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЕрдХреНрд╕рд░ рд╡реЗ рдХреЗрд╡рд▓ $_SERVER['HTTP_HOST'] рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдорд╛рдиреНрдп рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

рдореИрдВ Nginx + php рдмрдВрдбрд▓ (php-fpm рдпрд╛ fcgi-spawn) рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рддрд┐ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдБрдЧрд╛, рдЕрдиреНрдп рд╡реЗрдм рд╕рд░реНрд╡рд░реЛрдВ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рддрд┐ рд╡рд┐рд╡рд░рдг рдореЗрдВ рднрд┐рдиреНрди рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рд╕рд╛рдорд╛рдиреНрдп рд╕рд┐рджреНрдзрд╛рдВрдд рдмрдиреЗ рд╣реБрдП рд╣реИрдВред
рдЕрдкрд╛рдЪреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдпрд╣рд╛рдБ рд╡рд░реНрдгрд┐рдд рд╣реИ: shiflett.org/blog/2006/mar/server-name-versus-hpp-host

рд╕рдордЭреМрддрд╛ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ


рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЯреЗрд▓рдиреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ
рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рд╕рд░реНрд╡рд░ рдкрд░ рднреЗрдЬрдиреЗ рд╡рд╛рд▓реЗ рд╣реЗрдбрд░ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреЗ рд╣реИрдВ:
 GET / HTTP/1.1 Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Charset:windows-1251,utf-8;q=0.7,*;q=0.3 Accept-Language:ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4 Cache-Control:max-age=0 Connection:keep-alive Host:site.dev Referer:http://site.dev/index.htm User-Agent:TelnetTest 

рдпрджрд┐ рдЖрдк рдЙрдирд╕реЗ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣рдЯрд╛рддреЗ рд╣реИрдВ ( HTTP_HOST рдмрд┐рдирд╛ рдЕрдиреБрд░реЛрдз рднреЗрдЬрддреЗ рд╣реИрдВ)
 Host:site.dev, 
рдлрд┐рд░ рд╕рд░реНрд╡рд░ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛
 400 Bad Request 

рд╣реЗрдбрд░ рднреЗрдЬрдиреЗ рдХрд╛ рджреВрд╕рд░рд╛ рддрд░реАрдХрд╛:
 GET http://site.dev/ HTTP/1.1 Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Charset:windows-1251,utf-8;q=0.7,*;q=0.3 Accept-Language:ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4 Cache-Control:max-age=0 Connection:keep-alive Host:site.dev Referer:http://site.dev/index.htm User-Agent:TelnetTest 

рдирддреАрдЬрд╛ рдареАрдХ рд╡реИрд╕рд╛ рд╣реА рд╣реЛрдЧрд╛, рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рд╣реЗрдбрд░ рднреЗрдЬрддреЗ рд╕рдордп
 GET / HTTP/1.1 

рд▓реЗрдХрд┐рди, рдЕрдЧрд░ рдкрд╣рд▓реА рд╣реЗрдбрд┐рдВрдЧ рдирд╣реАрдВ рд╣реИ
 GET http://site.dev/ HTTP/1.1 
рдФрд░
 GET http://site.dev/ 
рдЙрд╕рдХреЗ рдмрд╛рдж рдХреЗ рд╕рднреА рд╢реАрд░реНрд╖рдХреЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, Nginx рд╕рд░реНрд╡рд░ рд╕реЗрдХреНрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдЧрд╛
  server_name site.dev; 
рд▓реЗрдХрд┐рди HTTP_HOST рдФрд░ SERVER_NAME рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЦрд╛рд▓реА HTTP_HOST рдХрд░рдирд╛ рд╡рд┐рдлрд▓ рд╣реЛрдЧрд╛:
 Host: 
рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдВрджреЗрд╢ рджреЗрдирд╛ рд╕рдВрднрд╡ рд╣реИ
 Host:_ 
рдпрд╛
 Host:"" 

рдЕрдм рдордЬрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред
рдЯреЗрд▓рдиреЗрдЯ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ
 $ telnet site.dev 80 Trying 127.0.0.1... Connected to site.dev. Escape character is '^]'. 

рд╣рдо рд╡реНрдпрд╡рд╕реНрдерд╛ рдХрд░рддреЗ рд╣реИрдВ
 GET http://site.dev/phpinfo.php HTTP/1.1 Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Charset:windows-1251,utf-8;q=0.7,*;q=0.3 Accept-Language:ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4 Cache-Control:max-age=0 Connection:keep-alive Host:~%#$^&*()<>?@\!."'{}[]=+| Referer:http://site.dev/index.htm User-Agent:TelnetTest 

рдФрд░ рджреЗрдЦреЛ:
 _SERVER["SERVER_NAME"]: ~%#$^&*()<>?@\!."'{}[]=+| _SERVER["HTTP_HOST"]: ~%#$^&*()<>?@\!."'{}[]=+| 

рд╕рд░реНрд╡рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛:
 HTTP/1.1 200 OK Server: nginx/1.0.10 Date: Wed, 23 Jan 2013 10:31:14 GMT Content-Type: text/html Transfer-Encoding: chunked Connection: keep-alive 

рдпрджрд┐ Host: рд╣реЗрдбрд░ рдореЗрдВ '/' , рддреЛ рд╕рд░реНрд╡рд░ 400 Bad Request рд▓реМрдЯрд╛рдПрдЧрд╛ред
рдпрд╛рдиреА рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ Host:../../ рд╢реАрд░реНрд╖рдХ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ Host:http://evil.site рднреА

рдХрдордЬреЛрд░рд┐рдпреЛрдВ


рдирд┐рдЬреА рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдБрдЪрдирд╛
рдПрд╕рдХреНрдпреВрдПрд▓ рдЗрдВрдЬреЗрдХреНрд╢рди

рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рддрд░реАрдХреЗ


рд╕реБрд░рдХреНрд╖рд╛ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рдФрд░ рд╕рдмрд╕реЗ рд╕рд╕реНрддрд╛ рддрд░реАрдХрд╛ (рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЧрдпрд╛: stackoverflow.com/questions/1459739/php-serverhttp-host-vs-serverserver-name-am-i-understanding-the-ma )ред
 $allowed_hosts = array('foo.example.com', 'bar.example.com'); if (!isset($_SERVER['HTTP_HOST']) || !in_array($_SERVER['HTTP_HOST'], $allowed_hosts)) { header($_SERVER['SERVER_PROTOCOL'].' 400 Bad Request'); exit; } 

рд╡реЗрдм рд╕рд░реНрд╡рд░ рдХреА рддрд░рдл HTTP_HOST рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдкреНрд░рднрд╛рд╡реА рд╕реБрд░рдХреНрд╖рд╛ рд╡рд┐рдзрд┐ рд╣реИред
HTTP_HOST рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ Nginx config рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:
 fastcgi_param HTTP_HOST1 $http_host; fastcgi_param HTTP_HOST2 $host; fastcgi_param HTTP_HOST3 $server_name; 

рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ server рдЦрдВрдб рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИрдВ:
 server { listen 80; server_name site1.dev; ... } server { listen 80; server_name site2.dev site3.dev; ... } 

рдРрд╕реЗ рдирд┐рд╡реЗрджрди рдХрд░рддреЗ рд╣реИрдВ

 $ telnet site1.dev 80 Trying 127.0.0.1... Connected to site.dev. Escape character is '^]'. 


 GET http://site3.dev/phpinfo.php HTTP/1.1 Host:~%#$^&*()<>?@\!."'{}[]=+| User-Agent:TelnetTest 

рд╣рдореЗрдВ рдЬреЛ рдЖрдЙрдЯрдкреБрдЯ рдорд┐рд▓рддрд╛ рд╣реИ
 _SERVER["HTTP_HOST1"]: ~%#$^&*()<>?@\!."'{}[]=+| _SERVER["HTTP_HOST2"]: site3.dev _SERVER["HTTP_HOST3"]: site2.dev 

рд╕рдм рдХреБрдЫ рддрд╛рд░реНрдХрд┐рдХ рд╣реИред рдФрд░ рд╕рдмрд╕реЗ рд╕рд╣реА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рд╣реЛрдЧреА:
 fastcgi_param HTTP_HOST $host; 

рдпрджрд┐ рдЖрдк рдлреЙрд░реНрдо рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВ
 $ telnet site3.dev 80 

 GET /phpinfo.php HTTP/1.1 Host:~%#$^&*()<>?@\!."'{}[]=+| User-Agent:TelnetTest 

рддрдм рдЕрдиреБрднрд╛рдЧ рдХрд╛рдо рдХрд░реЗрдЧрд╛
 server { listen 80 default_server; server_name ""; return 444; } 

рдЬреЛ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрдиреБрд░реЛрдз рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдорд╛рдд рджреЗ рджреЗрдЧрд╛ред

Source: https://habr.com/ru/post/In166855/


All Articles