PHP 清理用户数据以用于 header() 函数

2022-08-30 21:12:58

是否需要对用户数据执行任何转义例程才能在 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() 语句似乎总是非常关键。我应该逃避这些吗?


答案 1

不,只要您使用 PHP >= 4.4.2(如果在 PHP4 上)和 >= 5.1.2(如果使用 PHP5),就不需要做任何事情来保护自己。

请参阅标题()的文档。具体说来:

此函数现在可防止一次发送多个标头,以防止标头注入攻击。

因此,对于位置标头,无需转义任何内容。如果您使用的是早期版本,则需要转义所有字符和字符(以防止标头注入)。\r\n

此外,不要使用查询字符串。它将破坏所发送数据的语义含义。只需将其完整附加即可。urlencode


答案 2

那里可能会使用一些漏洞,例如发送多个标头,尽管如果您运行的是PHP5.1,PHP可以阻止它本身,但这里报告了它自己:

4.4.2 和 5.1.2:此函数现在可防止一次发送多个标头,以防止标头注入攻击。

从这一点开始,如果您希望将查询字符串附加到该文件,并且您没有使用SEO url,则应验证查询字符串,该查询字符串将检查该字符串是否为查询字符串,并将用适当的和替换奇怪的字符或不允许的字符。urlencode()%+

引用:


推荐