提问人:guy schaller 提问时间:12/18/2012 最后编辑:marzzyguy schaller 更新时间:6/7/2021 访问量:1267
输入验证不适用于以 JSON 形式发送 asp.net mvc 4 模型
input validation not working on asp.net mvc 4 model sent as JSON
问:
我在视图中有一个模型和一个表单。我有一个简单的字符串字段,称为描述。我能够插入如下脚本:到该字段。
我可以看到,在我网站上使用其他模型的其他操作中,我看不到这一点
我没有或类似的东西。<script>alert('xss')</script>
AllowHtml
唯一的区别是,对于这个模型,我使用了一个带有 json 对象和 application/json 内容类型的帖子
返回 true。即使有一个带有 XSS 脚本的 description 属性......ModelState.IsValid
对于其他操作,我做了一个简单的ajax帖子。
为什么验证输入不适用于这种 JSON ajax 帖子? 如何防止整个站点的 XSS 出现此类 AJAX 请求?
谢谢
答:
这是因为 ValidateInput 仅适用于 FormValueProvider。至于 JsonValueProvider,您需要推出自己的机制。
步骤
1) 创建标记属性 2) 通过子类化创建自定义模型绑定器 3) 覆盖方法 ->获取基础属性的尝试值,对其进行清理并将其分配给视图模型属性。
看看这个。CustomAntiXssAttribute
DefaultModelBinder
BindProperty
编辑:
将行替换为 ,以支持嵌套的 ViewModel。var valueResult = bindingContext.ValueProvider.GetValue(propertyDescriptor.Name);
var valueResult = bindingContext.ValueProvider.GetValue((string.IsNullOrWhiteSpace(bindingContext.ModelName) ? string.Empty : bindingContext.ModelName + ".") + propertyDescriptor.Name);
尝试使用 Nuget 中的 AntiXssLibrary,并使用 getSafeHtmlContent。您可以在将记录保存到 DB 时获取安全内容。
另一种方法是使用像这样的 Sanitizer 库,您可以选择要过滤掉的 HTML 标签。
评论
requestValidationMode