SQL インジェクション攻撃がどのように実装されるか、そしてそれを防ぐ方法について話しましょう。
この例を見てください:
コードをコピーします コードは次のとおりです:
// 想定される入力
$name = "ilia'; DELETE FROM users;";
mysql_query("SELECT * FROM users WHERE name='{ $name}'");
コードをコピーします コードは次のとおりです:
//Magic Quotes機能が有効な場合
if (get_magic_quotes_gpc()) {
$name =tripslashes($name) ;
}else{
$name = mysql_real_escape_string($name);
} mysql_query("SELECT * FROM users WHERE name='{$name}'"); によって提供される関数を使用する前に注意してください。データベースを開くには、上記の例のように、Magic Quotes を開くかどうかを判断する必要があります。そうしないと、処理を 2 回繰り返すとエラーが発生します。 MQ が有効になっている場合、実際のデータを取得するには、追加されたものを削除する必要があります。
上記の文字列形式のデータの前処理に加えて、バイナリデータをデータベースに保存する場合には、前処理にも注意する必要があります。そうしないと、データがデータベース自体の保存形式と競合し、データベースがクラッシュしたり、データ レコードが失われたり、データベース全体が失われたりする可能性があります。 PostgreSQL などの一部のデータベースは、バイナリ データのエンコードに特別に使用される関数 pg_escape_bytea() を提供しており、Base64 と同様にデータをエンコードできます。代代:
// プレーンテキストデータの場合: pg_escape_string ($ regula_strings); バイナリデータの場合:
pg_escapea_data ($ BleakIn)別のケース、そのような仕組みも取り入れる必要があります。つまり、データベース システム自体がサポートしていない中国語、日本語などのマルチバイト言語です。それらの一部には、バイナリ データ範囲と重複する ASCII 範囲があります。
ただし、データをエンコードすると、LIKE abc% のようなクエリ文が無効になる場合があります。
上記では、SQL 丸め PHP と SQL インジェクション攻撃を防ぐためのヒント (SQL 丸めを含む) を紹介しています。PHP チュートリアルに興味のある友人に役立つことを願っています。