【问题标题】:What does {"d":""} means in asp.net webservice response{"d":""} 在 asp.net webservice 响应中是什么意思
【发布时间】:2011-11-05 20:18:06
【问题描述】:

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

C#:

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


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);
            }
        });
    });

我的问题是为什么alert(msg); 不起作用

【问题讨论】:

    标签: .net asp.net web-services


    【解决方案1】:

    这是一种安全强化机制。

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

    查看这篇精彩的博文:http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx

    【讨论】:

    • +1 谢谢,这意味着 MS 开发人员仅针对“数组覆盖”问题添加了 {d:""} 变量
    • 一点也不。仔细阅读他的回答。 “跨站请求伪造攻击”还有一种利用这个漏洞模拟XSS攻击的方法。
    【解决方案2】:

    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;
    

    由戴夫·沃德提供:Never worry about ASP.NET AJAX’s .d again

    【讨论】:

    • 是的,基本上是我上面的回答。
    猜你喜欢
    • 2013-07-16
    • 2020-06-26
    • 1970-01-01
    • 2023-03-27
    • 2010-10-24
    • 2019-12-05
    • 2017-01-18
    相关资源
    最近更新 更多