【问题标题】:XSS Protection - is it safe for someone to be able to create an exploit that only they can see?XSS 保护 - 有人能够创建只有他们才能看到的漏洞利用是否安全?
【发布时间】:2020-04-29 09:09:40
【问题描述】:

长话短说,我有一个网络应用程序,除其他外,它允许用户(必须登录)创建、部署和接收来自在线表单的提交,使用 JSON 框架进行数据存储。

在用户保存新创建的表单时,会运行各种检查以防止 SQL 注入并捕获潜在的 XSS 漏洞。

但是,在创建实际表单时,输入到字段中的任何代码都会在用户浏览器上实时呈现。所以,如果我决定在段落字段中输入以下内容:

<a href="#" onclick="alert(1);">click me</a>

...如果单击它会立即显示链接并运行 JS。但是,如果用户尝试保存此表单,则代码将被我现有的保护措施撕裂,并停止在已部署的表单上运行。因此,唯一可以运行代码的人就是创建它的人。

所以,我的问题是,允许用户实时动态创建内容(包括 JS)存在什么风险,前提是他们无法将其部署或保存到我的数据库中?我感觉可能存在风险,但我不是 XSS 专家。

为了澄清,只有生成代码的人才能运行它。他们保存数据的那一刻,它就会被撕裂。

【问题讨论】:

  • 如果您的清理工作如前所述,它是安全的。
  • 这让人放心。几个星期以来,我一直在向它扔 XSS 备忘单示例,但还没有找到任何可以通过的东西。但总是担心我忽略了一些东西。
  • 我猜你的情况类似于按 F12 并在浏览器控制台中输入 javascript。它只允许您访问您已经拥有的东西,其他实体不受它的影响。
  • @Flame 存在潜在的攻击,与开发控制台没有直接可比性。这取决于您想要保护您的应用程序的安全,而找出的工具是威胁建模。有趣的是,例如 Facebook 甚至发现开发控制台是一个潜在威胁,请参阅他们的控制台以进行缓解。 :)
  • @GaborLengyel 在这两种情况下,用户 A 都在运行他自己输入的代码。从这篇文章的标签来看,我认为用户输入只是以某种方式评估或插入到 DOM 中,这导致它执行。没有说明任何用户输入都发送到服务器。因此,威胁级别似乎与开发控制台输入相同。

标签: javascript security xss


【解决方案1】:

在您的情况下这是否存在风险取决于您的确切用例和威胁模型。

立即想到的是,如果攻击者向合法用户发送一段文本以复制粘贴到该字段中会怎样。在较大的文本块中发现代码可能并不容易,这样攻击者就可以利用它来对付毫无戒心的用户。此外,虽然我认为不太可能,但对客户端计算机的有限控制可以帮助利用这一点。因此,存在可能的攻击向量 - 与否,这取决于您的应用程序、谁使用它以及如何使用。

在专业的渗透测试中,这个通常被认为是有效的 XSS。

除此之外,请注意在输入端检查“防止 SQL 注入和捕获潜在的 XSS 攻击”可能不够有效,尤其是对于如此复杂的用户输入。为了防止 SQL 注入,您需要以某种方式进行参数化查询,为了防止 XSS,您需要输出编码,或者如果需要 HTML,则需要经过验证的清理解决方案(例如 Google Caja,但还有其他解决方案)。

在您的用例中,Javascript html sanitizer(例如 HTML Purifier 或 Caja 的纯 Javascript 部分)可以帮助防止 XSS。这必须与您的 UI 代码集成,以便在输入字段中输入的任何内容在添加到 DOM 之前都会得到适当的清理。请注意,只有在需要显示用户提供的 HTML 输入时才需要这样做。否则,您可以简单地输出用户输入的任何编码(或简单地将其作为文本节点分配给 DOM)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多