我目前正在为使用C#.NET作为后端的网站编写消息传递系统。
消息系统与Facebook的网络界面非常相似,它允许您与其他人“聊天”,通过AJAX发送消息。我创建了一个处理实际发送消息位的Web服务(C#)。我正在使用JQuery使用以下代码激活该服务:
// generic webservice used to retrieve count from db
function SendMessageAJAX(taskID, sendeeID, sendeeType, recipientId, recipientType, content) {
$.ajax({
type: "POST",
url: "/WS/UIServices.asmx/SendMessage",
contentType: "application/json; charset=utf-8",
data: JSON.stringify({ 'content': content, 'SendeeType': sendeeType, 'SendeeId': sendeeID, 'RecipientType': recipientType, 'RecipientId': recipientId, 'taskID': taskID }),
dataType: "json",
success: function (msg) {
// refresh chat area
LoadMessages(false);
},
error: function () { alert("error"); }
});
}
如您所见,我在请求中传递了服务/收件人信息。显然代码非常危险,因为任何人都可以修改这些值并冒充任何用户。
我在服务器端的SESSION变量中有当前登录用户,但代码运行异步,这意味着会话变量在运行时未定义。
通过AJAX安全运行这些操作的最佳方法是什么?
答案 0 :(得分:0)
有两种选择:
您可以加密ajax请求,例如this code project article 或将SSL用于网站。
在IHttpAsyncHandler
中实施您的服务器代码,并实施IRequiresSessionState
,以便您有权访问该会话。
http://msdn.microsoft.com/en-us/magazine/cc164128.aspx
is it possible to run async call to set a session in ASP.NET?
使用ssl始终是首选,但如果您有时间实施,其他选项也是可行的。