1

私は次の正規表現を持っています: ^[a-zA-Z](.*)[a-zA-Z]$JavascriptとPHP側の両方で、連絡先フォームの人の名前メッセージフィールドを検証するために使用しています(データベースとのやり取りはありません)。基本的に、フィールドの最初と最後の文字がアルファベットであることを保証し、その間に他の文字を許可します。

私の懸念は次のとおりです。

  1. この種の機能について、人の名前やメッセージを検証しようとするのは面倒ですか? 私が検証または保護しているのは、悪意のある入力だけです。
  2. フィールドが空でないことを確認するだけで、自分のサイトを開いたままにしておくと、どのような種類の攻撃にさらされる可能性があるかわかりません。

これらは正当な懸念ですか?すべてのタイプの名前とメッセージのシナリオにケータリングを開始すると、非常に長い式になってしまい、維持するのが難しくなります...それは本当に価値があるのでしょうか、それとも最低限の正規表現はありますか?悪意のある攻撃/スクリプトから保護するためにこれら 2 つのフィールドに使用する必要があるのはどれですか?

(追伸 - 同僚の 1 人から、「!」で始まる名前について思い出させられました)

ありがとうございました!!

4

2 に答える 2

2
  1. このタイプの機能の場合、人の名前やメッセージを検証することに悩む必要がありますか?私が検証している、またはむしろ保護しているのは、悪意のある入力だけです。

悪意のある入力から保護することは、人の名前が実際に人の名前であることを検証することとは異なります。人々の名前は非常に多様である可能性があるため(あらゆる種類の文字を含む)、これに少なくとも1つの非空白文字が含まれていることを確認し、それを使用する方がよい場合があります。名前が1つしかない人もいれば、名前が1文字しかない人もいます。

  1. フィールドが空でないことを確認するだけの場合、サイトを開いたままにしておくことができる攻撃の種類がわかりません。

悪意のある入力から保護することは別の問題であり、たとえば、データベースに入力する前にエントリをフィルタリングする必要がありますが、これは(おそらく)データベースの抽象化またはフレームワークの仕事です。

また、HTMLページの一部としてそのようなデータを出力するときはいつでも、それを使用することを確認する必要がありますhtmlspecialchars()。これにより、クロスサイトスクリプティング(プレーンテキストである必要があるものにHTMLタグが含まれる)から保護されます。これは(おそらく)テンプレートシステムまたはビューレイヤーの仕事です。

于 2010-08-11T23:16:12.923 に答える
2

現在、Dieter Voßという名前の人物は、あなたの連絡先フォームを使用できなくなりました。良くないね。

データベースとのやり取りがなく、データが電子メールなどを介して誰かに送信される場合 (Web 上で公開されるのとは対照的に)、自分自身を保護するためのセキュリティ上の懸念はあまりありません。チェックをまったく行わないことをお勧めします。(おそらくフィールドが空かどうかを除いて。)

免責事項: コードの残りの部分について知らなければ、セキュリティへの影響の可能性に関する記述は間違っている可能性があります。

于 2010-08-11T23:06:25.193 に答える