1

チェックボックス、ラジオ ボタン、またはドロップダウン メニュー (例: 国、生年月日) に対して SQL インジェクションを行う方法はありますか?

また、仮説として、誰かが猫の名前をテキスト フィールドに入力した場合、mysql テーブルに挿入する前に次のコード行を実行するだけで十分でしょうか?

$catsName = preg_replace('/[^a-z]/i', '', $_POST['yourCat']);

または、これに加えてこれを行う必要がありますか?

$catsName = mysql_real_escape_string($_POST['yourCat']);
4

4 に答える 4

6

ラジオ ボタン、チェック ボックスなどには、HTML コードに value オプションがあり、firebug で簡単に変更できます (他にも多くの同様のツールがあります)。そのため、ユーザーが入力したすべての入力をサニタイズするとよいでしょう。

2 番目の質問についてmysql_real_escape_stringは、これで十分です。する必要はありませんpreg_replace

于 2011-07-10T07:55:07.810 に答える
0

クライアントは邪悪な天才であり、あなたよりも賢いと常に考えてください。

SQLインジェクションを回避するには、常にmysql_real_escape_stringを使用してクライアント側のデータをエスケープするか、さらに良いことに、それを実行するデータベースラッパーを使用します。

ただし、最初の正規表現は引き続き役立ちますが、SQLインジェクションには役立ちません。HTMLインジェクションがあるのを防いでいる可能性があります。入力を逐語的にWebページに表示したことがあれば、不正なJavaScriptのような悪意のあるものを防ぐことができます。

于 2011-07-10T08:00:43.933 に答える
0

SQLインジェクションを実行する機能は、入力のタイプに依存せず、受け取った値をどのように使用するかによって異なります。HTML入力コントロールとその結果のフォーム送信は、何でも含めるように手動で編集できます。したがって、必要な情報のみが含まれるように、入力をサニタイズおよび削減する必要があります。

したがって、次のようにチェックボックスを使用すると...

if ($_POST['checkbox'] == 'on') { $val = 1; } else { $ val = 0; }
mysql_query("UPDATE table SET checkbox=$val");

あなたは安全です。一方、ユーザーから受け取った値を直接保存して比較する場合は...

mysql_query("UPDATE table SET checkbox={$_POST['checkbox']}")
...
if ($row['checkbox'] == 'on') { /* enable something */ }   

次に、「すべてのデータはハッカーに属します」:)

2番目の質問については、この特定のケースpregでは十分かもしれませんが、正規表現を変更したり、誤って変更したりすると、不十分になる可能性があります。このようなエラーによってコードがSQLインジェクションに対して脆弱にならないように、データベースに提供されたデータを常にエスケープすることをお勧めします。

于 2011-07-10T08:01:03.953 に答える
0

広告 1) SQL インジェクションはどこでも試すことができます。フォームは、チェックボックス、ドロップダウンなどに関係なく、名前と値のペアのリストとして送信されます。したがって、ドロップダウンの「国」についても、任意の値を送信できます。

広告 2) エスケープとパラメーターのバインドには、常に DBMS ドライバー関数を使用します。

于 2011-07-10T07:55:52.753 に答える