PHP清理用户数据以在header()函数中使用

bat*_*tad 17 php sanitization header http-headers

是否有任何需要对用户数据进行的转义例程才能在PHP的header()函数中使用它?
例如,对于MySQL,我在将数据发送到数据库之前对用户数据运行mysql_real_escape_string(),并在HTML中输出我运行htmlspecialchars()...两者都包含在我自己的自定义函数中,首先进行其他处理.

但是对于PHP的header()函数,需要做什么?我有什么危险的角色可以逃脱吗?

我正在尝试做这样的事情......将查询字符串附加到标题()重定向到不同的页面

if ( strlen($_SERVER['QUERY_STRING']) > 0) {
$query_string = '?'.$_SERVER['QUERY_STRING'];
}
header('Location: http://domain.com/activate.php'.$query_string);
exit();
Run Code Online (Sandbox Code Playgroud)

任何人都获得了有关header()函数需要转义的内容的任何信息?冒号和分号字符似乎对header()语句非常关键.我应该逃避吗?

irc*_*ell 19

不,只要您使用PHP> = 4.4.2(如果在PHP4上)和> = 5.1.2(如果是PHP5),就没有什么可以保护自己的.

请参阅文档header().特别:

此功能现在可以防止一次发送多个标头,以防止标头注入攻击.

所以没有必要为位置标题转义任何东西.如果您使用的是早期版本,则需要转义所有\r\n字符(以防止标头注入).

另外,不要 urlencode查询字符串.它将打破正在发送的数据的语义含义.只需将其全部附加.