.NET 4.0では、要求の検証が段階的に強化されました!任意のコードがRequest.Formにアクセスしようとすると、フォーム内の値が検証され、HttpRequestValidationExceptionがスローされたようです。ログインページ(フォーム認証)にリダイレクトするHttpRequestValidationException
これ自体は問題ではありません。ただし、ASP.NET自体がこの状況を処理する上で私に何の恩恵も与えていないという特定のシナリオを発見したこと以外は、問題ありません。
私はHTML入力を受け付けるフォームを持っています(私はむしろそうしたいと思いますが、私はそうします)。このフォームの編集モデルにはフィールドに[AllowHtml]
という属性があります。したがって、HTMLの送信は問題なく、例外をスローしません。
ただし、ユーザーが認証されていない(セッションがタイムアウトしたなど)、フォームを送信しようとすると、ASP.NETがログインページにリダイレクトしようとしている間にHttpRequestValidationExceptionがスローされます。 ASP.NETが要求がAJAX要求であるかどうかを検証するときに、フォームフィールドにアクセスしようとすると例外がスローされます。
スタックトレース:System.Web.UI.PageRequestManager.IsAsyncPostBackRequest
内のコードの
[HttpRequestValidationException (0x80004005): A potentially dangerous Request.Form value was detected from the client (LongDescription="<p>Hello</p>").]
System.Web.HttpRequest.ValidateString(String value, String collectionKey, RequestValidationSource requestCollection) +8855748
System.Web.HttpRequest.ValidateNameValueCollection(NameValueCollection nvc, RequestValidationSource requestCollection) +122
System.Web.HttpRequest.get_Form() +150
System.Web.HttpRequestWrapper.get_Form() +11
System.Web.UI.PageRequestManager.IsAsyncPostBackRequest(HttpRequestBase request) +223
System.Web.Handlers.ScriptModule.HttpResponse_Redirecting(Object sender, EventArgs e) +82
System.Web.HttpResponse.Redirect(String url, Boolean endResponse, Boolean permanent) +394
System.Web.Security.FormsAuthenticationModule.OnLeave(Object source, EventArgs eventArgs) +9044409
System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +148
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +75
問題の行:
// DevDiv Bugs 188713: X-MicrosoftAjax header is stripped by some firewalls
string asyncPost = request.Form[AsyncPostFormField];
return !String.IsNullOrEmpty(asyncPost) && (asyncPost.Trim() == "true");
それが正常にこのシナリオでは、ログインページにリダイレクトするために、私は希望のすべてがあります。私はまた、.NET 4.0検証を無効にしたくありません!
誰でもこの問題を解決する方法を知りましたか?
答えてくれてありがとう、しかし、HTMLにURLエンコードを適用することは正しいことではないだろう - それは、(例えば、&URLエンコードでHTMLエンコーディングでなければならないであろう26%されているが、HTMLに&される。また、私はこれが必要になります。 HTMLを許可するすべてのフォームに適用する - ログインページにリダイレクトする1つの状況に対応する –