2 回答

TA貢獻(xiàn)1785條經(jīng)驗(yàn) 獲得超4個(gè)贊
mysql_query時(shí),拼接的SQL語(yǔ)句是,是不合法的
select * from user where uid='1'; select * FROM user;'
想辦法把單獨(dú)的'閉合,改成下面的代碼就可以了:
$uid="1'; select * FROM user where uid='";
PDO會(huì)自動(dòng)轉(zhuǎn)義,查詢的以下語(yǔ)句,所以為空。
select * from user where uid='1\'; select * FROM user;'

TA貢獻(xiàn)1951條經(jīng)驗(yàn) 獲得超3個(gè)贊
$uid="1'; select * FROM user;";
這種聲明其實(shí)和你的測(cè)試沒(méi)關(guān)系,反而造成困擾,你可以直接測(cè)試mysql_query("select * from user where uid=1; select * from user")
。我沒(méi)深入研究過(guò)這個(gè)東西,但是你的兩種測(cè)試是等價(jià)的,都會(huì)被注入。
最簡(jiǎn)單的注入問(wèn)題例子是 $username = "It's test"
,然后被執(zhí)行的時(shí)候變成 "select * from user where username='It's test"
,引發(fā)語(yǔ)法錯(cuò)誤。而PDO等通過(guò)預(yù)處理防止此類問(wèn)題,如 $pdo->query("select * from user where username=?", array("It's test"));
此時(shí)會(huì)適當(dāng)轉(zhuǎn)意起到防注入作用,但是像你的例子中直接$pdo->query($sql)
這種用法,防護(hù)機(jī)制此時(shí)根本不會(huì)產(chǎn)生任何效果的。
大意如此,自己理解吧。
最近工作很忙,大部分邀請(qǐng)都只好忽略了,偶爾回答幾個(gè)也沒(méi)時(shí)間說(shuō)太多,只能說(shuō)抱歉了。
添加回答
舉報(bào)