SQL注入點(diǎn)攔截了單引號(hào),是不是就無解了?
網(wǎng)友解答: 并不是,太天真了。sql注入的方法有多種,不一定非得用單引號(hào)。SQL注入一般用于表單提交,尤其是登錄表單,通過提交一些sql語句的組合,使后臺(tái)驗(yàn)證邏輯出錯(cuò),順利進(jìn)入后臺(tái)。方法
并不是,太天真了。sql注入的方法有多種,不一定非得用單引號(hào)。SQL注入一般用于表單提交,尤其是登錄表單,通過提交一些sql語句的組合,使后臺(tái)驗(yàn)證邏輯出錯(cuò),順利進(jìn)入后臺(tái)。
方法一:
先猜表名
And (Select count(*) from 表名)<0
猜列名
And (Select count(列名) from 表名)<0
返回正確的,那么寫的表名或列名就是正確,如果服務(wù)器沒有關(guān)系錯(cuò)誤提醒,就會(huì)將錯(cuò)誤的sql語句信息打印出來,從而就獲取到真正的表名、列名。
方法二:
跳過登錄后臺(tái)
常見的 ' 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語句直接查詢的漏洞,或者報(bào)錯(cuò)信息。
只攔截了單引號(hào)還不夠,還有空格,等號(hào)等等一些符號(hào)。而且項(xiàng)目中千萬避免前端提交的表單直接用原生sql語句查詢,盡量用框架封裝的方法,這樣能很大程度上減少被sql注入的風(fēng)險(xiǎn)。畢竟前端提交的數(shù)據(jù)都是不可信的。