2011-02-13 85 views
9

真正的PHP安全專家,是PDO的走向還是我可以跟Codeigniter的Active Record類保持一致?PDO in Codeigniter - 保護vs SQL注入

我已閱讀http://codeigniter.com/forums/viewthread/179618/,我不是100%信服。
我通常依賴Chris Shiflett和OWASP等專家的安全提示。 http://shiflett.org/blog/2006/jul/the-owasp-php-top-5

一直使用自制的PDO DB類代替Codeigniter數據庫文件。每次我上傳它是一個相對小的痛苦複製。我使用PDO的主要原因是爲了防止SQL注入vs使用Active Record。

編輯:不是一個擡價,但我對如何整合 PDO in Codeigniter事後寫了一篇文章。如果有人有反饋,我會很高興聽到。

+0

感謝您的所有好的答案。每個答案都有一個有效的點。我將繼續使用PDO來實現靈活性,安全性,參數綁定以及我對它的深入瞭解。 – csi 2011-02-14 22:26:58

+0

我閱讀你的博客文章。但是如何在這些修改後在CI中使用PDO?參見[我如何在CodeIgniter 2中使用PDO?](http://stackoverflow.com/questions/5884761/how-can-i-use-pdo-in-codeigniter-2) – Jonas 2011-05-04 14:14:32

回答

6

根據您引用的頁面,Active Record類使用mysql_函數進行字符串轉義。這意味着它仍然在PHP-land中構建SQL字符串,而不是在數據庫中使用參數化的API。儘管它現在可能免費獲得已知的缺陷,但使用遵循更安全設計的API仍然是一個更好的主意。

+0

它也限制了MySQL的使用。我會認爲CI會更靈活 – Phil 2011-02-14 04:40:03

2

如果您已經對PDO庫感到滿意,則沒有理由在CI中停止使用它。如果您想要遵循CI模式,Active Record非常棒,但它在任何意義上都不是必需的。

9

那麼,對於所有這類問題的一般回答:

這不是一個魔杖,它是一個嚮導。

(說不上哪裏我得到的說法,但似乎我是唯一一個使用它,但最有可能拼錯我的話)

沒有什麼好壞之分技術本身。
一切都取決於使用它的手。

  1. 如果使用得當,mysql中沒有任何不安全的地方。
  2. PDO不是一個神奇的庇護所,它僅僅通過它的存在來掩蓋你的所有危險。

每當我看到SQL注入的蹩腳談判,它總是關於動態數據只。
雖然大多數危險來自其他查詢部分 - 比如動態標識符。在哪裏PDO可以做得比少一點來處理它們。

因此,不能有一定的答案。
只要你明白你在做什麼,你就可以使用任何你喜歡的技術。
相反,如果你不明白它是如何工作的,但只是認爲,某些技術可以保護你的應用程序,但你已經陷入困境。

就是這樣。