PHP清除供header()函数使用的用户数据

| 是否需要对用户数据执行任何转义例程,以使其在PHP的header()函数中使用? 例如对于MySQL,我在将用户数据发送到数据库之前对用户数据运行mysql_real_escape_string(),对于HTML输出,我运行htmlspecialchars()...两者都包装在我自己的自定义函数中,以便首先进行其他处理。 但是对于PHP的header()函数,需要做什么?我应该逃避危险角色吗? 我正在尝试执行以下操作...将查询字符串附加到header()重定向到其他页面
if ( strlen($_SERVER[\'QUERY_STRING\']) > 0) {
$query_string = \'?\'.$_SERVER[\'QUERY_STRING\'];
}
header(\'Location: http://domain.com/activate.php\'.$query_string);
exit();
任何人都可以获得关于header()函数需要转义什么的任何信息?对于header()语句,冒号和分号字符似乎总是非常关键。我应该逃脱那些吗?     
已邀请:
不,只要使用PHP> = 4.4.2(如果在PHP4上)和> = 5.1.2(如果PHP5),则无需采取任何措施来保护自己。 请参阅文档中的“ѭ1”。特别:   现在,此功能可防止一次发送多个标头,以防止标头注入攻击。 因此,没有必要为位置标头转义任何内容。如果您使用的是较早版本,则需要转义所有
\\r
\\n
字符(以防止插入标头)。 另外,不要“ 4”查询字符串。它将破坏正在发送的数据的语义。只需将其完整附加即可。     
那里可能使用了一些漏洞利用,例如发送了多个标头,尽管事实上,如果您正在运行PHP5.1,PHP会阻止它在此处报告其自身:   4.4.2和5.1.2:现在,此功能可防止一次发送多个标头,以防止标头注入攻击。 除此之外,如果您希望将查询字符串附加到该文件并且不使用SEO网址,则应使用
urlencode()
验证查询字符串,这将检查该字符串是否为查询字符串,并将替换奇怪的字符或不允许带有适当的
%
+
的字符。 参考文献: 标头() urlencode()     
您还可以使用“ 8”将关联的数组转换为查询字符串。
<?php
    $data = array(\'foo\'=>\'bar\',
          \'baz\'=>\'boom\',
          \'cow\'=>\'milk\',
          \'php\'=>\'hypertext processor\');

    echo http_build_query($data) . \"\\n\";
?>
上面的示例将输出:
foo=bar&baz=boom&cow=milk&php=hypertext+processor
    

要回复问题请先登录注册