这是一个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服务聊天工具

解决方案 »

  1.   

    webservice 加个身份验证啊http://developer.51cto.com/art/200908/141829.htmhttp://www.cnblogs.com/confach/archive/2005/12/13/296103.html
      

  2.   

    在这个ajax请求中别人是可以看到具体的webservice,他就直接地址栏输入,怎么进行身份验证呢
      

  3.   

    [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当前几小时以内发的信息数量超过多少禁止其发送(这个数量需
    考量,恶意灌水的量级)
    个人觉得 只能尽量防止恶意添加
      

  4.   

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

  5.   


    这一块首先IE 就获取不到urlrefer,别的肯定不用考虑了,用这个不行啊
      

  6.   


    好吧,我错了,是因为曾经用过这个urlrefer,他获取的值总是NULL,so