我已经尝试了下面的代码,但似乎在http请求发送到服务器之前运行了javascript。
感谢
<?php
class secure
{
function secureSuperGlobalGET(&$value, $key)
{
$_GET[$key] = htmlspecialchars(stripslashes($_GET[$key]));
$_GET[$key] = str_ireplace("script", "blocked", $_GET[$key]);
$_GET[$key] = mysql_escape_string($_GET[$key]);
return $_GET[$key];
}
function secureSuperGlobalPOST(&$value, $key)
{
$_POST[$key] = htmlspecialchars(stripslashes($_POST[$key]));
$_POST[$key] = str_ireplace("script", "blocked", $_POST[$key]);
$_POST[$key] = mysql_escape_string($_POST[$key]);
return $_POST[$key];
}
function secureGlobals()
{
echo "in here";
array_walk($_GET, array($this, 'secureSuperGlobalGET'));
array_walk($_POST, array($this, 'secureSuperGlobalPOST'));
}
}
?>
答案 0 :(得分:0)
mysql_[real_]escape_string
作为引用SQL查询的值作为带引号的字符串 最后,回答你的问题:在回显它们时,对用户提交的值使用htmlspecialchars()。
答案 1 :(得分:0)
如果在代码返回服务器之前运行Javascript,那么很可能是某种形式的基于DOM的XSS。 Javascript可能会提取/"><script>alert(1)</script>
的值并将其直接放入DOM中。您可能必须更改在客户端处理此方法的方式。
OWASP对如何防御基于DOM的跨站脚本攻击(如下所示)进行了精彩概述:https://www.owasp.org/index.php/DOM_based_XSS_Prevention_Cheat_Sheet