从网页保存Html并防止XSS

时间:2016-06-22 05:27:23

标签: jquery html xss

我正在使用jquery

从div内容的网页中读取Html

HTML代码



<div id="content">
Html Code
</div>
&#13;
&#13;
&#13;

Jquery代码

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

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

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

4 个答案:

答案 0 :(得分:1)

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

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

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

请参阅this post

答案 1 :(得分:0)

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

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

一些措施包括

  • 实体编码
  • html validation
  • url encoding
  • 清理(基于白名单)
  • ...

问题中还提到了这一点:

  

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

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

答案 2 :(得分:0)

一些提示:

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

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

答案 3 :(得分:0)

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

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

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

简单地使用OWASP XSS Experimental Minimal Encoding Rules

  

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

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