我正在使用jquery
从div内容的网页中读取HtmlHTML代码
<div id="content">
Html Code
</div>
&#13;
Jquery代码
var htmlContent = $("#content").html();
使用Ajax Request将其直接保存到数据库中。但是如果有人将Html或Javascript代码注入到页面的Html内容中,那么它也会被保存到数据库中。
当下次在页面上加载html时,它会感染XSS攻击。有什么方法可以防止XSS攻击..
答案 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
一些措施包括
问题中还提到了这一点:
[...]并使用Ajax Request将其直接保存到数据库中。
无论您在客户端做什么,攻击者都可以直接向端点发送流量;所以不要忘记服务器端验证。
答案 2 :(得分:0)
一些提示:
通过这些措施,您可以更安全地抵御可能的xss攻击。
答案 3 :(得分:0)
数据库中的HTML应该不是问题 - 数据库服务器不会执行存储在数据表中的脚本。
问题,正如您所说,如果这是以原始形式输出到HTML页面。
您应该进行HTML编码以防止XSS - 在输出时执行此操作。
简单地使用OWASP XSS Experimental Minimal Encoding Rules。
- HTML实体编码&lt; &安培;
- 在metatag中指定charset以避免使用UTF7 XSS
- 限制对charset的输入 http://www.w3.org/TR/2008/REC-xml-20081126/#charsets
许多语言已经提供了HTML编码功能来执行上述操作 - 请记住,在输出中应用这些功能,并且仅在HTML上下文中应用(即不是脚本,CSS或注释)。
如果您需要在脚本中使用动态值,请参阅this answer。