Spring 中处理XSS

来源:互联网 发布:轻淘客cms是什么 编辑:程序博客网 时间:2024/05/24 00:23

有2种方式

一:在BaseController中定义方法

[java] view plain copy
  1. /** 
  2.  * 初始化数据绑定 
  3.  * 1. 将所有传递进来的String进行HTML编码,防止XSS攻击 
  4.  *  
  5.  */  
  6. @InitBinder  
  7. protected void initBinder(WebDataBinder binder) {  
  8.     // String类型转换,将所有传递进来的String进行HTML编码,防止XSS攻击  
  9.     binder.registerCustomEditor(String.classnew PropertyEditorSupport() {  
  10.         @Override  
  11.         public void setAsText(String text) {  
  12.             setValue(text == null ? null : StringEscapeUtils.escapeHtml4(text.trim()));  
  13.         }  
  14.         @Override  
  15.         public String getAsText() {  
  16.             Object value = getValue();  
  17.             return value != null ? value.toString() : "";  
  18.         }  
  19.     });  
  20. }  

 其他Controller继续该抽象类即可。

二种:定义自己的编辑器

[java] view plain copy
  1. public class StringEscapeEditor extends PropertyEditorSupport {  
  2.   
  3.     public StringEscapeEditor() {  
  4.         super();  
  5.     }  
  6.   
  7.     public void setAsText(String text) {  
  8.         if (text == null) {  
  9.             setValue(null);  
  10.         } else {  
  11.             String value = text;  
  12.             value = StringEscapeUtils.escapeHtml4(value);  
  13. //          value = StringEscapeUtils.escapeJavaScript(value);  
  14. //          value = StringEscapeUtils.escapeSql(value);  
  15.             setValue(value);  
  16.         }  
  17.     }  
  18.   
  19.     public String getAsText() {  
  20.         Object value = getValue();  
  21.         return value != null ? value.toString() : "";  
  22.     }  
  23.   
  24.     public static void main(String[] args) {  
  25.         String xx="'><script>alert(document.cookie)</script>";  
  26.         System.out.println(StringEscapeUtils.escapeHtml4(xx));  
  27.     }  
  28. }  

[java] view plain copy
  1. public class MyBindingInitializer implements WebBindingInitializer {  
  2.     @Override  
  3.     public void initBinder(WebDataBinder binder, WebRequest request) {  
  4.         // 注册自定义的属性编辑器。这里可以注册多个属性编辑器  
  5.         binder.registerCustomEditor(String.classnew StringEscapeEditor());  
  6.   
  7.     }  
  8. }  

配置文件里注册下

[java] view plain copy
  1. <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">  
  2. <property name="webBindingInitializer">    
  3.         <bean class="com.bypay.forpay.web.common.MyBindingInitializer"/>    
  4.     </property>    
  5. </bean>  


其他注意事项:

[java] view plain copy
  1. 在Oracle中,如果SQL中有like查询,若输入条件为:'><script>alert(document.cookie)</script>  
[java] view plain copy
  1. sql的写法:  
[java] view plain copy
  1. 推荐:<if test="dbName == 'oracle'">'%'||#{name}||'%'</if>   
[java] view plain copy
  1. 不推荐:<if test="dbName == 'oracle'">and name like '%${merId}%'</if>这种写法会导致SQL注入问题  

另外网上很多的那种XSSfilter,我自己测试只有URL的那种get请求有效,spring mvc参数直接绑定到对象的方式是不会走这个filter,也就无法防止XSS的。不知道其他人是不是也这样。
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 睿芽密码忘了怎么办 做绿豆糕太稀了怎么办 自热火锅吃完后怎么办 自煮火锅吃完了怎么办 自热火锅没熟怎么办 厕所被米饭堵了怎么办 减完肥肉特别松怎么办 新开的熟食店没人光顾怎么办 吃剩的软炸里脊怎么办 小火锅加热时胀盒该怎么办 天丝面料容易皱怎么办 快递员拒不送件怎么办 鞋店里面买到假鞋子了怎么办 孕吐伤了胃疼怎么办 孕期吐的胃疼怎么办 买的巧克力化了怎么办 跑步后脸上出盐怎么办 头发被剪的很短怎么办 孩子做事情拖拉不专注怎么办 新热水壶有味道怎么办 新买电热壶有味怎么办 两个月狗耳朵臭怎么办 狗狗牙齿变黄怎么办 人用了狗沐浴露怎么办 狗狗吞食牙膏吐怎么办? 狗狗吞食了牙膏怎么办 大猪拉稀不吃食怎么办 猪不发烧不吃食怎么办 天天吃自热米饭怎么办 喝了加热包水怎么办啊 蛋挞没有盒子装怎么办 塑料饭盒盖子被吸住了怎么办 火腿淹的有臭味怎么办 微波炉热饭盖子打不开怎么办 夏天带饭容易馊怎么办? 保温饭盒里有气打不开怎么办 保温饭盒摔了一下打不开怎么办 饭盒跟盖子盖一起打不开怎么办 玻璃杯子盖被水吸住打不开怎么办 电饭煲热剩饭没加水怎么办 微波炉碗盖子吸住了怎么办