【发布时间】:2014-01-22 22:14:34
【问题描述】:
我正在使用 ASP.NET 的通用处理程序(ASHX 文件)来制作可以将数据返回到移动应用程序等的服务器端页面。其中一些数据是保密的。到目前为止,我正在使用 JSON 和 POST 方法。
但是,任何有权访问客户端代码(例如移动应用程序的代码)的人都可以看到他必须将哪些关键字发送到“不可预测”的 URL 才能进行更改或获取数据.
我已经研究了几个小时,但找不到合适的方法来验证发送 JSON 请求的人确实是经过批准的移动应用程序。
使用 AJAX 向服务器发送请求的示例:
function login()
{
var jsonParam = { name: "test", aname: "secret", pass: "1234", type: "login" }
$.ajax({
url: "AppDatabase.ashx",
type: "post",
data: JSON.stringify(jsonParam),
dataType: "json",
contentType: 'application/json; charset=utf-8',
async:false,
success: function (response) {
alert(response.userEmail);
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
alert("Status: " + textStatus + "\r\n" + "Error: " + errorThrown);
}
});
}
服务器端接收请求示例:
public void ProcessRequest (HttpContext context) {
context.Response.ContentType = "application/json";
JavaScriptSerializer jss = new JavaScriptSerializer();
context.Request.InputStream.Position = 0;
string json;
using (var reader = new StreamReader(context.Request.InputStream))
{
json = reader.ReadToEnd();
}
Dictionary<string, object> dict = jss.Deserialize<Dictionary<string, object>>(json);
if(dict["aname"].ToString() == "secret")
{
// The best security I have right now is a "secret keyword" within the request
}
}
【问题讨论】:
-
你的意思是你从客户端发送秘密关键字??
-
@Furqan 是的,还有哪里?
-
如果您想阻止任何其他 3rd 方应用程序访问该 URL,那么这是不可能的。一旦 URL 公开,任何人都可以访问它,唯一的停止方法是实施用户身份验证。但是,如果他们有凭据,第三方仍然可以访问该资源。
标签: c# asp.net ajax json handler