Java对html标签的过滤和清洗
OWASP HTML Sanitizer 是一个简单快捷的java类库,主要用于放置XSS
优点如下:
1.使用简单。不需要繁琐的xml配置,只用在代码中少量的编码
2.由Mike Samuel(谷歌工程师)维护
3.通过了AntiSamy超过95%的UT覆盖
4.高性能,低内存消耗
5.是 AntiSamy DOM性能的4倍
1.POM中增加
<!--html标签过滤-->
<dependency>
<groupId>com.googlecode.owasp-java-html-sanitizer</groupId>
<artifactId>owasp-java-html-sanitizer</artifactId>
<version>r136</version>
</dependency>
2.工具类
import org.owasp.html.ElementPolicy;
import org.owasp.html.HtmlPolicyBuilder;
import org.owasp.html.PolicyFactory; import java.util.List; /**
* @author : RandySun
* @date : 2018-10-08 10:32
* Comment :
*/
public class HtmlUtils { //允许的标签
private static final String[] allowedTags = {"h1", "h2", "h3", "h4", "h5", "h6",
"span", "strong",
"img", "video", "source",
"blockquote", "p", "div",
"ul", "ol", "li",
"table", "thead", "caption", "tbody", "tr", "th", "td", "br",
"a"
}; //需要转化的标签
private static final String[] needTransformTags = {"article", "aside", "command","datalist","details","figcaption", "figure",
"footer","header", "hgroup","section","summary"}; //带有超链接的标签
private static final String[] linkTags = {"img","video","source","a"};
public static String sanitizeHtml(String htmlContent){
PolicyFactory policy = new HtmlPolicyBuilder()
//所有允许的标签
.allowElements(allowedTags)
//内容标签转化为div
.allowElements( new ElementPolicy() {
@Override
public String apply(String elementName, List<String> attributes){
return "div";
}
},needTransformTags)
.allowAttributes("src","href","target").onElements(linkTags)
//校验链接中的是否为http
.allowUrlProtocols("https")
.toFactory();
String safeHTML = policy.sanitize(htmlContent);
return safeHTML;
} public static void main(String[] args){
String inputHtml = "<img src=\"https://a.jpb\"/>";
System.out.println(sanitizeHtml(inputHtml));
}
}
其中.allowElements(allowedTags)是添加所有允许的html标签,
以下是需要转化的标签,把needTransformTags中的内容全部转化为div
//内容标签转化为div
.allowElements( new ElementPolicy() {
@Override
public String apply(String elementName, List<String> attributes){
return "div";
}
},needTransformTags)
.allowAttributes("src","href","target").onElements(linkTags)是在特定的标签上允许的属性
.allowUrlProtocols("https")表示href或者src链接中只允许https协议
Java对html标签的过滤和清洗的更多相关文章
- Java自定义简单标签
Java自定义简单标签可以方便的在页面输出信息,并且对于权限的控制,和对于Jsp标签和servlet代码的分离有着很好的作用. 下面将以权限的控制为例自定义一个标签: 一.标签类型 <wxt: ...
- java把html标签字符转普通字符(反转换成html标签)(摘抄)
下面是java把html标签字符转换,我用了spring 包中的 org.springframework.web.util.HtmlUtils 了解了源代码并且进步了使用,发现写得真不错...同时也可 ...
- LeetCode第[18]题(Java):4Sum 标签:Array
题目难度:Medium 题目: Given an array S of n integers, are there elements a, b, c, and d in S such that a + ...
- Java的Annotation标签
只需要简单的使用Java的Annotation标签即可将标准的Java方法发布成Web Service,但不是所有的Java类都可以发布成Web Service.Java类若要成为一个实现了Web S ...
- 高效Java敏感词、关键词过滤工具包_过滤非法词句
敏感词.文字过滤是一个网站必不可少的功能,如何设计一个好的.高效的过滤算法是非常有必要的.前段时间我一个朋友(马上毕业,接触编程不久)要我帮他看一个文字过滤的东西,它说检索效率非常慢.我把它程序拿过来 ...
- Java循环中标签的作用(转)
转自:http://lihengzkj.iteye.com/blog/1090034 以前不知道在循环中可以使用标签.最近遇到后,举得还是有其独特的用处的.我这么说的意思是说标签在循环中可以改变循环执 ...
- Java学习——JSTL标签与EL表达式之间的微妙关系
原文总结的太好了,忍不住记录.转发. 原文地址:http://blog.csdn.net/u010168160/article/details/49182867 目录(?)[-] 一EL表达式 EL相 ...
- 杂项-Java:自定义标签
ylbtech-杂项-Java:自定义标签 1.返回顶部 1. 一般我们说自定义标签是指JSP自定义标签.自定义标签在功能上逻辑上与javaBean 类似,都封装Java 代码.自定义标签是可重用的组 ...
- Java之JSTL标签与JavaBean
Java之JSTL标签与JavaBean JSP.JSTL标签及 EL表达式 <!-- jstl表达式--> <dependency> <groupId>javax ...
随机推荐
- C# AJAXform上传图片
前台: @{ Layout = null;} <!DOCTYPE html> <html><head> <meta name="vie ...
- 一、spark单机安装
如果要全面的使用spark,你可能要安装如JDK,scala,hadoop等好些东西.可有时候我们只是为了简单地安装和测试来感受一下spark的使用,并不需要那么全面.对于这样的需要,我们其实只要安装 ...
- layui对json数据的格式要求
layui有自己的一套特定的数据格式交互,必须参数code:0,msg:“”,count:数据size(int),data:”数据List”.**一般我们选择封装返回接收类**. 若想要绑定数据到la ...
- sublime 在Mac终端下设置快捷打开方式
vi ~/.zshrc alias subl='open -a "Sublime Text"' source ~/.zshrc 打开 ~/.zshrc,然后写入第二行,然后执行第三 ...
- Inside the C++ Object Model:构造语意(chapter5)
看到构造语意的其中一节“继承体系下的对象构造”(5.2节)的最后,看来原文,发现侯杰的翻译有问题,怪不得读起来不顺. What about when providing an argument for ...
- 0 test classes found in package in XXXX
除了参考其他的方法,要注意XXXX位置下是否有空文件夹,删掉.
- Dinic算法----最大流常用算法之一
——没有什么是一个BFS或一个DFS解决不了的:如果有,那就两个一起. 最大流的$EK$算法虽然简单,但时间复杂度是$O(nm^2)$,在竞赛中不太常用. 竞赛中常用的$Dinic$算法和$SAP$, ...
- Django之ModelForm使用
一:什么是ModelForm呢? Model + Form ==> ModelForm.model和form的结合体,所以有以下功能: 数据验证 数据库操作 model有操作数据库的字段,for ...
- JavaScript的进阶之路(七)客户端JavaScript知识点总结
一.客户端JavaScript主要是BOM DOM的操作和js脚本的兼容性.互用性.可访问性.安全性的应用.以及一些框架的引用. 二.BOM:浏览器对象模型 主要介绍window对象 1.定时器:se ...
- 利用localStorage事件来跨标签页共享sessionStorage
//干货 利用localStorage事件来跨标签页共享sessionStorage //因为cookie保存字节数量有限,很多童鞋考虑用html5 storage来保存临时数据,Sessionsto ...