防止SQL注入
SQL注入是比較常見的網絡攻擊方式之一,不是BUG是編程邏輯上容易疏忽導致的潛在危險。也是比較常見的老問題了。
作為攻擊方,SQL注入的總體思路是這樣
????????1.尋找位置,比如哪個能輸入內容的地方。
????????2.判斷服務器類型和后臺數據庫類型。
????????3.針對不同的服務器和數據庫特點進行SQL注入攻擊。
攻擊例子
在登錄界面里,要求輸入用戶名和密碼:
可以這樣輸入實現免賬號登錄:
用戶名:?‘or?1?=?1?--
密碼:
這個是最基本簡單的攻擊例子,點擊登錄,如果沒有做特殊處理那么這個非法用戶就可以登錄進去。(當然現在的有些語言的數據庫API已經處理了這些問題)
原理是這樣,正常的流程可能是:
"select?*?from?user_table?where?username='?"+userName+"?'?and?password='?"+password+"?'";
然后輸入上面后執行SQL語句的時候變成這樣:
SELECT?*?FROM?user_table?WHERE?username='’or?1?=?1?--?and?password=''
條件后面username=”or?1=1?用戶名等于?”?或1=1?那么這個條件一定會成功;然后后面加兩個-,這意味著注釋,它將后面的語句注釋,讓他們不起作用,這樣語句永遠都能正確執行,用戶輕易騙過系統,獲取合法身份。
然后再來一個更暴力的破壞方式:
SELECT?*?FROM?user_table?WHERE?username=''?;DROP?DATABASE?(DB?Name)?--'?and?password=''
下面是重點,怎樣應對常見的SQL注入攻擊(針對JSP說)
1.PreparedStatement(簡單有效)
用預編譯語句集,它內置了處理SQL注入的能力,具體原理可以看這個:
https://blog.csdn.net/qq_25302531/article/details/80250505
好處
2.正則表達式、字符串過濾、非法字符、SP頁面判斷代碼
? ? 這些都是類似的方式,檢測,排除一些字符串特征。然后直接要求用戶重新輸入合規的字符串進行存儲和下一步。需要有耐心和細心盡可能把條件都寫全,考慮完整。
?
?
?
?
?
?
總結
- 上一篇: 2.逆向分析Hello World!程序
- 下一篇: 机器视觉-EasyDL商品检测-标准版-