【问题标题】:Laravel: sanitize user input against XSS when HTML tags are allowdLaravel:允许使用 HTML 标记针对 XSS 清理用户输入
【发布时间】:2017-04-20 03:04:51
【问题描述】:

当他/她被允许使用 HTML 标签时,我应该如何防止恶意用户执行 XSS 攻击,即在 textarea 元素中?我不会删除所有标签或转义它们,所以我不能使用 {{ }}

顺便说一句:还有另一种危险的情况,即使{{ }} 也不是一个好主意。请考虑this link。有没有什么办法可以让用户使用html标签,但防止他进行XSS攻击?

【问题讨论】:

    标签: javascript php html laravel xss


    【解决方案1】:

    客户端 html 编辑器可能是尝试防止 XSS 时面临的最大挑战。实际上,许多第 3 方编辑器组件都无法做到这一点。

    在许多情况下实际上可以很好地工作的一种方法是清理。您可以使用以 html 作为其输入并具有与其输出几乎相同的 html 的 sanitizer 库,除了它(应该)删除所有 javascript。一个例子是HTML Purifier,它在服务器端执行此操作。

    许多人可能会争辩说,唯一正确的地方是服务器端。但是,有时有一个警告,它可能适用于您的用例,也可能不适用于您的用例。如果客户端 html 编辑器有预览,也必须对其进行清理以防止 DOM XSS,并且预览通常不会发送到服务器(编辑的内容只是立即显示在客户端上,无需服务器往返)。虽然这是一种风险较低的 XSS,但它绝对是您需要预防的一种,并且服务器端清理在这里没有什么好处。

    因此,您可能希望在服务器端之外或代替服务器端使用客户端消毒剂。一个例子是Google Caja 中的客户端消毒剂(这是一个更大的项目,我只是在谈论他们的sanitizer in Javascript),或者还有DOMPurify 客户端上的另一个示例。这些可以挂接到任何客户端 html 编辑器组件中,以在实际显示任何代码之前对其进行清理,从而有效地消除 XSS。

    任何清理的风险是清理程序遗漏了一些东西,并且允许 XSS 的攻击向量通过。这基本上是一个信任的事情,很多人都使用 Caja,例如,它是由 Google 开发的,所以你可能有一些保证它相当不错。这对您来说是否足够好取决于您的具体情况、风险偏好等。

    可能还有其他方法(提供来自不同来源的 HTML 内容并接受该来源的 XSS 风险,或者使用自定义标记小心地将其转换为无 XSS 的 html 等),但清理可能最适合大多数用例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-07
      • 2019-07-30
      • 2016-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-28
      相关资源
      最近更新 更多