以前好像做的項目都沒有太注重這一塊,對於用戶輸入的一些信息也沒去檢查,現在想想還是很容易出問題的,還是寫下來記錄一下。
百度詞條:所謂SQL注入,就是通過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執行惡意的SQL命令,比如先前的很多影視網站泄露VIP會員密碼大多就是通過WEB表單遞交查詢字符暴出的,這類表單特別容易受到SQL注入式攻擊。
瀏覽了大部分帖子,關於預防的方法主要分爲兩類:
一.採用JDBC的PreparedStatement預編譯方式。
這種方式是需要設置參數類型和參數的,如果說類型不一樣是沒辦法執行通過的,或者有惡意sql如“;drop table users”這樣的參數,是會被當成參數的,而不是執行語句去執行,所以這種方式是可以完全避免的。
PreparedStatement不止能預防sql注入,而且效率也會比較高,也能支持編程式事務的回滾,但就我個人而言的話,感覺PreparedStatement代碼比較多,一般在重要的操作中會用它,其它時候還是會用spring的JDBC操作直接操作。
二.採用java的filter功能:
在服務器接收參數時就把用戶提交的參數給過濾掉,如:param.replaceAll(".*([';]+|(--)+).*", " ");將特殊字符全部換掉置爲空串。
這個處理也可以是對sql語句的操作,如:sql.replaceAll(".*([';]+|(--)+).*", " ");