【问题标题】:Saving Html from Webpage and Prevent XSS从网页保存 Html 并防止 XSS
【发布时间】:2016-06-23 18:36:42
【问题描述】:

我正在使用 jquery 从网页中的 div 内容中读取 Html

HTML 代码

<div id="content">
Html Code
</div>

Jquery 代码

 var htmlContent = $("#content").html();

并使用 Ajax 请求将其直接保存到数据库中。但是如果有人将 Html 或 Javascript 代码注入到页面的 Html 内容中,那也会被保存到数据库中。

当下次在页面上加载 html 时,它会感染 XSS 攻击。有什么办法可以防止 XSS 攻击..

【问题讨论】:

  • 你为什么要这样做?我认为在数据库中存储硬编码的 HTML 已经够糟糕的了。最好和最安全的方法是不这样做。如果您发布您尝试实现的目标,也许可以给出更好的方法。
  • @ste2425 我正在使用拖放方法动态创建邮件模板。因此,我将 Html 放入 div 中,然后用户可以将他的文本添加到该 html 中,或者可以添加图像,然后在最终保存时将其保存到数据库中。
  • 这也可能是转移到 security.stackexchange.com 的好问题

标签: jquery html xss


【解决方案1】:

理想情况下,您将拥有正在存储的 html 的数据模型,并且您将以 json 等格式存储该模型。那个json可以用来重构html。

在该 json 模型中,您只会包含被认为是安全的内容。

现在,如果您仍需要将 html 代码存储在数据库中并稍后将其注入页面,那么您唯一安全的选择是在服务器上搜索该 html,将其内容与允许内容的白名单进行比较, 并删除不在白名单中的所有内容。

见this post

【讨论】:

    【解决方案2】:

    OWASP 有一个专门用于防止 XSS 的页面:

    https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet

    一些措施包括

    • 实体编码
    • html 验证
    • 网址编码
    • 清理(基于白名单)
    • ...

    问题中也提到了这一点:

    [...] 并使用 Ajax 请求将其直接保存到数据库中。

    无论你在客户端做什么,攻击者都可以直接向端点发送流量;所以不要忘记服务器端验证。

    【讨论】:

      【解决方案3】:

      一些提示:

      • 使用正确的编码,确保不会发生 SQL 注入
      • 提供客户端和服务器端验证
      • 清理 html 在将其推入数据库之前剥离所有脚本(请参阅 wikipedia link)
      • 使用 CSP 标头 避免在显示 html 时执行内联脚本(请参阅Content Security Policy)

      通过这些措施,您将更安全地抵御可能的 xss 攻击。

      【讨论】:

        【解决方案4】:

        数据库中的 HTML 应该不是问题 - 数据库服务器不会执行存储在数据表中的脚本。

        问题,正如您所说,如果这是以原始形式输出到 HTML 页面。

        您应该进行 HTML 编码以防止 XSS - 在输出时执行此操作。

        为了简单起见,请使用OWASP XSS Experimental Minimal Encoding Rules。

        许多语言已经提供了 HTML 编码功能来执行上述操作 - 请记住,将这些功能应用于输出并且仅在 HTML 上下文中(即不是脚本、CSS 或 cmets)。

        如果您需要在脚本中使用动态值,请参阅this answer。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-02-13
          • 2011-01-01
          • 1970-01-01
          • 2012-10-28
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多