4

asp.net プロジェクトの一部の Web フォームで FreeTextBox HTML エディターを使用しています。ValidateRequest プロパティを false に設定しないと、次のエラーが発生します。

潜在的に危険な Request.Form 値がクライアントから検出されました

ただし、権限のあるユーザーのみがアクセスできるため、admin フォルダーでは問題ありません。しかし、すべてのユーザーがコメントを残すためにアクセスできるセクションのような公開ページ (ユーザーのコメントを収集するために FreeTextBox を使用) はどうですか? XSS 攻撃は危険ではありませんか? 答えが Yes でない場合、 ValidateRequest プロパティは何ですか?

4

4 に答える 4

6

いいえ、これは潜在的に危険です。その背後にある考え方は、.net はそのコントロールで実行できることを制限したくないが、同時にセキュリティ ホールの可能性の多くを排除したいというものです。ValidateRequest プロパティが存在するので、ASP.NET に「心配しないでください。自分で検証します。危険に見える可能性があると予想されるからです。」と伝えることができます。

潜在的な xss 攻撃を検証しないことは危険であり、サイトがハッキングされるよりも、気付かなかった検証エラーを取得する方がよいため、デフォルトで応答を検証するように設定されています。

于 2010-11-02T08:20:10.337 に答える
3

はい、リクエストの検証を無効にしても問題ありません。

リクエストの検証は、XSS 攻撃などで使用される最も一般的な文字やフレーズをキャッチしますが、エクスプロイトを実行するすべての可能な方法をキャッチすることはできません。そのため、リクエストの検証によってほとんどのエクスプロイトからの保護が提供されますが、それによって完全に保護されることはなく、すべての入力を潜在的な悪として扱う必要があります。

リクエスト検証の第一の目的は、XSS 攻撃などについて無知な人々によって構築されたアプリケーションを保護し、完全に保護されないようにすることです。入力を正しく処理する方法を知っていて、それを正しく実装することもできれば、リクエストの検証は必要ありません。

于 2010-11-02T09:03:29.420 に答える
1

MSDNのValidateRequestをご覧ください。これは、潜在的に危険なコンテンツについて入力がスキャンされることを示しています。平文に入力フィールドなどを使用するだけであれば、これはすべて問題ありません。問題は、ユーザーに提供してもらいたいときに始まります。他のページへのリンク、または非表示の入力フィールドに追加のデータ(XML形式など)の保持を開始します。ValidateRequestは、この種のコンテンツを許容しません。ValidateRequestは一種の優れた機能であり、ほとんどの場合無効になりますが、無効にすると、入力に対して自分で検証を行う必要があります。私の意見では、とにかく入力を常に自分で検証する必要があります。

于 2010-11-02T09:48:37.383 に答える
1

FreeTexBox コントロールと「潜在的に危険な Request.Form 値がクライアントから検出されました」

別の決定を試すことができます

 if(!this.Page.ClientScript.IsOnSubmitStatementRegistered("Replace"))
{
 string script = @"if (Page_IsValid){FTB_API['" + txtBox.ClientID + @"'].initialized=false;   FTB_API['"  + txtBox.ClientID + @"'].htmlEditor.value=FTB_FreeTextBox.prototype.HtmlEncode( FTB_API['" + txtBox.ClientID + @"'].htmlEditor.value);}";
 this.Page.ClientScript.RegisterOnSubmitStatement(this.Page.GetType(), "Replace", script);
}

サーバーからクライアントアプリケーションに文字列を送信するときは、記号を置き換えることを忘れないでください

if(!String.IsNullOrEmpty(yourstring)) txtBox.Text= yourstring.Replace("&gt;", ">").Replace("&lt;", "<").Replace("&amp;", "&").Replace("&quot;", ('"').ToString()).Replace("&#146;", "'");

この場合、ValidateRequest をオフにする必要はありません。文字列をデータベースに保存する前に、文字を置き換えることもできます。

于 2012-05-31T08:01:29.030 に答える