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
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