gpt4 book ai didi

asp.net-mvc - ASP.NET MVC 使用自定义模型绑定(bind)程序时从客户端检测到潜在危险的 Request.Form 值

转载 作者:行者123 更新时间:2023-12-02 05:20:53 26 4
gpt4 key购买 nike

此处出现错误:

ValueProviderResult value = bindingContext.ValueProvider.GetValue("ConfirmationMessage");

如何允许仅选择值?即

[ValidateInput(false)]
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
ValueProviderResult value = bindingContext.ValueProvider.GetValue("ConfirmationMessage");
ValueProviderResult value2 = bindingContext.ValueProvider.GetValue("ConfirmationMessage2");
}

最佳答案

您有几个选择。

在模型上将此属性添加到您需要允许 HTML 的每个属性 - 最佳选择

using System.Web.Mvc;

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

在 Controller 操作上添加此属性以允许所有 HTML

[ValidateInput(false)]
public ActionResult SomeAction(MyViewModel myViewModel)

在 web.config 中使用暴力破解 - 绝对不推荐

在 web.config 文件的标记内,插入具有 requestValidationMode="2.0"属性的 httpRuntime 元素。还要在页面元素中添加 validateRequest="false"属性。

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

更多信息:http://davidhayden.com/blog/dave/archive/2011/01/16/AllowHtmlAttributeASPNETMVC3.aspx

以上适用于默认模型绑定(bind)器的用法。

自定义模型绑定(bind)器

上面的代码中对 bindingContext.ValueProvider.GetValue() 的调用似乎总是验证数据,无论任何属性。深入研究 ASP.NET MVC 源代码会发现,DefaultModelBinder 首先检查请求是否需要验证,然后使用指示是否需要验证的参数调用 bindingContext.UnvalidatedValueProvider.GetValue() 方法。

不幸的是,我们无法使用任何框架代码,因为它是密封的、私有(private)的或其他任何东西,以保护无知的开发人员免于做危险的事情,但创建一个尊重AllowHtml和ValidateInput属性的工作自定义模型绑定(bind)器并不太困难:

public class MyModelBinder: IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
// First check if request validation is required
var shouldPerformRequestValidation = controllerContext.Controller.ValidateRequest && bindingContext.ModelMetadata.RequestValidationEnabled;

// Get value
var valueProviderResult = bindingContext.GetValueFromValueProvider(shouldPerformRequestValidation);
if (valueProviderResult != null)
{
var theValue = valueProviderResult.AttemptedValue;

// etc...
}
}
}

另一个必需的部分是检索未经验证的值的方法。在此示例中,我们使用 ModelBindingContext 类的扩展方法:

public static class ExtensionHelpers
{
public static ValueProviderResult GetValueFromValueProvider(this ModelBindingContext bindingContext, bool performRequestValidation)
{
var unvalidatedValueProvider = bindingContext.ValueProvider as IUnvalidatedValueProvider;
return (unvalidatedValueProvider != null)
? unvalidatedValueProvider.GetValue(bindingContext.ModelName, !performRequestValidation)
: bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
}
}

有关此内容的更多信息,请访问 http://blogs.taiga.nl/martijn/2011/09/29/custom-model-binders-and-request-validation/

关于asp.net-mvc - ASP.NET MVC 使用自定义模型绑定(bind)程序时从客户端检测到潜在危险的 Request.Form 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17254354/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com