1. 程式人生 > >JAVA經典面試題(一)-- 判斷以及防止SQL注入

JAVA經典面試題(一)-- 判斷以及防止SQL注入

SQL注入是目前黑客最常用的攻擊手段,它的原理是利用資料庫對特殊識別符號的解析強行從頁面向後臺傳入。改變SQL語句結構,達到擴充套件許可權、建立高等級使用者、強行修改使用者資料等等操作。
那怎麼判斷是否被SQL注入了呢?
通過SQL注入的原理我們知道,判斷SQL注入可以通過頁面傳入的資料,後臺不應該相信從後臺傳入的任何資料特別是特殊整型引數和特殊字元引數!
防止SQL注入其實也很簡單
1.檢查變數資料型別和格式
只要是固定格式的變數,在SQL語句執行前,應該嚴格按照固定格式檢查,確保變數是我們預想的格式!
2.過濾特殊符號
對於無法確定固定格式的變數,一定要進行特殊符號過來或轉移處理,一面之星SQL時有歧義。
當我們上傳圖片的時候

enctype=\”multipart/form-data\”
enctype=”multipart/form-data

沒有“/“,表單中enctype=”multipart/form-data”的意思,是設定表單的MIME編碼。預設情況,這個編碼格式是application/x-www-form-urlencoded,不能用於檔案上傳;只有使用了multipart/form- data,才能完整的傳遞檔案資料,進行下面的操作.
3.繫結變數,使用預編譯語句
實際上,繫結變數使用預編譯語句是預防SQL注入的最佳方法,使用預編譯的SQL語句語義不會發生改變。在SQL語句中,變數用問號?表示,黑客即使本事再大,也無法改變SQL語句的格式,從根本上杜絕了SQL注入攻擊的發生。
4.資料庫資訊加密安全


有時候資料庫資訊洩露了,我們應該對資料庫的密碼等資訊進行加密(MD5等),這樣資訊洩露,損失也可以在控制在一定範圍內。

使用JSP的時候要注意
1.不要隨意開一生產環境彙總Webserver的錯誤顯示。
2.永遠不要相信來自使用者端的變數輸入,有固定格式的變數一定要嚴格檢查對應的格式,沒有固定格式的變數需要對引號等特殊字元進行必要的過濾轉義。
3.使用預編譯繫結變數的SQL語句
4.做好資料庫賬號許可權管理
5.嚴格加密處理使用者機密資訊

一個好的程式一定要注意安全性,否則只適合練手。