私はこのコードを持っています:
<?php
$table = $_GET ["table"];
$query = "SELECT 1 FROM $table";
$st = $pdo->prepare($query);
$st->execute();
これは実際のコードではありませんが、アイデアを得るための例です。
私が作る場合:
hacked.php?table=users;DROP TABLE users;
正しくエスケープされていないため、機能します。
ただし、次のような情報を更新する場合:
hacked.php?table=users; UPDATE users SET name="abc" WHERE name="def";
エスケープされているため、pdoはクエリを次のように変換します。
SELECT 1 FROM users; UPDATE users SET name=\"abc\" WHERE name=\"def\";
そして明らかに失敗します。
とにかくこのクエリを機能させる方法はありますか?
編集1
私たちのチームには、私のコードをチェックしてハッキングすることだけに専念している男性が 1 人います。ですから、これが何らかの形で実現できるなら、私は準備を整えたいと思っています。
編集2
私はすでにこれを読んでいました: SQL インジェクションを防ぐのに十分な PDO 準備済みステートメントはありますか? しかし、それは本当に私の質問に答えませんでした。しかし、それは私に通過する方法を与えてくれました。そして、@duskwuff の解決策は、私がたどり着いたものと同じでした。したがって、管理者にとって、これを削除するか、重複としてマークする必要がある場合は問題ありません。しかし、これは、準備されたpdoがどのようにハッキングされるかを誰かが知るのに役立つと主張します.