如何安全地使用$_SERVER[‘REQUEST_URI’]来避免XSS?

时间:2014-05-24 作者:Josiah Sprague

我看到很多关于使用的警告$_SERVER[\'REQUEST_URI\'] 因为它可以向XSS开放,但我还没有找到任何可以确认安全使用它的方法。有些人提到使用esc_url(), 但我找不到任何能证实如何安全使用它的东西。这是我最好的猜测,这能安全地防止XSS攻击吗?

echo esc_url(( is_ssl() ? \'https://\' : \'http://\' ) . $_SERVER[\'HTTP_HOST\'] . $_SERVER[\'REQUEST_URI\']);

如果我想在内部使用URL而不是显示它,似乎我必须使用esc_url_raw(). 这也安全吗?

$pageurl = esc_url_raw(( is_ssl() ? \'https://\' : \'http://\' ) . $_SERVER[\'HTTP_HOST\'] . $_SERVER[\'REQUEST_URI\']);

1 个回复
最合适的回答,由SO网友:Paul G. 整理而成

如果您正在打印URL,请对前端说。。。也就是说,它将作为普通URL显示给访问者等。然后:

esc_url()
如果您要在WordPress重定向(或其他发送http标头“location”的内容)中使用URL,那么您需要:

esc_url_raw()
这实际上是最近安全漏洞的基础和修复:https://blog.sucuri.net/2015/04/security-advisory-xss-vulnerability-affecting-multiple-wordpress-plugins.html

结束

相关推荐

WordPress Ajax Data Security

我知道nonce可以检查意图,但如果我可以用它们来限制数据库读取,那就没有任何意义了?我的意思是,我正在使用AJAX从数据库中获取记录,但我不希望任何人通过其他方式获得该数据(向该数据库发布请求admin-ajax.php 第页)。例如,在我的AJAX处理程序中,我有这么多的工作(我正在发送$myid 以及AJAX调用中的操作):$myid = 5575; $query = \"SELECT `id` FROM table WHERE `user_id` = $myid;\"; $data