pdo - mysql 簡(jiǎn)單注入疑問(wèn)
問(wèn)題描述
mysql數(shù)據(jù)庫(kù)表user結(jié)構(gòu)如圖,php版本5.4.31
$uid='1’; select * FROM user;';
直接用:
$result=mysql_query('select * from user where uid=’$uid’ ');
mysql_error()顯示
`You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ’select * FROM user;’’ at line 1`
和用pdo查詢:
$sql='select * from user where uid=’$uid’ ';$res=$pdo->query($sql);
顯示$res是空
請(qǐng)問(wèn)大神我構(gòu)造的mysql注入語(yǔ)句是不是有錯(cuò)...我主要目的是想測(cè)試不同的mysql注入語(yǔ)句,pdo_mysql的防護(hù)性
問(wèn)題解答
回答1:$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ō)抱歉了。
回答2: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;’回答3:
自己發(fā)現(xiàn)問(wèn)題了:
直接使用$uid= '888’ or ’2=2';
整個(gè)user表的內(nèi)容都爆出來(lái)了
相關(guān)文章:
1. python - [已解決]flask QQ郵箱mail2. mysql - SQL操作時(shí)間的函數(shù)?3. html5 - 請(qǐng)問(wèn)現(xiàn)在主流的前端自動(dòng)化構(gòu)建工具是哪個(gè)?4. javascript - 小程序中遇到j(luò)s執(zhí)行時(shí)序問(wèn)題5. mysql 5個(gè)left關(guān)鍵 然后再用搜索條件 幾千條數(shù)據(jù)就會(huì)卡,如何解決呢6. 按照本節(jié)給的代碼“膽小如鼠”并不能變成紅色7. html - eclipse 標(biāo)簽錯(cuò)誤8. javascript - 為什么在谷歌控制臺(tái) 輸出1的時(shí)候,輸出的1立馬就不見(jiàn)了9. javascript - position fixed;設(shè)置了height 100 卻不是瀏覽器可視窗口的寬高,求大神釋疑。10. python3.x - git bash如何運(yùn)行.bat文件?
