我是新來的PDO類,自從我剛纔使用MYSQLI,我有點困惑。這個問題相當簡單,但我無法在手冊中的任何地方直接找到答案。所以調用$pdo->query(some query)
將自動轉義查詢,並且不會留下任何空間用於任何類型的潛在注入。這是真的?Php PDO查詢安全
1
A
回答
4
不,這是不正確的。
爲了避免mysql injections
任何風險,你需要或者prepared statments
或正確地逃脫你的變量(將涉及您手動逃避每個變量前提交)。我建議使用預先準備的語句,因爲它們更容易使用。請閱讀這篇文章How can I prevent SQL injection in PHP?。您可以讓那些mysqli
OR PDO
,PDO的一個很好的例子準備statments,從計算器
$id = 1;
$stm = $pdo->prepare("SELECT name FROM table WHERE id=?");
$stm->execute(array($id));
$name = $stm->fetchColumn();
令牌,您可以瞭解more here約PDO預處理語句。我也希望你在這裏How can prepared statements protect from SQL injection attacks?
-1
不,PDO::query
與mysql_query
或任何其他原始查詢方法一樣脆弱。
如果你
$sql = "SELECT foo FROM bar WHERE baz = '$var'";
和$var
是
Robert'; DROP TABLE users; --
所以結果是
SELECT foo FROM bar WHERE baz = 'Robert'; DROP TABLE users; --'
然後沒有 API可以幫助你,因爲沒有API可以告訴區別什麼qu部分以及用戶值是什麼。這種差異只有在API使用準備好的語句或轉義爲正確的值中的特殊字符時纔會清楚。
閱讀The Great Escapism (Or: What You Need To Know To Work With Text Within Text)。
0
一臉查詢功能是不是安全。
您最好使用準備的PDO對象。
例如
$sth = $dbh->prepare("select * from mytable where myattr = :attr");
$ sth處理程序可用於設置查詢中的佔位符(例如,:ATTR在這個例子中)
你有兩個選擇:
或者直接在該處理程序的執行函數使用數組:
$sth->execute (array ('attr', $myattr));
或bindParam處理程序的功能,然後執行
$sth->bindParam ('attr', $myattr);
$sth->execute();
的方法提供你的論點逃逸單引號的一個好辦法。
注:還採取掠奪在Why you Should be using PHP’s PDO for Database Access (net.tutsplus.com)
相關問題
- 1. PDO更新查詢安全嗎?
- 2. 安全的PHP查詢?
- 3. Mysql安全查詢php
- 4. 是PDO安全嗎?
- 5. PDO和安全
- 6. PDO安全問題
- 7. 安全查詢
- 8. 使用PDO選擇查詢的安全性?
- 9. PHP PDO準備查詢
- 10. PHP pdo插入查詢
- 11. PHP PDO查詢問題
- 12. PHP PDO最終查詢
- 13. 安全表數據錄入PHP/PDO/MySQL
- 14. PHP查詢生成器安全更新
- 15. PDO密碼安全
- 16. PDO ::準備安全
- 17. 如何使PDO選擇查詢HTML安全嗎?
- 18. 級聯動態PDO查詢安全注入無bindparam
- 19. 我的PDO查詢安全嗎SQL注入
- 20. PDO查詢另一個PDO查詢
- 21. 安全疑惑:Mysqli vs PDO
- 22. 如何使用PDO完全實現SQL注入安全的查詢?
- 23. 查詢()函數PDO
- 24. 通過PDO查詢
- 25. 查詢此查詢是否安全?
- 26. PDO查詢類
- 27. PDO查詢:SQLSTATE [42000]
- 28. PDO準備語句安全
- 29. PeopleSoft XML Publisher - 查詢安全
- 30. Zend安全的SQL查詢?
號這就是爲什麼你不能在手動 –
好找吧,我怎麼逃脫查詢呢?如果我運行prepare()然後查詢()它會引發錯誤。 –
http://stackoverflow.com/tags/pdo/info –