ここSOにはSQLインジェクションに関する多くの警告がありますが、私が見つけた誰も実際に答えていません.どうしてそれが起こるのですか? この質問では、MySQL と PHP を想定しています。
基本的なmysql_は、クエリ内で 2 番目のクエリを受け入れませんよね?
つまり、基本的にこれは
$unsafe = "');DROP TABLE table;--";
mysqli_query($con,"INSERT INTO table (Column) VALUES ('$unsafe'");
実際に有害なことは何もしませんか?これについて私を修正してください。
私はmysqli_を使った経験がないので、PDO と「準備済みステートメント」にスキップします。
PDOを使い始めた頃は情報不足で、基本的には安全だなと思って使っていました。
$stm = $pdo->prepare("INSERT INTO table (Column) VALUES ('$unsafe');
$stm->execute();
ただし、 PDO とmysql_の場合は同じです。すぐに使用できる複数のクエリはサポートされていませんよね? 繰り返しますが、これについて私を修正してください。
では、私が間違っていなければ、これは安全であると見なされますか?
$stm = $pdo->prepare("INSERT INTO table (Column) VALUES (?);
$stm->execute(array($unsafe);
複数のクエリがサポートされていない場合、データベースにアクセスできない悪意のあるユーザーは、どのようにして悪意のあるデータを挿入するのでしょうか?
それとも彼らですか?