这是一个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.NETAjaxWeb服务聊天工具
.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.NETAjaxWeb服务聊天工具
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当前几小时以内发的信息数量超过多少禁止其发送(这个数量需
考量,恶意灌水的量级)
个人觉得 只能尽量防止恶意添加
这都是可以配置成针对特定URL的,包括你的web service。如果别人没有登录或者没有访问权限,都不可能调用你的web service,地址栏输入都不行。
另外,用http的话,聊天的内容无法加密,即使加密了,由于你的客户端是javascript写的,解密算法是暴露的,所以别人可以很容易解密。除非使用依赖ssl/tls算法的https,那样才能保证聊天内容无法被截获和解密。不过受信任的https授权证书是要花钱买的。
这一块首先IE 就获取不到urlrefer,别的肯定不用考虑了,用这个不行啊
好吧,我错了,是因为曾经用过这个urlrefer,他获取的值总是NULL,so