1

私は疑問に思っていました...フロントエンドで検証したとしても、バックエンドでユーザー入力を検証する必要があることは誰もが知っています。言い換えれば、フロントエンドの検証は使いやすさのためだけであり、バックエンドの検証は品質とセキュリティのためです。

Webページに入力フィールドがあり、ユーザーがテキストを入力できるとします。攻撃者がそのような長いテキストを入力して、バックエンドにテキストを保持する変数に収まらない可能性はありますか?これまで見てきたことは、文字列がデータベースフィールドに収まるかどうかを確認することだけです。

String txt = getParameter("usertext");
assert(txt.length() < 201);
// the field in the database: 
// user_text varchar(200),

しかし、ユーザーテキストが非常に長く、長String txtすぎると小さすぎる場合、プログラムは最初の行でクラッシュしませんか?

これがどれくらいの期間になるかについての議論ではないことを願っていStringます。ヒープサイズと仮想メモリなしでそれを行うことができれば、それは素晴らしいことです;)

4

1 に答える 1

0

しかし、ユーザーテキストが非常に長く、String txtが小さすぎる場合、プログラムは最初の行でクラッシュしませんか?

答えはノーです。Stringオブジェクトのサイズに実際の制限はありません。

ただし、次の問題を考慮に入れてください:UTF-8文字。

データベースのフィールドサイズがVARCHAR2タイプ(これは例です)のBYTES(charではなく、私の場合はデフォルト)で表現され、1バイトを超えるUTF-8文字を挿入すると問題が発生しました。

例:

データベースフィールド=VARCHAR2(50)

検証:文字列の長さ<= 50

文字列€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ 50文字ですが50バイトを超えています。

春の検証では合格と見なされますが(長さが50未満)、DB挿入ステートメントが例外をスローしました...

于 2013-01-17T15:08:09.380 に答える