StringEscapeUtils 工具特殊字符转码,防止xss攻击

一.xss攻击简介

XSS 即(Cross Site Scripting)中文名称为:跨站脚本攻击。XSS的重点不在于跨站点,而在于脚本的执行。那么XSS的原理是:
恶意攻击者在web页面中会插入一些恶意的script代码。当用户浏览该页面的时候,那么嵌入到web页面中script代码会执行,因此会达到恶意攻击用户的目的。那么XSS攻击最主要有如下分类:反射型、存储型、及 DOM-based型。 反射性和DOM-baseed型可以归类为非持久性XSS攻击。存储型可以归类为持久性XSS攻击。这次主要是针对存储型做预防,
存储型XSS的原理是:主要是将恶意代码上传或存储到服务器中,下次只要受害者浏览包含此恶意代码的页面就会执行恶意代码。
例子:
比如现有一个博客网站,然后攻击者在上面发布了一篇文章,内容是如下: 如果我没有对该文章进行任何处理的话,直接存入到数据库中,那么下一次当其他用户访问该文章的时候,服务器会从数据库中读取后然后响应给客户端,那么浏览器就会执行这段脚本,然后攻击者就会获取到用户的cookie,然后会把cookie发送到攻击者的服务器上了。
如何防范?

  1. 后端需要对提交的数据进行过滤。
  2. 前端也可以做一下处理方式,比如对script标签,将特殊字符替换成HTML编码这些等。

二.使用apache 的common-text包中的StringEscapeUtils 工具对存入数据库的数据进行加解码

1.导入依赖

        
        <dependency>
            <groupId>org.apache.commonsgroupId>
            <artifactId>commons-textartifactId>
            <version>1.8version>
        dependency>

2.使用方法
1)escapeHtml转义html脚本
2)unescapeHtml反转义html脚本

System.out.println(StringEscapeUtils.escapeHtml("abc"));
System.out.println(StringEscapeUtils.unescapeHtml("<a>abc</a>"));

输出

&lt;a&gt;abc&lt;/a&gt;
<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("贝贝"));
System.out.println(StringEscapeUtils.unescapeXml("<name>贝贝</name>"));

输出

&lt;name&gt;&#36125;&#36125;&lt;/name&gt;
<name>贝贝</name>

你可能感兴趣的:(xss,java,前端)