pdo - mysql 簡單注入疑問
問題描述
mysql數據庫表user結構如圖,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是空
請問大神我構造的mysql注入語句是不是有錯...我主要目的是想測試不同的mysql注入語句,pdo_mysql的防護性
問題解答
回答1:$uid='1’; select * FROM user;';這種聲明其實和你的測試沒關系,反而造成困擾,你可以直接測試mysql_query('select * from user where uid=1; select * from user')。我沒深入研究過這個東西,但是你的兩種測試是等價的,都會被注入。
最簡單的注入問題例子是 $username = 'It’s test',然后被執行的時候變成 'select * from user where username=’It’s test',引發語法錯誤。而PDO等通過預處理防止此類問題,如 $pdo->query('select * from user where username=?', array('It’s test'));此時會適當轉意起到防注入作用,但是像你的例子中直接$pdo->query($sql)這種用法,防護機制此時根本不會產生任何效果的。
大意如此,自己理解吧。
最近工作很忙,大部分邀請都只好忽略了,偶爾回答幾個也沒時間說太多,只能說抱歉了。
回答2:mysql_query時,拼接的SQL語句是,是不合法的
select * from user where uid=’1’; select * FROM user;’
想辦法把單獨的’閉合,改成下面的代碼就可以了:
$uid='1’; select * FROM user where uid=’';
PDO會自動轉義,查詢的以下語句,所以為空。
select * from user where uid=’1’; select * FROM user;’回答3:
自己發現問題了:
直接使用$uid= '888’ or ’2=2';
整個user表的內容都爆出來了
相關文章:
1. android - weex 項目createInstanceReferenceError: Vue is not defined2. android - 哪位大神知道java后臺的api接口的對象傳到前端后輸入日期報錯,是什么情況?求大神指點3. pdo 寫入到數據庫的內容為中文的時候寫入亂碼4. PHPExcel表格導入數據庫怎么導入5. javascript - 如圖,百度首頁,查看源代碼為什么什么都沒有?6. vue2.0+webpack 如何使用bootstrap?7. PHP類封裝的插入數據,總是插入不成功,返回false;8. mac連接阿里云docker集群,已經卡了2天了,求問?9. 只允許微信登錄設置在哪里實現?CI框架10. java - 微信開發網頁授權
