PDO-PHPデータオブジェクト は、複数のデータベースにアクセスするための統一された方法を提供するデータベースアクセス層です。
データベース固有の構文は考慮されていませんが、多くの場合、接続文字列を切り替えるだけで、データベースとプラットフォームを切り替えるプロセスをかなり簡単にすることができます。
プリペアドステートメント/パラメーター化されたクエリは、そのステートメントへの1次インジェクションを防ぐのに十分です。チェックされていない動的SQLをアプリケーションの他の場所で使用する場合でも、2次インジェクションに対して脆弱です。
2次インジェクションとは、データがクエリに含まれる前にデータベースを1回循環していることを意味し、データを取得するのがはるかに困難です。 AFAIK、実際の2次攻撃はほとんど見られません。通常、ソーシャルエンジニアリングを行う方が簡単だからです。
PDOはmysql
よりも少し遅いです _*。しかし、それは素晴らしい携帯性を持っています。 PDOは、複数のデータベースにまたがる単一のインターフェースを提供します。つまり、mysqlの場合はmysql_query、SQL Serverの場合はmssql_queryなどを使用せずに、複数のDBを使用できます。$db->query("INSERT INTO...")
のようなものを使用するだけです。 いつも。使用しているデータベースドライバに関係なく。
したがって、大規模またはポータブルなプロジェクトでは、PDOが推奨されます。 ZendFramework でさえ PDOを使用します。
SQLインジェクション
SQLインジェクション
SQLインジェクションは、悪意のあるユーザーがWebページの入力を介してSQLコマンドをSQLステートメントに挿入できる手法です。
挿入されたSQLコマンドは、SQLステートメントを変更し、Webアプリケーションのセキュリティを危険にさらす可能性があります。
PDOのプリペアドステートメントはSQLインジェクションを防ぐのに十分ですか?
簡単な答えはいいえです PDOの準備では、考えられるすべてのSQLインジェクション攻撃からユーザーを守ることはできません。 攻撃
PDOの使用方法は?
例:
$stmt = $dbh->prepare("SELECT * FROM tables WHERE names = :name");
$stmt->execute(array(':name' => $name));
参考資料
- http:/ /code.tutsplus.com/tutorials/pdo-vs-mysqli-which-should-you-use--net-24059
- http://code.tutsplus.com/tutorials/why-you-should-be-using-phps-pdo-for-database-access--net-12059
- PDOで準備されたステートメントSQLインジェクションを防ぐのに十分ですか?
- http://php.net/manual/en/book.pdo。 php