从客户端检测到一个潜在危险的Request.Form值(wresult =“

时间:2011-09-30 19:10:03

标签: asp.net-mvc-3 wif single-sign-on

使用WIF时,我也收到了请求验证错误。我被正确地发送到STS,但在回来的路上,我得到了这个验证错误。

我遵循了所有指示。

<httpRuntime  requestValidationMode="2.0" />

检查!

    [ValidateInput(false)]

检查!

<pages validateRequest="false" >

检查!

我尝试了一个自定义验证器,但它永远不会被实例化。

错误堆栈:

[HttpRequestValidationException (0x80004005): A potentially dangerous Request.Form value was detected from the client (wresult="trust:RequestSecuri...").]
   System.Web.HttpRequest.ValidateString(String value, String collectionKey, RequestValidationSource requestCollection) +11396740
   System.Web.HttpRequest.ValidateNameValueCollection(NameValueCollection nvc, RequestValidationSource requestCollection) +82
   System.Web.HttpRequest.get_Form() +212
   Microsoft.IdentityModel.Web.WSFederationAuthenticationModule.IsSignInResponse(HttpRequest request) +26
   Microsoft.IdentityModel.Web.WSFederationAuthenticationModule.CanReadSignInResponse(HttpRequest request, Boolean onPage) +145
   Microsoft.IdentityModel.Web.WSFederationAuthenticationModule.OnAuthenticateRequest(Object sender, EventArgs args) +108
   System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +80
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +270

有什么建议吗?

4 个答案:

答案 0 :(得分:26)

<httpRuntime requestValidationMode="2.0"/>

之后添加

<configuration>
    <system.web>
        <pages validateRequest="false" />
    </system.web>
</configuration>

同样在mvc3中有一个AllowHtml属性

[AllowHtml]
public string Property{ get; set; }

这里有一些有用的链接

ASP.NET MVC – pages validateRequest=false doesn’t work?

Why is ValidateInput(False) not working?

答案 1 :(得分:3)

如果您运行的是.NET 4.5,请参阅this answer,它利用了ASP.NET内置的更新请求验证程序。

答案 2 :(得分:0)

您可以按照ASP.NET : A potentially dangerous Request.Form value was detected from the client将两个构造放在system.web部分中。

请注意,这是标准的ASP.NET功能。它没有连接到WIF。

答案 3 :(得分:0)

在MVC 3中(不确定2)你可以在global.asax.cs中添加一个全局过滤器,例如

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
    filters.Add(new ValidateInputAttribute(false));
}

加上以下内容应该允许所有数据进入并正确安全地显示它我认为:

<httpRuntime encoderType="Microsoft.Security.Application.AntiXssEncoder, AntiXssLibrary"/>
在web.config中使用

并使用(注意冒号):

<%: Model.Something %>

或在Razor中:

@Model.Something

在某些情况下使用Javascript:

@Html.Raw(Ajax.JavaScriptStringEncode(Model.Something))