如何在这种情况下使用PHP(http://my_host_here.com/publications.php/“&gt; <script> alert(1)</script>)阻止javascript?

时间:2013-02-26 00:40:01

标签: php javascript sql-injection

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

?>

2 个答案:

答案 0 :(得分:0)

  1. 摆脱你的班级“安全”
  2. 仅使用mysql_[real_]escape_string 作为引用SQL查询的值作为带引号的字符串
  3. 其他任何SQL部分都必须根据其角色进行格式化。
  4. 在汇编查询之前格式化SQL部分,而不是在其他任何地方。
  5. 或更好地使用此占位符
  6. 最后,回答你的问题:在回显它们时,对用户提交的值使用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