Jsoup文档--HTML清理

清理不受信HTML(防止XSS攻击)

问题

在网站上允许不受信的用户提供HTML作为输出(e.g. 提交评论)。需要清理该HTML来避免跨站点脚本(XSS)攻击。

解决方案

使用jsoup提供的HTML Cleanner和一个指定Whitelist白名单的配置。

String unsafe = "<p><a href='http://example.com/' onclick='stealCookies()'>Link</a></p>";
String safe = Jsoup.clean(unsafe, Whitelist.basic());
// now: <p><a href="http://example.com/" rel="nofollow">Link</a></p>

描述

  • 跨站点脚本攻击对网站和用户造成极大影响。许多网站不允许在用户提交的内容中使用HTML来避免XSS攻击:它们强制只执行纯文本,或者使用另一种标记语法,比如wiki-text或Markdown。对于用户来说,这些解决方案很少是最优的,因为它们降低了表达能力,并迫使用户学习新的语法。
  • 更好的解决方案可能是使用富文本所见即所得的编辑器(如CKEditor或TinyMCE)。它们输出HTML,并允许用户可视化工作。但是,它们的验证是在客户端完成的:您需要应用服务器端验证来清理输入并确保HTML可以安全地放置在网站上。否则,攻击者可以避免客户端Javascript验证将不安全的HMTL直接注入网站。
  • jsoup白名单过滤器通过解析输入HTML(在安全的沙盒环境中),然后遍历解析树,只允许已知安全的标记和属性(和值),清理过后进入输出。
    它不使用正则表达式。
  • jsoup提供了一系列白名单配置来满足绝大多数的需求,如果有必要,它们可以修改,但要小心使用。
  • Cleaner不仅可以避免XSS欺诈,还可以限制用户可以提供的元素的范围:允许使用文本astrong元素,但不能使用结构化divtable元素。

其他参阅

  • 参考XSS cheat sheet(XSS欺诈表,这个自行搜索资源,原本给出的地址无法访问)和筛选器过滤指南,有示例可以了解为什么不能使用正则表达式,而采用安全的基于whitelist解析的清理器才是正确的选择。
  • 参阅Cleaner文档,了解如何返回一个 Document 对象,而不是字符串。
  • 参阅Whitelist查看不同的可选项,了解如何创建自定义白名单。
  • 禁止传递权重的链接属性nofollow(<a>标签属性,百科)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值