PHP アプリケーションを開発しているときに、この状況について考えました。ユーザーが何らかのテキストをフォームに送信すると、サーバー側でテキストがエスケープされ、データベースに挿入されます。問題は、最後のクエリ (DB からの値を使用するクエリ) で SQL インジェクションが発生する可能性があるかどうかです。
例 (データベース クラスについて説明する必要はないと思います):
$db->query("INSERT INTO accounts SET test='".$db->escape($_POST["sometext"])."'");
OK、これまでのところ、何も起こらないことはわかっています。理論的には、準備されたステートメントでもこれを行うことができましたが、違いはありません。
後で別のスクリプトで使用するために列テストの値が必要になり、値を別の場所に挿入する必要がある場合があります。
したがって、列が選択され、後で挿入されます。
$db->query("SELECT test FROM accounts WHERE ... LIMIT 1");
$row = $db->fetchRow();
$db->query("INSERT INTO secoundtable SET test='".$row["test"]."'");
ご覧のとおり、データベースの値は最後のクエリで使用されます。ここで逃げなきゃいけないの?