最近フレームワークを使用するときに、まだ少し不安があります。フレームワークの設計者は、トップレベルで必要なフィルタリングを行う必要があるのかどうか疑問に思っています。それを読んだ後、非常に有益でした。その後、フレームワークの DB ライブラリの内部メソッドを見て、さらに安心しました。 SQL インジェクションに対処するための国内外の PHP プログラマー向けのソリューションを共有します。
海外では一般的に、クエリを使用する限り、次の 2 つのことを行うべきであると推奨されています: 1. prepared states (準備された文) 2. parameterized queries (parameterized query request) 。
最初はこれが何を意味するのか分かりませんでしたが、例を見て理解しました。 SQL をより安全にするには、最初にクエリ変数を準備する必要があります。例:
$name = $_POST['name'];$sql = 'select * from user where name'.$name;
次に、最初に $name を処理するのが最善です。
$name = mysql_real_escape_string($_POST['name']);
次に、要求された変数を SQL 言語自体の代わりにパラメーターにします。
りーもちろん、この書き方はまだ雑です。
したがって、一般的には、PDO または MYSQLI の prepare() excute() メソッドを使用することをお勧めします。
$sql = 'select * from user where name=\''.$name.'\'';
PDO::prepare() について
この利点は、クエリ リクエストに SQL ステートメントを挿入することを心配する必要がなくなったことです。これらのステートメントはリクエスト変数 (文字列または数値) として扱われるためです。 、SQL 言語自体と間違われることはなくなります。これにより、SQL インジェクションの可能性が大幅に減少します。