代码之家  ›  专栏  ›  技术社区  ›  Tim

防止服务器端脚本,XSS

  •  5
  • Tim  · 技术社区  · 16 年前

    有没有预先制作的脚本可以用于php/mysql以防止服务器端脚本和JS注入?

    我知道一些典型的函数,比如htmlentities、特殊字符、字符串替换等,但是是否有一个简单的代码或者一个对所有事情都是故障保护的函数?

    任何想法都会很好。非常感谢:

    编辑: 一些普通的东西,除去任何可能有危险的东西,例如大于/小于标志、分号、单词“drop”等?

    我只想把所有的东西压缩成字母数字,我想…?

    7 回复  |  直到 13 年前
        1
  •  5
  •   Tomalak    16 年前

    从不将任何数据位输出到未通过的HTML流 htmlspecialchars() 你就完了。简单的规则,易于遵循,完全消除任何XSS风险。

    作为一个程序员 你的 不过,这是我们的工作。

    你可以定义

    function h(s) { return htmlspecialchars(s); }
    

    如果 HTML特殊字符() 太长,无法为每个PHP文件写入100次。另一方面,使用 htmlentities() 根本不需要。


    关键是:有代码,有数据。如果你把二者混为一谈,坏事就接踵而至。

    对于HTML,代码是元素、属性名、实体、注释。数据就是一切。数据 必须 避免被误认为是代码。

    对于URL,代码是查询字符串的方案、主机名、路径和机制。( ? , & , = , # )数据是查询字符串中的所有内容:参数名称和值。他们 必须 避免被误认为是代码。

    HTML中嵌入的URL 必须 双重转义(通过URL转义 HTML转义)以确保正确地分离代码和数据。

    现代浏览器能够将异常破碎和错误的标记解析成有用的东西。不过,不应该强调这种能力。发生了什么事情(比如在 <a href> 没有适当的HTML转义)并不意味着这样做是好的或正确的。XSS是一个问题,其根源在于a)人们不知道数据/代码分离(即“转义”)或那些草率的人;b)人们试图对他们不需要转义的数据的哪一部分保持聪明。

    如果确保不属于a)和b)类,那么XSS很容易避免。

        2
  •  3
  •   Jafar Mirzaei    13 年前

    我想 Google-caja 也许是个解决办法。编写了Java Web应用程序的污点分析器,自动检测和防范XSS。但不适用于PHP。我认为学习使用caja对Web开发人员来说并不坏。

        3
  •  1
  •   Quentin    16 年前

    不,没有。风险取决于您对数据的处理方式,您不能编写使数据对所有内容都安全的内容(除非您想放弃大部分数据)。

        4
  •  1
  •   symcbean    16 年前

    是否有一个简单的代码或者一个对所有事情都是故障保护的函数?

    不。

    离开PHP的数据的表示形式必须根据它的去向进行转换/编码。因此,只能在离开PHP的地方转换/编码。

    C.

        5
  •  0
  •   Jaya Kuma    13 年前

    您可以参考owasp以了解XSS攻击的更多信息:

    https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet

    为了避免JS攻击,您可以尝试开放源码卓越提供的这个项目:

    https://www.opensource-excellence.com/shop/ose-security-suite.html

    我的网站以前有过JS攻击,这个工具帮助我每天阻止所有攻击。我认为它可以帮助你们避免这个问题。

    此外,您可以在PHP脚本中添加一个过滤器来过滤所有JS攻击,这里有一个模式可以完成以下工作:

    如果(preg_match('/(?):[“”]脚本\s*()(?\ \ \ $?\ S*(\S*[\W”])(?// [\WS+] /(?):=\s*/\w+/\s*.)(?(?):此窗口顶部父帧自身内容)[\s*[(,,] 的S [\W\$])?:,\s*新\s+\w+\s*[,;)/ms',strToLower($post['variablename'])) { 过滤器变量($post['variablename']); }

        6
  •  -1
  •   Your Common Sense    16 年前

    回答你的版本:除了 <> 符号与XSS无关。
    htmlspecialchars()可以处理它们。

    这个词没有恶意 DROP table 在页面的文本中;)

        7
  •  -3
  •   GOsha    16 年前

    供干净的用户数据使用 html_special_chars(); str_replace() 以及其他切断不安全数据的功能。

    推荐文章