まず、これはSQL-Injection と呼ばれます。 。基本的には、ユーザー入力を介してデータベースに対するクエリを変更する可能性があります。
例を見てみましょう:
クエリ:
SELECT temp1 FROM temp WHERE temp2 = 'VAR1';
次に、VAR1に次の値を割り当てます。'; DROP TABLE *; --
そして、次のようになります:
SELECT temp1 FROM temp WHERE temp2 = ''; DROP TABLE *; --';
mysql_real_escape_string
を使用 次のようになります:
SELECT temp1 FROM temp WHERE temp2 = '\'; DROP TABLE *; --'
mysql_real_escape_string
クエリ内で使用するために文字列を「保護」します。
ただし、最終的には、 mysql_*
の使用を停止する必要があります。 完全に 。これらは非推奨であり、SQLインジェクションやクエリを調整するその他の手段を防ぐことに関しては、安全ではないと見なされています。
このようにクエリを連結するのはやめるべきです プリペアドステートメント の使用を開始します 、これは使いやすいだけでなく、デフォルトでSQLインジェクションを防ぐだけでなく、アプリケーションの速度を向上させることもできます。
PHPの場合、mysql_*
全体を閉じるように設計された2つの拡張機能があります。 オープン:
そしてもう一度言います: mysql_*
の使用をやめてください !