0

はっきりさせておきますが、私は URL (ページ、クエリ、またはその他の場所ではなく) で発生する可能性があるセキュリティ侵害についてのみ話しているのです。

問題は、フォームで「GET」を使用しても山かっこがエンコードされないことに気付いたことです。

C#.Net では、使用時に URL に山かっこを使用することは許可されないため、Request.QueryString使用せざるをRequest.Unvalidated得ませんが、URL 内の山かっこだけがセキュリティ リスクである場合 (つまり、かっこなどの他の特殊文字、アポストロフィ、引用符などは適切にエンコードされています)。

このサイト: https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet JavaScript は URL から直接実行できることを読みましたが、成功したことは一度もありませんが、そうする必要があります。送信ボタンが必要な場合は事前に確認してください(もちろん、この方法ではそのタイプはありません)、独自のJavascriptを指し、自分でエンコードしてから、JavaScriptを使用してそこからフォームを適切に送信します、または、検証されていないデータを要求して先に進む必要がある場合。

通常、私は最も安全であると保証できるルートをたどりますが、単純な検索フォームを送信するためだけにユーザーに javascript を強制することは、良い習慣ではないようです。

4

1 に答える 1

2

URL のセキュリティ違反の可能性について話しているだけです (ページ、クエリ、またはその他の場所ではありません)。

URL 自体がセキュリティ侵害を引き起こすことはありません。セキュリティの問題は、ページ/サイトがユーザーが入力した情報を取得してページに表示する (XSS) か、クエリに入れる (SQL インジェクション) などの場合に発生する可能性があります。

RequestValidation は、危険なクエリ文字列を取得してサイトに表示することから保護することを目的としています。たとえば、クエリ文字列が次の?searchterm=<script>alert('XSS!');</script>ようなコードの場合:

SearchTermLabel.Text = "You searched for " + Request["searchterm"];

ユーザーの検索文字列がページにレンダリングされ、スクリプトとして実行されます。

次に、RequestValidation を無効にするかどうかについて..正当な検索クエリに、<RequestValidation をトリガーする文字またはその他のものを含めることができますか? その場合は、RequestValidation を無効にするかUnvalidated、検索文字列を手動で検証/消去する必要があります。それ以外の場合、RequestValidation は通常、誰かがいたずらをした場合にのみトリガーされます。個人的には、セキュリティ上の問題が発生しない限り、ユーザー エクスペリエンスについてはあまり心配していません。HttpRequestValidationException をキャッチして魅力的なエラー ページを表示する方法もあります。

于 2013-06-28T18:27:43.087 に答える