一.xss攻击简介
XSS 即(Cross Site Scripting)中文名称为:跨站脚本攻击。XSS的重点不在于跨站点,而在于脚本的执行。那么XSS的原理是:
恶意攻击者在web页面中会插入一些恶意的script代码。当用户浏览该页面的时候,那么嵌入到web页面中script代码会执行,因此会达到恶意攻击用户的目的。那么XSS攻击最主要有如下分类:反射型、存储型、及 DOM-based型。 反射性和DOM-baseed型可以归类为非持久性XSS攻击。存储型可以归类为持久性XSS攻击。这次主要是针对存储型做预防,
存储型XSS的原理是:主要是将恶意代码上传或存储到服务器中,下次只要受害者浏览包含此恶意代码的页面就会执行恶意代码。
例子:
比如现有一个博客网站,然后攻击者在上面发布了一篇文章,内容是如下: 如果我没有对该文章进行任何处理的话,直接存入到数据库中,那么下一次当其他用户访问该文章的时候,服务器会从数据库中读取后然后响应给客户端,那么浏览器就会执行这段脚本,然后攻击者就会获取到用户的cookie,然后会把cookie发送到攻击者的服务器上了。
如何防范?
- 后端需要对提交的数据进行过滤。
- 前端也可以做一下处理方式,比如对script标签,将特殊字符替换成HTML编码这些等。
二.使用apache 的common-text包中的StringEscapeUtils 工具对存入数据库的数据进行加解码
1.导入依赖
<!--字符转义-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-text</artifactId>
<version>1.8</version>
</dependency>
2.使用方法
1)escapeHtml转义html脚本
2)unescapeHtml反转义html脚本
System.out.println(StringEscapeUtils.escapeHtml("<a>abc</a>"));
System.out.println(StringEscapeUtils.unescapeHtml("<a>abc</a>"));
输出
<a>abc</a>
<a>abc</a>
3.StringEscapeUtils 还可以进行字符串Unicode转义,xml转义
Unicode转义
1)escapeJava转义成Unicode编码
2)unescapeJava反转义成Unicode编码
System.out.println(StringEscapeUtils.escapeJava("你好"));
System.out.println(StringEscapeUtils.unescapeJava("\u4F60\u597D"));
输出
\u4F60\u597D
你好
xml转义
1)escapeXML转义XML
2)unescapeXML反转义XML
System.out.println(StringEscapeUtils.escapeXml("<name>贝贝</name>"));
System.out.println(StringEscapeUtils.unescapeXml("<name>贝贝</name>"));
输出
<name>贝贝</name>
<name>贝贝</name>