Spring MVC 如何防止XSS、SQL注入攻擊

在Web項目中,一般須要處理XSS,SQL注入攻擊,解決這個問題有兩個思路:

  在數據進入數據庫以前對非法字符進行轉義,在更新和顯示的時候將非法字符還原

  在顯示的時候對非法字符進行轉義

  若是項目還處在起步階段,建議使用第二種,直接使用jstl的標籤便可解決非法字符的問題。固然,對於Javascript還須要本身處理一下,寫一個方法,在解析從服務器端獲取的數據時執行如下escapeHTML()便可。

  附:Javascript方法:

  String.prototype.escapeHTML = function () {

  return this.replace(/&/g, ‘&’).replace(/>/g, ‘>’).replace(/

  }

  若是項目已經開發完成了,又不想大批量改動頁面的話,能夠採用第一種方法,此時須要藉助Spring MVC的@InitBinder以及org.apache.commons.lang.PropertyEditorSupport、org.apache.commons.lang.StringEscapeUtils

  public class StringEscapeEditor extends PropertyEditorSupport {

  private boolean escapeHTML;

  private boolean escapeJavaScript;

  private boolean escapeSQL;

  public StringEscapeEditor() { super(); }

  public StringEscapeEditor(boolean escapeHTML, boolean escapeJavaScript, boolean escapeSQL) {

  super();

  this.escapeHTML = escapeHTML;

  this.escapeJavaScript = escapeJavaScript;

  this.escapeSQL = escapeSQL;

  }

  @Override

  public void setAsText(String text) {

  if (text == null) {

  setValue(null);

  } else {

  String value = text;

  if (escapeHTML) { value = StringEscapeUtils.escapeHtml(value); }

  if (escapeJavaScript) { value = StringEscapeUtils.escapeJavaScript(value); }

  if (escapeSQL) { value = StringEscapeUtils.escapeSql(value); } setValue(value); }

  }

  @Override

  public String getAsText() { Object value = getValue(); return value != null ? value.toString() : 「」; }

  }

  在使用StringEscapeUtils時須要注意escapeHtml和escapeJavascript方法會把中文字符轉換成Unicode編碼,若是經過標籤或者EL表達式展現時,可以正確還原,可是若是使用相似於Ext這樣的前端組件來展現這部份內容時,不能正常還原,這也是我爲何放棄了第一種方法,直接使用第二種方法的緣由。

  在上面咱們作了一個EscapeEditor,下面還要將這個Editor和Spring的Controller綁定,使服務器端接收到數據以後可以自動轉移特殊字符。

  下面咱們在@Controller中註冊@InitBinder

  @InitBinder

  public void initBinder(WebDataBinder binder) {

  binder.registerCustomEditor(String.class, new StringEscapeEditor(false, false, false));

  }

  這個方法能夠直接放到abstract Controller類中,這樣子每一個Controller實例都可以擁有該方法。至此第二種方法完成,可是在還原的方法暫時尚未。O(∩_∩)O…原文博主:http://blog.sina.com.cn/s/blog_7a9c22c701018cy8.html
相關文章
相關標籤/搜索