1

早上/下午/晚上所有,

我对在模型绑定器中工作和创建自定义模型绑定器非常陌生,所以有些事情对我来说不是很清楚。

我正在尝试创建一个自定义模型绑定器,以验证/查看从 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 调用所需的每个类/模型中的每个属性上放置一个自定义属性。

欢迎您指出任何指示或遗漏的步骤。

干杯

4

0 回答 0