我使用Apache + mod_fastcgi运行PHP网站。 Apache错误日志中存在错误:
malformed header from script 'ajax.php': Bad header: /;ls -la HTTP/1.0 400 Bad Requ
以下是ajax.php中发送标题的唯一代码:
if(!isset($_POST['action'])) {
header ($_SERVER['SERVER_PROTOCOL'] . ' 400 Bad Request');
exit;
}
那么/;ls -la
件来自哪里?可以以任何方式注入SERVER_PROTOCOL吗?
答案 0 :(得分:1)
有两种特殊情况的标题调用。第一个是标题 以字符串“HTTP /”开头(大小写不重要),这将是 用于确定要发送的HTTP状态代码。 (来自PHP header documentation)
如上所述发送状态代码的正确(且安全)方式是:
header('HTTP/1.1 400 Bad Request');
您使用HTTP/1.0
还是HTTP/1.1
并不重要。