早上/下午/晚上所有,
我对在模型绑定器中工作和创建自定义模型绑定器非常陌生,所以有些事情对我来说不是很清楚。
我正在尝试创建一个自定义模型绑定器,以验证/查看从 web api 调用返回的类中的每个字符串属性,以防止任何 XSS 攻击尝试。我已经实现了我认为应该是一个可行的解决方案,但我不确定我是否错过了一个步骤或尝试了一些不可行的东西。
我的自定义模型绑定器如下所示,我删除了 xss 验证内容,因为该代码没有问题。
public class CustomModelBinder : DefaultModelBinder
{
protected override void BindProperty(ControllerContext controllerContext, ModelBindingContext bindingContext, PropertyDescriptor propertyDescriptor)
{
if (propertyDescriptor.PropertyType == typeof(string))
{
var stringValue = bindingContext.ValueProvider.GetValue(propertyDescriptor.Name).ToString();
// Do the validation/string check work,
if (isXSSAttempt)
{
bindingContext.ModelState.AddModelError(propertyDescriptor.Name, "Invalid input.");
return;
}
}
base.BindProperty(controllerContext, bindingContext, propertyDescriptor);
}
}
在我的 global.asax 中,我将默认活页夹设置如下:
ModelBinders.Binders.DefaultBinder = new CustomModelBinder();
我是否错过了设置此自定义模型绑定器的步骤?
我已经进行了测试以检查 xss 验证工作是否已完成,但对端点的 http POST 调用不会拒绝该调用,并正常继续。不确定是否可行,但我尝试过设置断点,但它们从未被击中。我知道 XSS 的东西在我创建了一个自定义属性时起作用,但我正在研究这种方法以避免必须在 web api 调用所需的每个类/模型中的每个属性上放置一个自定义属性。
欢迎您指出任何指示或遗漏的步骤。
干杯