Spring 中处理XSS

xiaoxiao2021-02-27  149

有2种方式

一:在BaseController中定义方法

[java]  view plain  copy /**   * 初始化数据绑定   * 1. 将所有传递进来的String进行HTML编码,防止XSS攻击   *    */   @InitBinder   protected void initBinder(WebDataBinder binder) {       // String类型转换,将所有传递进来的String进行HTML编码,防止XSS攻击       binder.registerCustomEditor(String.classnew PropertyEditorSupport() {           @Override           public void setAsText(String text) {               setValue(text == null ? null : StringEscapeUtils.escapeHtml4(text.trim()));           }           @Override           public String getAsText() {               Object value = getValue();               return value != null ? value.toString() : "";           }       });   }  

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

二种:定义自己的编辑器

[java]  view plain  copy public class StringEscapeEditor extends PropertyEditorSupport {          public StringEscapeEditor() {           super();       }          public void setAsText(String text) {           if (text == null) {               setValue(null);           } else {               String value = text;               value = StringEscapeUtils.escapeHtml4(value);   //          value = StringEscapeUtils.escapeJavaScript(value);   //          value = StringEscapeUtils.escapeSql(value);               setValue(value);           }       }          public String getAsText() {           Object value = getValue();           return value != null ? value.toString() : "";       }          public static void main(String[] args) {           String xx="'><script>alert(document.cookie)</script>";           System.out.println(StringEscapeUtils.escapeHtml4(xx));       }   }   [java]  view plain  copy public class MyBindingInitializer implements WebBindingInitializer {       @Override       public void initBinder(WebDataBinder binder, WebRequest request) {           // 注册自定义的属性编辑器。这里可以注册多个属性编辑器           binder.registerCustomEditor(String.classnew StringEscapeEditor());          }   }  

配置文件里注册下

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

其他注意事项:

[java]  view plain  copy 在Oracle中,如果SQL中有like查询,若输入条件为:'><script>alert(document.cookie)</script>   [java]  view plain  copy sql的写法:   [java]  view plain  copy 推荐:<if test="dbName == 'oracle'">'%'||#{name}||'%'</if>    [java]  view plain  copy 不推荐:<if test="dbName == 'oracle'">and name like '%${merId}%'</if>这种写法会导致SQL注入问题   另外网上很多的那种XSSfilter,我自己测试只有URL的那种get请求有效,spring mvc参数直接绑定到对象的方式是不会走这个filter,也就无法防止XSS的。不知道其他人是不是也这样。
转载请注明原文地址: https://www.6miu.com/read-17275.html

最新回复(0)