閱讀202 返回首頁    go 阿裏雲 go 技術社區[雲棲]


學生信息管理係統--SQL注入

   當你在登陸學生管理係統的時候,添加的用戶名若和你數據庫中的數據不符時,就會彈出一個窗體,告訴你沒有這個用戶;但是當你在用戶名中輸入數字或者字母外加英文狀態下的單引號,比如:“a'”,“'or 1=1#”

 

然後你再運行的話,就會彈出下麵的窗體

這就是SQL注入,百度上給出的定義是:通過把SQL命令插入到Web表單遞交或輸入域名或頁麵請求的查詢字符串,最終達到欺騙服務器執行惡意的SQL命令。

 

在我們做學生管理係統的時候,在登入窗體中有這麼一段語句

 

 

兩個單引號括起來的部分是判斷輸入的用戶名是否和數據庫中一致,但你輸入“a'”時,就會在兩個單引號之間添加了一個單引號,結果可想而知,數據庫無法連接,所以就無法登陸。

 

解決方法:

1、將txtUserName.text的文本框替換成ComboBox的下拉式的控件,直接從數據庫中提取用戶名,缺點就是這樣造成用戶名泄露!

2、加強對用戶輸入的驗證。一些關鍵字直接給他過濾掉,比如drop 、datebase、delete,and,--,“’”  等一些關鍵字,寫個方法直接過濾掉~!把單引號替換成兩個單引號!數值型要強製轉換!!!

3、在編寫SQL語句時,使用參數化的語句來傳遞用戶輸入的變量,也就是說,用戶的輸入絕對不能夠直接被嵌入到SQL語句中。

4、限製表單或查詢字符串輸入的長度。

5、將用戶登入名稱、密碼等數據加密保存。加密用戶輸入的數據,然後再將它與數據庫中保存的數據比較,這就相當於對用戶輸入的數據進行了“消毒”處理。

 

最後更新:2017-04-03 16:48:59

  上一篇:go VS2010與Qt5.1.0集成(非源碼方式)
  下一篇:go 架構師在敏捷中是豬還是雞