Question 为什么wp_sanitize_redirect
去除@
迹象,没错?任何人都可以尝试加载带有@
登录-是否有我没有想过的安全问题?
请看一下来源:
function wp_sanitize_redirect($location) {
$location = preg_replace(\'|[^a-z0-9-~+_.?#=&;,/:%!]|i\', \'\', $location);
$location = wp_kses_no_null($location);
// remove %0d and %0a from location
$strip = array(\'%0d\', \'%0a\', \'%0D\', \'%0A\');
$location = _deep_replace($strip, $location);
return $location;
}
所以唯一的角色
preg_replace
允许是
小写a-z
编号和~+_.?#=&;,/:%!
.这对URI和URL意味着什么php函数urlencode()
替换all 无字母数字字符,except -_.
使用%
(百分比)字符后跟两个十六进制值和带+
. 如果您使用rawurlencode()
, 它还剥离了+
. 正如您从preg_replace()
, 它允许所有URL编码/准备的字符,因此将这些编码字符/URL部分扔到游戏中是安全的。