mysql_real_escape_string();
utf8エンコーディングで使用するだけでは保護できないSQLインジェクションメソッドのリストはありますか?
整数の場合、intval();
Is it secure enough?を使用しています。
誰でもハッキングできるように「チュートリアル」を取得したいと考えている人へ: いいえ、しません。アプリケーションの安全性を高める方法と、ハッカーに対して 99% 保護されているかどうかを知りたいだけです。
mysql_real_escape_string();
utf8エンコーディングで使用するだけでは保護できないSQLインジェクションメソッドのリストはありますか?
整数の場合、intval();
Is it secure enough?を使用しています。
誰でもハッキングできるように「チュートリアル」を取得したいと考えている人へ: いいえ、しません。アプリケーションの安全性を高める方法と、ハッカーに対して 99% 保護されているかどうかを知りたいだけです。
有効なデータベース接続が与えられた場合、すべての状況で文字列データに対してmysql_real_escape_string()
安全であると想定されます(この回答で説明されているまれな例外を除きます)。
ただし、文字列以外のものはエスケープされません。
$id = mysql_real_escape_string($_GET["id"]);
mysql_query("SELECT * FROM table WHERE id = $id");
邪悪な追加コマンドを追加するために文字列を「ブレイクアウト」する必要がないため、依然として脆弱です。
多くのSQLインジェクション方法はありません。これらは常に、入力がサニタイズされておらず、適切にエスケープされていないことが原因です。したがって、mysql_real_escape_string()
データベースクエリに含まれる文字列を安全にしますが、次の回避手法に従って、データとユーザーを sql インジェクションから保護する必要があります。
is_numeric()
か、settype()
mysql_real_escape_string()
ため、mysql データベースへの SQL クエリにすべての文字列を安全に含めることができます。参照: SQL インジェクションに関するPHP ページ
使用しているソフトウェアのバージョンによっては、標準的な方法 (文字列のエスケープ、int キャストなど) では保護されないことが多くあります。たとえば、utf-8 はそれ自体が大きな問題です。(多くの例の中で) 小さな例として、リクエストが有効な utf-8 (または utf-8 に変換) であることを確認する必要があります。例を参照してください。
Web サイトの不死の悩みの種として、MySQL インジェクション保護を 1 つの SO 回答に絞り込むことはできないと考えているため、これらのリンクを一般的な出発点として含めています。