-1

我已经尝试了下面的代码,但似乎在将 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'));
    }
}

?>
4

2 回答 2

0

如果 Javascript 在代码返回服务器之前运行,那么这很可能是某种形式的基于 DOM 的 XSS。Javascript 可能会提取 的值/"><script>alert(1)</script>并将其直接放入 DOM。您可能必须更改在客户端处理此问题的方式。

OWASP 对如何防御基于 DOM 的跨站点脚本攻击进行了精彩的概述,例如:https ://www.owasp.org/index.php/DOM_based_XSS_Prevention_Cheat_Sheet

于 2013-02-28T03:27:29.810 回答
0
  1. 摆脱你的班级“安全”
  2. mysql_[real_]escape_string 用于作为带引号的字符串进入 SQL 查询的值
  3. 其他任何 SQL 部分都必须根据它们的角色进行格式化。
  4. 在组装查询之前格式化 SQL 部分,而不是在其他任何地方。
  5. 或更好地为此使用占位符

最后,回答您的问题:在回显用户提交的值时使用 htmlspecialchars() 。

于 2013-02-26T09:07:20.843 回答