sql >> データベース >  >> RDS >> Mysql

PDOとは何ですか、SQLインジェクションとどのように関連していますか、なぜこれを使用する必要がありますか?

    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));
    

    参考資料



    1. SQLカーソルの操作

    2. MySQLでEntityFrameworkウィザードがクラッシュする

    3. テーブルが存在した後に新しいID(自動インクリメント)を追加する際の問題

    4. Oracleでユーザーを作成して権限を割り当てる方法