原文鏈接地址:SpringMVC設置XSS攻擊
XSS攻擊防御主要是針對用戶輸入項的HTML標簽進行處理。例如:【>】修改成【>】; 【<】修改成【&】等
SpringMVC中處理的主要邏輯是,在Spring綁定入參的時候,針對參數進行處理。通過Spring提供的@InitBinder進行處理。
這個方法可以寫在一個公共的BaseController中,其他Controller需要繼承BaseController。
代碼示例如下:
1 @Controller 2 3 public class BaseController { 4 5 @InitBinder 6 7 public void initBinder(ServletRequestDataBinder binder) { 8 9 /** 10 11 * 自動轉換日期類型的字段格式 12 13 */ 14 15 binder.registerCustomEditor(Date.class, new CustomDateEditor( 16 17 new SimpleDateFormat("yyyy-MM-dd"), true)); 18 19 /** 20 21 * 防止XSS攻擊 22 23 */ 24 25 binder.registerCustomEditor(String.class, new StringEscapeEditor(true, false)); 26 27 } 28 29 }
在StringEscapeEditor中,針對String類型的參數,進行特殊符號的替換
1 public class StringEscapeEditor extends PropertyEditorSupport { 2 3 4 5 private boolean escapeHTML;// 編碼HTML 6 7 8 9 private boolean escapeJavaScript;// 編碼javascript 10 11 12 13 public StringEscapeEditor() { 14 15 super(); 16 17 } 18 19 20 21 public StringEscapeEditor(boolean escapeHTML, boolean escapeJavaScript) { 22 23 super(); 24 25 this.escapeHTML = escapeHTML; 26 27 this.escapeJavaScript = escapeJavaScript; 28 29 } 30 31 32 33 @Override 34 35 public String getAsText() { 36 37 38 39 Object value = getValue(); 40 41 return value != null ? value.toString() : ""; 42 43 } 44 45 46 47 @Override 48 49 public void setAsText(String text) throws IllegalArgumentException { 50 51 52 53 if (text == null) { 54 55 setValue(null); 56 57 } else { 58 59 String value = text; 60 61 if (escapeHTML) { 62 63 value = HtmlUtils.htmlEscape(value); 64 65 } 66 67 if (escapeJavaScript) { 68 69 value = JavaScriptUtils.javaScriptEscape(value); 70 71 } 72 73 setValue(value); 74 75 } 76 77 } 78 79 80 81 }
