读书人

asp.net中用ajax请求webservice,怎么解

发布时间: 2013-07-20 11:07:48 作者: rapoo

asp.net中用ajax请求webservice,如何解决别人恶意调用
这是一个web在线聊天,游客聊天照样可以请求webservice,传输的数据都是前台给传的json格式,数据都是可见的,该怎么解决别人恶意调用呢,请大家帮帮忙啊,小弟在此先谢谢了,急需解决,求帮忙,在线等
.aspx代码:
function sendMsgAjax(ssid,sid,rid,con){
$.ajax({
type:"post",
url:"Common.asmx/SendMsgNew",
data:"{\"sessionId\":\""+ssid+"\",\"senderId\":\""+sid+"\",\"reciverId\":\""+rid+"\",\"msgContent\":\""+con+"\"}",
contentType:"application/json",
dataType:"json",
success:function(data){
alert("消息发送成功");
},
error:function(){
alert("error");
}
});
}

webservice代码:
[WebMethod]
public int SendMsgNew(int sessionId,int senderId, int reciverId, string msgContent)
{
BLL = new ChatOnlineBLL();
int result = BLL.AddChatMsgNew(sessionId,senderId, reciverId, msgContent);
return result;
}

ASP.NET Ajax Web服务 聊天工具


[解决办法]

[WebMethod]
public string HelloWorld() {
string server_v1 ="";
if(HttpContext.Current.Request.UrlReferrer!=null)
{
server_v1 = Convert.ToString(HttpContext.Current.Request.UrlReferrer.Host);
}
string server_v2 = Convert.ToString(HttpContext.Current.Request.Url.Host);
if (server_v1.Equals(server_v2) && !server_v2.Equals(""))
{
return "Hello World";
}
else
{
return "error";
}
}

这样也不是 安全。。可以伪造UrlReferrer,
在数据入库时可以先验证一下reciverId是否存在以及不是 senderId
同时限制2秒内允许发一次或验证senderId当前几小时以内发的信息数量超过多少禁止其发送(这个数量需
考量,恶意灌水的量级)
个人觉得 只能尽量防止恶意添加

[解决办法]
配置authentication(身份认证,用户名,密码登录),并编程实现自己的authorization(不同用户的不同访问权限)。
这都是可以配置成针对特定URL的,包括你的web service。如果别人没有登录或者没有访问权限,都不可能调用你的web service,地址栏输入都不行。
另外,用http的话,聊天的内容无法加密,即使加密了,由于你的客户端是javascript写的,解密算法是暴露的,所以别人可以很容易解密。除非使用依赖ssl/tls算法的https,那样才能保证聊天内容无法被截获和解密。不过受信任的https授权证书是要花钱买的。
[解决办法]
在客户端调用的话,好像没有绝对的安全,因为你的实现别人都可以看得到。

读书人网 >asp.net

热点推荐