zoukankan      html  css  js  c++  java
  • 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好,一点一滴的比较贴心。

  • 相关阅读:
    函数的调用-转载
    HTML常用标签-手打抄录-来自-烟雨飘零-拜谢
    CSS常用标签-手打抄录-感谢原未知博主-拜谢了
    JS函数表达的几种写法
    JS数组---转及补充--
    标准文档流特性-不含块级元素和行内元素
    块级元素和行内元素-标签收集-区别之处
    CSS盒子知识
    把应用push到/system/app上面后,出现java.lang.UnsatisfiedLinkError的问题
    Vysor:在电脑里控制你的安卓手机
  • 原文地址:https://www.cnblogs.com/davidwang456/p/9002505.html
Copyright © 2011-2022 走看看