当我们使用富文本编辑器的时候,为了确保存储的内容没有XSS注入问题,比较安全的做法是对输入的内容进行过滤。
常见的XSS注入方式可以参考这里:
https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet
Jsoup中提供给了白名单过滤的功能,但是并没有对属性进行校验,而属性中可能包含JS脚本或者是CSS注入,所以除了设置白名单的标签和属性之外,也需要对属性进行过滤。以下是一个过滤程序,允许你对属性进行自定义的过滤设置,并且允许动态的刷新白名单列表,方便在运行时增减支持从标签。
https://github.com/arthinking/java-code/tree/master/src/main/java/me/arthinking/html/jsoup/custom
还有另一种解决XSS的思路,就是严格的限制每一个标签和输入的属性值,只有符合声明的规则的HTML文本才允许校验通过,AntiSamy正是基于这个思路的,通过把符合安全规则的标签和属性值都通过正则的方式写入到了xml文件里面进行过滤,可以参考这里:
https://www.owasp.org/index.php/Category:OWASP_AntiSamy_Project