4

mysql_real_escape_string();utf8エンコーディングで使用するだけでは保護できないSQLインジェクションメソッドのリストはありますか?

整数の場合、intval(); Is it secure enough?を使用しています。

誰でもハッキングできるように「チュートリアル」を取得したいと考えている人へ: いいえ、しません。アプリケーションの安全性を高める方法と、ハッカーに対して 99% 保護されているかどうかを知りたいだけです。

4

3 に答える 3

3

有効なデータベース接続が与えられた場合、すべての状況で文字列データに対してmysql_real_escape_string()安全であると想定されます(この回答で説明されているまれな例外を除きます)。

ただし、文字列以外のものはエスケープされません。

$id = mysql_real_escape_string($_GET["id"]);

mysql_query("SELECT * FROM table WHERE id = $id");

邪悪な追加コマンドを追加するために文字列を「ブレイクアウト」する必要がないため、依然として脆弱です。

于 2011-07-12T15:20:37.143 に答える
1

多くのSQLインジェクション方法はありません。これらは常に、入力がサニタイズされておらず、適切にエスケープされていないことが原因です。したがって、mysql_real_escape_string()データベースクエリに含まれる文字列を安全にしますが、次の回避手法に従って、データとユーザーを sql インジェクションから保護する必要があります。

  • スーパーユーザーまたはデータベース所有者としてデータベースに接続しないでください。非常に限られた権限を持つ常にカスタマイズされたユーザーを使用します。
  • 指定された入力が期待されるデータ型を持っているかどうかを確認します。
  • アプリケーションが数値入力を待機している場合は、 を使用してデータを検証することを検討するis_numeric()か、settype()
  • データベース固有の文字列エスケープ関数を使用して、データベースに渡される数値以外のユーザー指定の値をそれぞれ引用符で囲みます。そのmysql_real_escape_string()ため、mysql データベースへの SQL クエリにすべての文字列を安全に含めることができます。
  • また、ストアド プロシージャとプリペアド ステートメントの使用法を学ぶこともできます。これらは非常に安全ですが、他の影響を与える傾向があります。

参照: SQL インジェクションに関するPHP ページ

于 2011-07-12T15:36:58.750 に答える
0

使用しているソフトウェアのバージョンによっては、標準的な方法 (文字列のエスケープ、int キャストなど) では保護されないことが多くあります。たとえば、utf-8 はそれ自体が大きな問題です。(多くの例の中で) 小さな例として、リクエストが有効な utf-8 (または utf-8 に変換) であることを確認する必要があります。を参照してください。

Web サイトの不死の悩みの種として、MySQL インジェクション保護を 1 つの SO 回答に絞り込むことはできないと考えているため、これらのリンクを一般的な出発点として含めています。

http://ferruh.mavituna.com/sql-injection-cheatsheet-oku/

また : mysql インジェクション utf8 を検索します。

于 2011-07-12T15:22:26.667 に答える