sql注入會(huì)發(fā)生什么?
sql注入后肤京,api會(huì)返回?cái)?shù)據(jù)庫(kù)中所有的數(shù)據(jù)颊艳,相當(dāng)于拖庫(kù)一樣的效果。
sql注入如何發(fā)生忘分?
比如你后臺(tái)想模糊查詢name 有a的user數(shù)據(jù)棋枕。你可能會(huì)這樣寫。
select * from user where name like '%${search}%
當(dāng)然妒峦,如果用戶友好重斑,直接傳值 search=a,那肯定完事大吉,執(zhí)行的sql如下:
select * from user where name like '%a%
萬(wàn)一肯骇,用戶很調(diào)皮窥浪,傳的是這樣的search = ' or 1=1 or 1 = ',執(zhí)行的sql就變成下面:
select * from user where name like '%' or 1=1 or 1 = '%'
可以把兩條sql在數(shù)據(jù)庫(kù)執(zhí)行下就能發(fā)現(xiàn)問(wèn)題了笛丙。
解決辦法漾脂?
所以為了防止sql注入,建議使用#{}獲取變量胚鸯。
類似上面的語(yǔ)句可以改成這樣子:
select * from user where name like concat('%',#{search},'%')