可以注入$ _SERVER ['SERVER_PROTOCOL']吗?

时间:2015-05-18 13:54:32

标签: php

我使用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吗?

1 个答案:

答案 0 :(得分:1)

  

有两种特殊情况的标题调用。第一个是标题   以字符串“HTTP /”开头(大小写不重要),这将是   用于确定要发送的HTTP状态代码。 (来自PHP header documentation

如上所述发送状态代码的正确(且安全)方式是:

header('HTTP/1.1 400 Bad Request');

您使用HTTP/1.0还是HTTP/1.1并不重要。