pdo - mysql 簡單注入疑問
問題描述
mysql數(shù)據(jù)庫表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是空
請問大神我構(gòu)造的mysql注入語句是不是有錯(cuò)...我主要目的是想測試不同的mysql注入語句,pdo_mysql的防護(hù)性
問題解答
回答1:$uid='1’; select * FROM user;';這種聲明其實(shí)和你的測試沒關(guān)系,反而造成困擾,你可以直接測試mysql_query('select * from user where uid=1; select * from user')。我沒深入研究過這個(gè)東西,但是你的兩種測試是等價(jià)的,都會被注入。
最簡單的注入問題例子是 $username = 'It’s test',然后被執(zhí)行的時(shí)候變成 'select * from user where username=’It’s test',引發(fā)語法錯(cuò)誤。而PDO等通過預(yù)處理防止此類問題,如 $pdo->query('select * from user where username=?', array('It’s test'));此時(shí)會適當(dāng)轉(zhuǎn)意起到防注入作用,但是像你的例子中直接$pdo->query($sql)這種用法,防護(hù)機(jī)制此時(shí)根本不會產(chǎn)生任何效果的。
大意如此,自己理解吧。
最近工作很忙,大部分邀請都只好忽略了,偶爾回答幾個(gè)也沒時(shí)間說太多,只能說抱歉了。
回答2:mysql_query時(shí),拼接的SQL語句是,是不合法的
select * from user where uid=’1’; select * FROM user;’
想辦法把單獨(dú)的’閉合,改成下面的代碼就可以了:
$uid='1’; select * FROM user where uid=’';
PDO會自動轉(zhuǎn)義,查詢的以下語句,所以為空。
select * from user where uid=’1’; select * FROM user;’回答3:
自己發(fā)現(xiàn)問題了:
直接使用$uid= '888’ or ’2=2';
整個(gè)user表的內(nèi)容都爆出來了
相關(guān)文章:
1. php多任務(wù)倒計(jì)時(shí)求助2. 數(shù)組排序,并把排序后的值存入到新數(shù)組中3. mysql - sql 左連接結(jié)果union右連接結(jié)果,導(dǎo)致重復(fù)性計(jì)算怎么解決?4. mysql怎么表示兩個(gè)字段的差5. 默認(rèn)輸出類型為json,如何輸出html6. 網(wǎng)頁爬蟲 - python 爬取網(wǎng)站 并解析非json內(nèi)容7. mysql 遠(yuǎn)程連接出錯(cuò)10060,我已經(jīng)設(shè)置了任意主機(jī)了。。。8. javascript - 滾動到指定高度 開始輪流放動畫,QQPC官網(wǎng)就是這么做的,請問使用什么開源庫方便點(diǎn)?9. PHP訂單派單系統(tǒng)10. MySQL的聯(lián)合查詢[union]有什么實(shí)際的用處
