5

当使用 JQuery 的 $.Ajax(..) 将包含标记的 JSON 对象发布到 MVC 操作方法时,我惊讶地发现内容没有被 ASP.Net 的请求验证拒绝。

请求验证不适用于 JSON 帖子是否有原因?

使用以下定义,服务器不会拒绝标记...

$.ajax({
        url: '/Controller/Action',
        data: JSON.stringify({data:data}),
        type: "POST",
        dataType: "json",
        contentType: "application/json",
      }); 

似乎它与 JSON 类型的帖子相关联

我正在使用 .Net 4.0 MVC 3.0

我正在创建将评论保存到数据库的功能。似乎是一个安全问题,标记/脚本可以使它通过请求验证......

我正在发布一个具有各种属性的 JSON 对象(例如commentText)由于某种原因,如果它包含诸如此类的标记,它不会拒绝我的<div></div>帖子

在这里找到一篇似乎可以解释这种行为的文章:

http://weblogs.asp.net/imranbaloch/archive/2011/05/23/security-issue-in-asp-net-mvc3-jsonvalueproviderfactory.aspx

4

4 回答 4

3

这里似乎有一个线索 http://weblogs.asp.net/imranbaloch/archive/2011/05/23/security-issue-in-asp-net-mvc3-jsonvalueproviderfactory.aspx

于 2013-01-07T13:26:30.410 回答
1

I don't know how exactly the data you pass to the server looks like, but right now I assume that it is just a plain string value 'xyz'. In this case the server gets the following POST data:

{"data":"test"}

This is perfectly ok and does not represent a potential thread identified by ASP.NET.

PS: If you are using other values as data the whole story might be different...

于 2013-01-06T00:18:45.773 回答
1

我想你在谈论请求验证?它在 MVC 中启用,因此您的 JSON 字符串不能被 asp.net 视为威胁 - 我不记得它是否会默认拒绝包含标记的 json 字符串,但我怀疑不会。

有关它的更多信息:http ://weblogs.asp.net/imranbaloch/archive/2011/02/19/understanding-request-validation-in-asp-net-mvc-3.aspx

于 2013-01-05T20:33:59.857 回答
0

请求验证使用数据注释在模型中工作。您可以在模型中启用和禁用 HTML 化妆输入。您可以在模型中使用 [AllowHtml] 来执行此操作。之后,如果用户在任何普通字段中输入 HTML,那么您可以使用 Model.IsValid 属性检查错误。

于 2013-01-06T17:54:47.873 回答