【问题标题】:Preventing XSS attacks防止 XSS 攻击
【发布时间】:2022-01-08 06:35:59
【问题描述】:

我正在创建一个网页,用户可以在其中交互并在远程计算机上执行基本的文件系统操作(创建文件/目录、删除文件/目录、导航文件系统)。 该网页是基本的 HTML(UTF-8 编码)和 Javascript。我需要使这个网页 XSS 证明。

使用 Javascript(这会输出百分比编码的十六进制值)转义用户输入中的所有非字母数字字符(以防止基于 DOM 的 XSS)和文件名信息(以防止存储的 XSS)就足够了吗?

我基本上只是将字母数字输入列入白名单。另外,由于我使用的是百分比编码的十六进制值,我假设不应该存在 UTF 编码漏洞。

谁能想到这个机制有什么安全漏洞?

【问题讨论】:

    标签: xss


    【解决方案1】:

    听起来是安全的,而且可能是安全的,但有一个问题。它只有在您正确实施时才有效。太容易出错了。如果你想这样做,那没关系,但我建议使用一些已经测试过的库来做到这一点,而不是自己动手。

    【讨论】:

      【解决方案2】:

      编码很好。最大的潜在风险是您如何处理数据以及是否/何时解码/显示数据。如果您解码用户输入并显示它,解码数据,那么您可能会遇到问题。

      如果您没有迫切需要支持在潜在 XSS 漏洞方面风险更大的字符(例如''、';'等),那么我认为将这些字符列入黑名单是合理的也是。这样,在您解码和显示数据的情况下,您就不会潜在地表达 XSS 问题。

      【讨论】:

        【解决方案3】:

        使用 javascript(我认为你在说什么)进行转义似乎不太安全。它在用户机器上运行,他们可以通过一些努力绕过转义机制。

        您尝试做的事情听起来不错,但您需要在服务器端进行。

        【讨论】:

        • 用户可以简单地禁用 JavaScript。
        【解决方案4】:

        防御 XSS 的基本方法是尽可能使用正则表达式来验证输入并编码 all 输出。编码输出可能很棘手,因此最好使用库。您的应用程序的至少一个重要输入是文件名,因此您需要一个正则表达式来匹配目标操作系统的任何有效文件名。仅接受字母数字输入会使您的应用无法处理常见操作系统上的许多文件名。我不明白为什么使用 %hex 值会有任何好处。没有理由不能以这种方式对恶意脚本进行编码。同一个脚本可以有许多有效的 utf-8 表示。您需要阅读更多关于反 XSS 编码实践的背景知识。 Google OWASP 供参考。

        【讨论】:

          【解决方案5】:

          注意几点:

          • 正如@Alo 所说,这应该在服务器端完成,以防止攻击者完全绕过您的 javascript 并将恶意输入直接发送到服务器。但是,正如您所指出的,这应该(在某些情况下)也在客户端完成,以防止基于 DOM 的 XSS。
          • 您提到该页面是 UTF-8,您需要使用元标记、HTTP 标头等强制执行此操作。否则,您很容易受到 UTF-7 攻击。
          • 空格 - 是不是字母数字? (有些包括...)在某些情况下,仅使用空格和字母,就可以进行全面的 XSS 攻击。

          在我对Will HTML Encoding prevent all kinds of XSS attacks? 的回复中查看更多信息,您会在那里找到您需要知道的所有信息。

          【讨论】:

            【解决方案6】:

            补充其他观点的注释:

            确保您正确使用 GET 和 POST,因为这是许多网站上最简单的安全漏洞。

            如果用户输入会触发对数据库的任何更改,请确保使用 POST。

            如果您正在检索要显示的信息,则只有用户 GET。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2023-03-04
              • 1970-01-01
              • 1970-01-01
              • 2018-07-16
              相关资源
              最近更新 更多