输入验证不能用于作为JSON发送的asp.net mvc 4模型

guy*_*ler 11 ajax asp.net-mvc jquery

我在视图中有一个模型和一个表单.我有一个简单的字符串字段,称为描述.我能够将脚本插入<script>alert('xss')</script>到该字段中.我可以看到,在我的网站与其他模型的其他行动中,我不能没有AllowHtml或类似的东西.

唯一的区别是,对于这个模型,我做一个带有json对象和内容类型的application/json的帖子,ModelState.IsValid它返回true.即使有一个带有xss脚本的描述属性...

而对于其他动作,我做了一个简单的ajax帖子.

为什么验证输入不适用于这种JSON ajax帖子?我怎样才能阻止整个网站上的xss这种ajax请求?

谢谢

Kya*_*ein 0

这是因为 ValidateInput 仅适用于 FormValueProvider。至于JsonValueProvider,您需要推出自己的机制。

步骤 1) 创建标记属性CustomAntiXssAttribute 2) 通过子类化创建自定义模型绑定器DefaultModelBinder 3) 覆盖BindProperty方法 -> 获取底层属性的尝试值,对其进行清理并将其分配给视图模型属性。看一下这个

编辑:替换该行var valueResult = bindingContext.ValueProvider.GetValue(propertyDescriptor.Name);var valueResult = bindingContext.ValueProvider.GetValue((string.IsNullOrWhiteSpace(bindingContext.ModelName) ? string.Empty : bindingContext.ModelName + ".") + propertyDescriptor.Name);支持嵌套 ViewModel。