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

避免XSS漏洞-白名单?

  •  3
  • Dale  · 技术社区  · 7 年前

    这里很多人都提到了白名单,这听起来是个好主意,但我看到很多人使用正则表达式定义白名单。这似乎有内在的缺陷,因为它取决于许多因素,其中最不重要的是正则表达式的实现和编写表达式的人不犯错误的技巧。因此,许多XSS攻击之所以成功,是因为它们使用 techniques to make the regex accept them .

    3 回复  |  直到 17 年前
        1
  •  4
  •   Dmytrii Nagirniak    17 年前

    看看 AntiXSS 图书馆。

        2
  •  2
  •   Mark E. Haase    16 年前

    Michael的答案是可以的,但它会阻止安全的HTML以及危险的输入。这意味着任何包含HTML格式的输入,如<em>将与实际的HTML代码一起显示。

    如果您希望接受安全的HTML,但阻止/过滤危险的输入,那么请使用经过测试、验证的第三方XSS过滤库,如HTMLPurifier: http://htmlpurifier.org/

    尤其不要将正则表达式用于XSS白名单。

        3
  •  0
  •   Rook    15 年前

    过滤XSS的最佳方法取决于您开发的平台。正则表达式在防止许多类型的漏洞方面很有用,但它并不总是最好的。在PHP中防止XSS的最佳方法是使用 htmlspeicalchars();

    反射XSS:

    print $_GET['xss'];
    

    修补:

    print htmlspecialchars($_GET['xss'],ENT_QUOTES);
    

    http://127.0.0.1/xss.php?xss=<script>alert(/xss/)</script>

    真正的问题远不止这些 < > 符号,如果这些符号被替换为 &lt; 和 &gt; 这样你就不会受到XSS的威胁了。