【问题标题】:XSS : input validation from server sideXSS:来自服务器端的输入验证
【发布时间】:2015-10-14 09:34:32
【问题描述】:

我的应用程序存在跨站点脚本 (XSS) 漏洞问题。 我有多个表单,用户可以在其中提交数据,这些数据将存储在数据库中并稍后在 jsp 页面中显示。 我发现这个应用程序没有得到足够的保护,用户可以提交会引发 XSS 攻击的恶意代码。

我需要在提交表单后验证来自服务器端的用户输入。 因为在客户端,数据是使用一个表格库显示的,该表格库将呈现一个 html 内容(我无法控制这个库)。 我在此链接 (https://appsec-labs.com/portal/xss-java-secure-coding/) 中找到了一个不错的库,但它只涉及客户端。

如何验证这些输入数据?无论是 html 还是 javscript 代码或其他。

谢谢

【问题讨论】:

    标签: security xss


    【解决方案1】:

    基本上,您需要将 HTML 特殊字符(如 <)替换为它们的 HTML 实体(如 <)。

    在 JSP 中,您可以使用 JSTL 标记或 fn:escapeXml() 来防止这种情况。还有另一个答案是covers that here。在 PHP 中,您可以尝试使用 htmlspecialchars 函数。

    还要小心SQL injectionCSRF attacksOWASP Top Ten 列出了一些常见的漏洞。

    【讨论】:

    • 那么是否有一种库可以转义并验证用户输入是否为 html 代码、javascript..(服务器端)?在 jsp 中,我不能使用 JSTL 标记或 fn:escapeXml(),因为我有一个可能包含恶意代码的对象列表,我将其提供给表库以显示此列表的内容。
    • 你只需要过滤HTML标签,Javascript不能运行,除非你把它包裹在<script>标签中。
    • @mjsa <img src="" onerror="alert(1)"/> 只是不想让任何人从字面上理解您的信息。 XSS 并不总是需要脚本标签。我知道你是说<,>等会在这里转义,但评论本身可能会产生误导。
    • @Gray 是的,我同意;只是试图简化(在这种情况下导致过度简化)。 :p
    【解决方案2】:

    解决这个问题的正确方法是修复这个库(你无法控制)或者用更好的东西替换它。缺陷在库中,而不是在您的代码中。 XSS 漏洞的存在是因为渲染代码会在不安全的位置插入数据和/或无法正确转义其输出。

    话虽如此,有可能在不修复/替换库的情况下保护您的应用程序。或者它可能不会。这在很大程度上取决于库在何处插入用户提供的数据。

    如果您可以将输入限制为一串字母数字字符,或者更好的是授权值的白名单,那么您很可能是安全的。这意味着没有空格,没有单引号或双引号,没有小于或大于符号,没有逗号,没有冒号,没有分号......如果你不能并且你无法控制渲染代码既然如此,那么所有的赌注都没有了。

    阅读以下内容,您可能会更好地理解这个问题: https://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet

    【讨论】:

      【解决方案3】:

      我会推荐 OWASP java 编码器(或 ESAPI)项目。 https://www.owasp.org/index.php/OWASP_Java_Encoder_Project(在 GitHub 上:https://github.com/OWASP/owasp-java-encoder/)。可悲的是,多科有点稀疏。

      XSS 的问题在于它依赖于上下文。您需要根据显示用户输出的位置进行不同的编码(例如,您在 javascript 标记之间、uri 中或 html 标记之间放置的数据的不同编码)。 OWASP Java Encoder 设置了不同的上下文,您可以对其进行编码/解码。如果数据只是通过 jsp 标签输出,那么我会使用

      Encode.forHtml("input here");
      

      您还可以为 javascript 编码:

      Encode.forJavaScript("input here");
      

      您可以在 owasp 网站上下载它,或者通过 maven(查看 github 链接)。

      这个库还允许您通过 JSP 页面中的 JSP 标记进行编码,但您必须四处挖掘才能找到相应的文档。我一直都是用 Java 做的。

      这个 stackoverflow 问题涵盖了有关如何正确配置库的链接:Configure ESAPI Security Encoding Library to prevent XSS Cross-site scripting issue

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-13
        • 1970-01-01
        • 2017-05-09
        • 1970-01-01
        • 2021-07-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多