關於怎麼預防sql注入的方法

以前好像做的項目都沒有太注重這一塊,對於用戶輸入的一些信息也沒去檢查,現在想想還是很容易出問題的,還是寫下來記錄一下。


百度詞條:所謂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(".*([';]+|(--)+).*", " ");

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章