代码之家  ›  专栏  ›  技术社区  ›  bugBurger

ASP.NET PageMethods和JQuery AJAX Post的安全性到底有多高?

  •  4
  • bugBurger  · 技术社区  · 17 年前

    我有一个下面的场景,我真正期待的是来自真人的真正帮助。建议/解决方案?请

    我有一个ex.www.foo.com(asp.net 3.5)的外联网网站 我正在使用JQuery 1.3.2调用default.aspx页面(www.foo.com/default.aspx)中的ValidateLogin PageMethods

    代码如下所示

    $.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        url: "Default.aspx/ValidateLogin",
        data: '{' + arg + '}',
        success: function (data) {
            if (data.d != 0) {
                window.location = "http://www.google.com";
            } else {
                alert("Invalid UserName/Password.");
                ResetLoginForm();
            }
        },
        error: function (xhr, status, error) {
            var strerror = xhr.status + error;
            alert("Error Communicating with Server:" + strerror);
            ResetLoginForm();
        }
    });
    

    由于这个网站是公开的,任何人都可以下载default.js,因此可以查看上面给出的代码。

    我的问题是,一旦这个人得到这个url:“Default.aspx/ValidateLogin”,他就可以向服务器发出请求,服务器将自豪地响应该请求。

    我的选择是什么?如何验证请求?如何防止此类未经授权的请求?

    4 回复  |  直到 6 年前
        1
  •  4
  •   aleemb    17 年前

    Web请求本质上是公开的。他们甚至不需要查看源文件。他们可以简单地监视HTTP请求并重播这些请求(例如,使用fiddler之类的工具很容易)。

    节流问题

    解决方案

    典型的方法是使用nonce键。这将需要一些额外的工作,但它将缓解问题,只有在您真的预计到攻击或其他攻击时,才建议您这样做。这种方法的简化版本是,客户端将nonce键作为URI查询参数传递。密钥首先由服务器颁发给客户机。发出请求后,服务器将验证数据库中是否存在nonce密钥,并允许请求。它会立即删除nonce密钥,这样用户就不能使用相同的nonce密钥发出另一个请求,但服务器需要向用户发出更多的nonce密钥。

    简化的解决方案是只允许经过身份验证的用户发出web服务请求,但由于您正在设计登录系统,这显然不适用。

    我不会担心的,除非你有一些讨厌的对手。

        2
  •  1
  •   Ravi    17 年前

    就我个人而言,我不会费心让它变得更安全——正如其他人所说,web服务本质上是公共的。

        3
  •  0
  •   Chris Shaffer    17 年前

    我想说没有问题;但是,您可能想做一些工作 Rate Limiting 所以人们不能尝试用暴力强迫它。

        4
  •  0
  •   Vikram    17 年前