SQL 注入
引起原因:
其實(shí)現(xiàn)在很多網(wǎng)站中都存在這種問題。就是程序中直接進(jìn)行SQL語句拼接。可能有些讀者不太明白。下面通過一個(gè)登錄時(shí)對(duì)用戶驗(yàn)證來說明:
code:
驗(yàn)證時(shí)的sql語句: select * from where user='"+txtUsername.Text+"' and pwd='"+txtPwd.Text+"'
這是一段從數(shù)據(jù)庫(kù)中查詢用戶,對(duì)用戶名,密碼驗(yàn)證。
看上去好象沒有什么問題,但是實(shí)際這里面淺藏著問題,用戶名:admin 密碼: admin,
select * from where user='admin' and pwd='admin'
如果用戶和密碼正確就可通驗(yàn)證。如果我用戶名:asdf' or 1=1 -- 密碼:隨意輸入.
我們?cè)賮砜凑Z句:
select * from where user=‘a(chǎn)sdf' or 1=1 -- and pwd=''
執(zhí)行后看到什么 是不是所有記錄,如果程序只是簡(jiǎn)單判斷返回的條數(shù),這種方法就可以通驗(yàn)證。
如果執(zhí)行語句是SA用戶,再通過xp_cmdshell添加系統(tǒng)管理員,那么這個(gè)服務(wù)器就被拿下了。
解決方法:
(1):這個(gè)問題主要是由于傳入特殊字符引起的我們可以在對(duì)輸入的用戶名密碼進(jìn)入過濾特殊字符處理。
(2):使用存儲(chǔ)過程通過傳入?yún)?shù)的方法可解決此類問題(注意:在存儲(chǔ)過程中不可使用拼接實(shí)現(xiàn),不然和沒用存儲(chǔ)過和是一樣的)。
創(chuàng)新互聯(lián)于2013年成立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站制作、網(wǎng)站建設(shè)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元蕪湖做網(wǎng)站,已為上家服務(wù),為蕪湖各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18982081108