JavaWeb防注入知识点(一)

一、防sql注入办法

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

JavaWeb防注入知识点(一)

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

[java] view plain copy
  1. StringBuffer sql = new StringBuffer("select key_sn,remark,create_date from tb_selogon_key where 1=1 ");  
  2.         if(!CommUtil.isEmpty(keyWord)){  
  3.             sql.append(" and like '%" + StringEscapeUtils.escapeSql(keyWord) + "%'");  
  4.         }  

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

[java] view plain copy
  1. System.out.println(StringEscapeUtils.escapeHtml("<a>dddd</a>"));     
  2. //输出结果为:<a>dddd</a>  
  3. System.out.println(StringEscapeUtils.unescapeHtml("<a>dddd</a>"));     
  4. //输出为:<a>ddd</a>  
3.escapeJavascript/unescapeJavascript 转义/反转义js脚本
[java] view plain copy
  1. System.out.println(StringEscapeUtils.escapeJavaScript("<script>alert('1111')</script>"));     
  2. //输出为:<script>alert('111')</script>  
4.escapeJava/unescapeJava 把字符串转为unicode编码
[java] view plain copy
  1. System.out.println(StringEscapeUtils.escapeJava("中国"));     
  2. //输出为:用escapeJava方法转义之后的字符串为:/u4E2D/u56FD/u5171/u4EA7/u515A  
二、防js注入办法

如第一部分所说,可以使用commons-lang包后台转换实现;

还可以用 HTML 编码任何网站用户输入的数据,如:<%=Html.Encode(feedback.Message)%> 使用 HTML 编码一个字符串的含意是什么呢?使用 HTML 编码字符串时,危险字符如 < 和 > 被替换为 HTML 实体,如 < 和 >。所以,当使用 HTML 编码字符串 <script>alert("Boo!")</script> 时,它将转换为 <script>alert("Attack!")</script>。浏览器在解析编码的字符串时不再执行 JavaScript 脚本。而是显示无害的页面。


实例

  1. package stringescapeutils;  
  2.   
  3. import org.apache.commons.lang.StringEscapeUtils;  
  4.   
  5. public class StringEscapeUtilsTest {  
  6.   
  7.     public static void main(String args[]){  
  8.           
  9.         String sql="1' or '1'='1";  
  10.         System.out.println("防SQL注入:"+StringEscapeUtils.escapeSql(sql)); //防SQL注入  
  11.           
  12.         System.out.println("转义HTML,注意汉字:"+StringEscapeUtils.escapeHtml("<font>chen磊  xing</font>"));    //转义HTML,注意汉字  
  13.         System.out.println("反转义HTML:"+StringEscapeUtils.unescapeHtml("<font>chen磊  xing</font>"));  //反转义HTML  
  14.           
  15.         System.out.println("转成Unicode编码:"+StringEscapeUtils.escapeJava("陈磊兴"));     //转义成Unicode编码  
  16.           
  17.         System.out.println("转义XML:"+StringEscapeUtils.escapeXml("<name>陈磊兴</name>"));   //转义xml  
  18.         System.out.println("反转义XML:"+StringEscapeUtils.unescapeXml("<name>陈磊兴</name>"));    //转义xml  
  19.           
  20.     }  
  21. }  

输入结果:

[java] view plain copy
  1. 防SQL注入:1'' or ''1''=''1  
  2. 转义HTML,注意汉字:<font>chen磊  xing</font>  
  3. 反转义HTML:<font>chen磊  xing</font>  
  4. 转成Unicode编码:\u9648\u78CA\u5174  
  5. 转义XML:<name>陈磊兴</name>  
  6. 反转义XML:<name>陈磊兴</name>