什么{"d":""}表示在asp.net webservice响应中

Nit*_*ant 7 .net asp.net web-services

我创建了一个简单的C#asp.net Web服务函数,它返回一个字符串消息
,我使用jquery ajax从页面调用它.

C#:

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string HelloWorld() {
    return DateTime.Now.ToString();
}
Run Code Online (Sandbox Code Playgroud)


JS:

    $(document).ready(function() {
    //alert("ready");
        $.ajax({
            type: "POST",
            contentType: "application/json; chatset=utf-8",
            url: "WebService2.asmx/HelloWorld",
            data: "{}",
            dataType: "json",
            success: function(msg) {
                //alert(msg); //doesnt works
                alert(msg.d);
            }
        });
    });
Run Code Online (Sandbox Code Playgroud)

我的问题是,为什么 alert(msg);犯规作品

Ofe*_*lig 11

这是一种安全加固机制.

从本质上讲,它有助于防止CSRF类型的攻击,其中攻击者从受害者网站读取JavaScript数组(从Json下载).他们可以通过覆盖JavaScript的Array类型来做到这一点.d导致返回的Json不是一个数组,从而使得Array overriding对攻击者无用.

看到这篇伟大的博客文章:http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx

  • 根本不是nithin.仔细阅读他的回答."跨站点请求伪造攻击"还有一种方法可以使用此漏洞模拟XSS攻击. (2认同)

nav*_*een 8

ASP.NET和WCF JSON服务端点实际上将其JSON包装在具有"d"属性的对象中,以避免在使用JSON时出现潜在的安全漏洞

Phil Haack的帖子:http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx

这是从ASP.NET3.5引入的.如果你想msg在3.5之前和之后的两个框架中工作,那么试试这个小黑客.

var data = msg.hasOwnProperty("d") ? msg.d : msg;
Run Code Online (Sandbox Code Playgroud)

礼貌戴夫沃德:再也不用担心ASP.NET AJAX了.d