• commons-lang常用工具类StringEscapeUtils使用--转


    https://my.oschina.net/ydsakyclguozi/blog/341496

    在apache commons-lang(2.3以上版本)中为我们提供了一个方便做转义的工具类,主要是为了防止sql注入,xss注入攻击的功能。

    commons-lang常用工具类StringEscapeUtils使用:

    1.escapeSql 提供sql转移功能,防止sql注入攻击,例如典型的万能密码攻击' ' or 1=1 ' '

      StringBuffer sql = new StringBuffer("select key_sn,remark,create_date from tb_selogon_key where 1=1 ");
    
      if(!CommUtil.isEmpty(keyWord)){
    
      sql.append(" and like '%" + StringEscapeUtils.escapeSql(keyWord) + "%'");

    2.escapeHtml /unescapeHtml  转义/反转义html脚本

    System.out.println(StringEscapeUtils.escapeHtml("<A>dddd</A>"));   
    
    输出结果为:
    
    <a>dddd</a>
    
    System.out.println(StringEscapeUtils.unescapeHtml("<a>dddd</a>"));   
    
    输出为:
    
    <A>ddd</A>

    3.escapeJavascript/unescapeJavascript 转义/反转义js脚本

    System.out.println(StringEscapeUtils.escapeJavaScript("<SCRIPT>alert('1111')</SCRIPT>"));   
    
    输出为:
    
    <script>alert('111')</script>

    4.escapeJava/unescapeJava 把字符串转为unicode编码

    System.out.println(StringEscapeUtils.escapeJava("中国"));   
    
    输出为:
    
    用escapeJava方法转义之后的字符串为:/u4E2D/u56FD/u5171/u4EA7/u515A

    另一个例子:

    import org.apache.commons.lang.StringEscapeUtils;  
    
    public class EscapeString {  
    
        public static void main(String[] args) throws Exception {  
    
            String str = "APEC召开时不让点柴火做饭";  
    
            System.out.println("用escapeJava方法转义之后的字符串为:"+StringEscapeUtils.escapeJava(str));  
    
            System.out.println("用unescapeJava方法反转义之后的字符串为:"+StringEscapeUtils.unescapeJava(StringEscapeUtils.escapeJava(str)));  
    
              
    
            System.out.println("用escapeHtml方法转义之后的字符串为:"+StringEscapeUtils.escapeHtml(str));  
    
            System.out.println("用unescapeHtml方法反转义之后的字符串为:"+StringEscapeUtils.unescapeHtml(StringEscapeUtils.escapeHtml(str)));  
    
              
    
            System.out.println("用escapeXml方法转义之后的字符串为:"+StringEscapeUtils.escapeXml(str));  
    
            System.out.println("用unescapeXml方法反转义之后的字符串为:"+StringEscapeUtils.unescapeXml(StringEscapeUtils.escapeXml(str)));  
    
              
    
            System.out.println("用escapeJavaScript方法转义之后的字符串为:"+StringEscapeUtils.escapeJavaScript(str));  
    
            System.out.println("用unescapeJavaScript方法反转义之后的字符串为:"+StringEscapeUtils.unescapeJavaScript(StringEscapeUtils.escapeJavaScript(str)));  
    
        /**输出结果如下: 
    
        用escapeJava方法转义之后的字符串为:APECu53ECu5F00u65F6u4E0Du8BA9u70B9u67F4u706Bu505Au996D
    
      用unescapeJava方法反转义之后的字符串为:APEC召开时不让点柴火做饭
    
      用escapeHtml方法转义之后的字符串为:APEC&#21484;&#24320;&#26102;&#19981;&#35753;&#28857;&#26612;&#28779;&#20570;&#39277;
    
      用unescapeHtml方法反转义之后的字符串为:APEC召开时不让点柴火做饭
    
      用escapeXml方法转义之后的字符串为:APEC&#21484;&#24320;&#26102;&#19981;&#35753;&#28857;&#26612;&#28779;&#20570;&#39277;
    
      用unescapeXml方法反转义之后的字符串为:APEC召开时不让点柴火做饭
    
      用escapeJavaScript方法转义之后的字符串为:APECu53ECu5F00u65F6u4E0Du8BA9u70B9u67F4u706Bu505Au996D
    
      用unescapeJavaScript方法反转义之后的字符串为:APEC召开时不让点柴火做饭
    
        }  
    
    }  

    表单富文本输入时,有html,需要转义,html+加中文时,用StringEscapeUtils.escapeHtml转义时,中文也转义了,经过查找,最终找到spring的org.springframework.web.util.HtmlUtils.htmlEscape

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>3.0.6.RELEASE</version>
    </dependency>
    public static void main(String[] args) {
            String a = "<html>吃饭</html>";
            System.out.println(StringEscapeUtils.escapeHtml(a));
            System.out.println(StringEscapeUtils.unescapeHtml(StringEscapeUtils.escapeHtml(a)));
            System.out.println(HtmlUtils.htmlEscape(a));
            System.out.println(HtmlUtils.htmlUnescape(HtmlUtils.htmlEscape(a)));
        }
    执行结果:
    
        &lt;html&gt;&#21507;&#39277;&lt;/html&gt;
    
        <html>吃饭</html>
    
        &lt;html&gt;吃饭&lt;/html&gt;
    
        <html>吃饭</html>

    感觉还是spring好,一点一滴的比较贴心。

  • 相关阅读:
    mysql 分库分表
    深度学习(四)转--入门深度学习的一些开源代码
    深度学习(三)转-可视化理解卷积神经网络 直接查看卷积神经网络的过程特征
    深度学习(二)神经网络中的卷积和反卷积原理
    深度学习(一)神经网络中的池化与反池化原理
    转-------基于R-CNN的物体检测
    vs2013下c++调用python脚本函数 出现的一些问题总结
    关于mfc作为上位机接收硬件端USB或串口数据显示成图片 解决串口接收数据丢字节丢包问题
    转-------CNN图像相似度匹配 2-channel network
    深度学习(五)基于tensorflow实现简单卷积神经网络Lenet5
  • 原文地址:https://www.cnblogs.com/davidwang456/p/9002505.html
Copyright © 2020-2023  润新知