• 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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

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

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

    输出

    &lt;a&gt;abc&lt;/a&gt;
    <a>abc</a>
    
    • 1
    • 2

    3.StringEscapeUtils 还可以进行字符串Unicode转义,xml转义
    Unicode转义
    1)escapeJava转义成Unicode编码
    2)unescapeJava反转义成Unicode编码

    System.out.println(StringEscapeUtils.escapeJava("你好"));
    System.out.println(StringEscapeUtils.unescapeJava("\u4F60\u597D"));
    
    • 1
    • 2

    输出

    \u4F60\u597D
    你好
    
    • 1
    • 2

    xml转义
    1)escapeXML转义XML
    2)unescapeXML反转义XML

    System.out.println(StringEscapeUtils.escapeXml("贝贝"));
    System.out.println(StringEscapeUtils.unescapeXml("<name>贝贝</name>"));
    
    • 1
    • 2

    输出

    &lt;name&gt;&#36125;&#36125;&lt;/name&gt;
    <name>贝贝</name>
    
    • 1
    • 2
  • 相关阅读:
    数据库、计算机网络,操作系统刷题笔记4
    TCP Westwood 更新(性能牛逼 )
    如何免安装使用 Python?推荐 17 个在线的 Python 解释器!
    改进YOLOv5系列:首发结合 RepLKNet 构建 最新 RepLKDeXt 结构|CVPR2022 超大卷积核, 越大越暴力,大到31x31, 涨点高效
    面试题:Kafka 为什么会丢消息?
    Go-手写注册中心
    简单的咖啡文化静态HTML网页设计作品 DIV布局咖啡馆文化网页模板代码 DW咖啡网站制作成品
    新环境下配置jupyter notebook并启动
    java lombok框架
    JAVA计算机毕业设计诗歌分享平台源码+系统+mysql数据库+lw文档
  • 原文地址:https://blog.csdn.net/mcband/article/details/126692275