sql注入過(guò)濾單引號(hào)繞過(guò) SQL注入點(diǎn)攔截了單引號(hào),是不是就無(wú)解了?
SQL注入點(diǎn)攔截了單引號(hào),是不是就無(wú)解了?并不是,太天真了。sql注入的方法有多種,不一定非得用單引號(hào)。SQL注入一般用于表單提交,尤其是登錄表單,通過(guò)提交一些sql語(yǔ)句的組合,使后臺(tái)驗(yàn)證邏輯出錯(cuò),順
SQL注入點(diǎn)攔截了單引號(hào),是不是就無(wú)解了?
并不是,太天真了。sql注入的方法有多種,不一定非得用單引號(hào)。SQL注入一般用于表單提交,尤其是登錄表單,通過(guò)提交一些sql語(yǔ)句的組合,使后臺(tái)驗(yàn)證邏輯出錯(cuò),順利進(jìn)入后臺(tái)。
方法一:
先猜表名
And (Select count(*) from 表名)<>0
猜列名
And (Select count(列名) from 表名)<>0
返回正確的,那么寫的表名或列名就是正確,如果服務(wù)器沒(méi)有關(guān)系錯(cuò)誤提醒,就會(huì)將錯(cuò)誤的sql語(yǔ)句信息打印出來(lái),從而就獲取到真正的表名、列名。
方法二:
跳過(guò)登錄后臺(tái)
常見(jiàn)的 " or 1="1
比如后臺(tái)驗(yàn)證就變成
select name,pass from tbAdmin where name="" or 1="1" and pass="123456"
1="1"為真,這判斷就一直成立。
當(dāng)然還有很多種sql注入方式,大都是利用sql語(yǔ)句直接查詢的漏洞,或者報(bào)錯(cuò)信息。
只攔截了單引號(hào)還不夠,還有空格,等號(hào)等等一些符號(hào)。而且項(xiàng)目中千萬(wàn)避免前端提交的表單直接用原生sql語(yǔ)句查詢,盡量用框架封裝的方法,這樣能很大程度上減少被sql注入的風(fēng)險(xiǎn)。畢竟前端提交的數(shù)據(jù)都是不可信的。
sql注入如何繞過(guò)單引號(hào)過(guò)濾?非常感謝?
可以利用參數(shù)化的查詢方式 String cmd="select a,b from t where c=@arg,然后給@arg 賦值,無(wú)論有沒(méi)有引號(hào)都會(huì)當(dāng)作變量來(lái)處理