1

これがサンプルコードです。

create table (id int(11) not null, name char(80));

入力を取得している間、最大長を検証しません。テーブルを挿入または更新するよりも、ユーザー入力値がnullでないかどうかを確認します。

ユーザーが80文字を超える値を入力した場合、クエリは実行されず、SQLエラーが返されますが、このSQLエラーは悪用可能ですか?

私の最初と最後の推測は「いいえ」です。例で間違っていることを証明してください。

ありがとう&Reqards

4

3 に答える 3

4

あなたは間違っている。クエリが実行され、警告のみが返されます。最初の 80 文字が挿入され、残りは無視されます! 自分で試してみてください。phpmyadmin を開いてこのテーブルを作成し、81 文字以上を名前列に挿入すると、表示されます。これのhttp://goo.rs/rK6sWE

于 2012-11-24T20:19:51.167 に答える
1

いいえ、100 文字の入力を 80 文字のフィールドに入力しようとしても、攻撃者はそれを悪用できません。ただし、実行時エラーが発生するため、データをデータベースに貼り付けようとする前に、データが列に収まるかどうかを確認する必要があります。

于 2012-11-24T20:16:29.513 に答える
1

name char(80)MySQL が 80 文字を超えるものを格納することを拒否することのみを保証します。ただし、このデータが MySQL に (たとえば Web フォームから) 書き込まれる前でさえ、そのような保証はありません。

セキュリティについて本当に心配している場合は、常に準備済みステートメントとバインディング変数を使用する必要があります。

于 2012-11-24T20:18:51.823 に答える