2

我的代码:

 function HandleSignUp() {
    var CurrentURL = document.URL;
    var obj, val;
    //ajax call started
    $.ajax({
        type: "POST",
        url: "../../webservice/GetAjaxDataWebService.asmx/RegisterNewUser",
        data: "{'UserFullName': '" + $('#SignUpName').val() + "','Email': '" + $('#SignUpEmail').val() + "','Password': '" + $('#SignUpPassword').val() + "'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (msg) {
            //msg.d contains the return value from web service call
            $.colorbox.close();

            val = eval(msg);
            obj = jQuery.parseJSON(val.d);

            UpdateLogin(obj.Email, obj.FirstName);

        }
    });
    //ajax call ended
}

如何确保使用 jQuery AJAX 发送到 WebService 的数据是通过我的站点而不是某种攻击。

我对登录有类似的 ajax 调用,我将用户 ID 和密码传递给 Web 服务并进行身份验证。

有没有办法拥有一个一次性的请求响应令牌来确保它是一个有效的 Web 服务调用。

如果我的问题不清楚,请告诉我。

4

2 回答 2

2

您可以使用哈希键(只有您知道)实现轻量级 MAC-ing 机制

  1. 在每次调用 Web 服务之前n,将消息负载的第一个字节提供给哈希键并计算哈希值。
  2. 调用您的网络服务,在 http 标头中发送哈希值(我推荐使用授权标头,您可以创建自定义标头。
  3. 在您的 Web 服务中,在接受任何服务请求之前,您通过使用相同数据(即前 N 个字节)计算哈希值并与授权标头中的哈希值进行比较来验证消息的真实性。仅当值签出时才兑现请求。

这里有一点处理开销,它假设传输是通过安全线路进行的,否则,消息仍然可能被劫持。但是你解决了虚假电话的问题。

于 2012-10-09T04:12:19.867 回答
1

会话可能是解决此问题的最简单方法,具体取决于您的服务器框架。

登录成功后,在服务器上打开一个会话并设置一个值;在处理任何其他 Web 服务 API 之前检查会话值。

于 2012-10-10T03:25:04.097 回答