13

我在视图中有一个模型和一个表单。我有一个简单的字符串字段,称为描述。我可以在<script>alert('xss')</script>该字段中插入如下脚本:我可以看到,在我的网站上使用其他模型的其他操作中,我看不到我没有AllowHtml类似的东西。

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

对于其他操作,我做了一个简单的 ajax 帖子。

为什么验证输入不适用于这种 JSON ajax 帖子?对于这种 ajax 请求,如何防止整个站点的 xss?

谢谢

4

3 回答 3

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。

于 2014-03-14T18:06:03.097 回答
0

另一种方法是使用像这样的 Sanitizer 库,您可以选择要过滤掉的 HTML 标签。

于 2019-12-05T08:43:59.863 回答
0

尝试使用 Nuget 中的 AntiXssLibrary,并使用 getSafeHtmlContent。在将记录保存到 db 时,您可以获得安全的内容。

于 2018-11-05T08:29:43.340 回答