近期由于项目安全需要,为了防止XSS注入,对于上传的HTML文件需要过滤JS和CSS,对于一些公用的可以采取白名单的方式,这里记录下解析HTML文件的方法。
第一种:JSOUP
File input = new File("C:\\Users\\Administrator\\Desktop\\test.html");
Document doc = Jsoup.parse(input, "UTF-8", "");
Elements elements = doc.getElementsByTag("script");
for (Element element : elements) {
System.out.println(element.attr("src"));
}
第二种:正则表达式:
- /**
- * 获取指定HTML标签的指定属性的值
- * @param source 要匹配的源文本
- * @param element 标签名称
- * @param attr 标签的属性名称
- * @return 属性值列表
- */
- public static List<String> match(String source, String element, String attr) {
- List<String> result = new ArrayList<String>();
- String reg = "<" + element + "[^<>]*?\\s" + attr + "=['\"]?(.*?)['\"]?(\\s.*?)?>";
- Matcher m = Pattern.compile(reg).matcher(source);
- while (m.find()) {
- String r = m.group(1);
- result.add(r);
- }
- return result;
- }
- public static void main(String[] args) {
- String source = "<a title=中国体育报 href=''>aaa</a><a title='北京日报' href=''>bbb</a>";
- List<String> list = match(source, "a", "title");
- System.out.println(list);
- }