2011-08-15 7 views
3

私は一部のレガシーPHPコードをリファクタリングしているよ、と私はPDOが準備された文と、そのようなを加えて、より安全であることを知っているが、mysql_query()方法対PDO::query()方法を使用して、任意のセキュリティ上の利点があるかどうか、私は疑問に思って。ある? PDOまたはmysql_のバグのPDO :: queryとmysql_queryを使用することによるセキュリティ上の利点はありますか?

+1

完全に安全で正確なクエリを手動で作成できます。 PDOは、初心者が簡単にできるようにします。しかし、両方とも、挿入脆弱性に関係なく、あなたのdbを完全に駄目にすることがあります。動的に 'delete from $ table'を生成し、' where'節を忘れると、世界中のライブラリがあなたを救うことはできません。 –

答えて

6

ショート*、データベースクエリとセキュリティ問題は、データベースに接続するために使用されているもの、クエリであることRANに依存しません。

userdataで安全でないクエリを作成し、PDO::query()で実行すると、mysql_query()と同じように安全ではありません。同様に、安全なクエリがある場合は、PDO::query()で実行すると、mysql_query()と実質的に同じです。

1

ありませんが、PDOの代わりにたstatmentsを用意し、あなたがPDOを使用した場合:クエリ()、それはあなたのための変数をエスケープしますと、あなたはその後、インジェクション攻撃に対してかなり不浸透性になります。

PDOも

prepared statements 
transactions 
ability to switch drivers 
can get result rows as objects 
etc 
+0

Mysqliにはpsとトランザクションもあります。 – codez

+0

@codez、はい、彼はmsqliを使用していません。 – dqhendricks

0

あなたはPDOは、ユーザー入力から文をprepeared内の文字列をCONCATすることができます... MySQL関数を介して他の利点を持っているので、それはどのような方法で、より安全ではありません。 プリペアドステートメントにもいくつかの欠点があります。たとえば、あなたが、たとえば、Uは、データの可変量を使用する単純なクエリを作成することはできません:あなたは唯一のMySQLを使用することがわかっている場合は

WHERE id IN (1,2,5,7,9,23) 

、私はあなたがmysqliのではなく、PDOで行くことをお勧めします。不要な抽象化層は必要ありません。

関連する問題