ASP.NET PageMethods和JQuery AJAX Post - 它到底有多安全?

时间:2009-05-01 19:48:57

标签: jquery ajax security asp.net-3.5 pagemethods

我有以下情况 - 而我真正想要的是来自真人的真正帮助。建议/解决方案?请。

我有一个外联网网站。 www.foo.com(asp.net 3.5) 我在default.aspx页面(www.foo.com/default.aspx)中使用JQuery 1.3.2调用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();
            }
        });

代码存储在外部js文件中。对于ex default.js。

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

我的问题是,一旦此人获得此网址:“Default.aspx / ValidateLogin”,他就可以向服务器发出请求,服务器将自动响应请求。

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

4 个答案:

答案 0 :(得分:4)

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

限制问题

限制解决方案确实不可行,尽管它们会降低攻击率。问题是攻击者可以编写一个运行一天的脚本。然后,他可以使用代理发送并行请求。如果您按用户名限制,他们可以通过尝试在合法用户名上进行虚假登录来实现DoS,当实际用户尝试登录时,他将无法知道他被锁定的原因。

解决方案

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

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

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

答案 1 :(得分:1)

我假设你已经暴露了你的Page方法加载会话,所以我猜你可以在页面加载时设置一个会话变量,然后在调用页面方法时检查它是否存在。它不是世界上最安全的东西,但它会有所帮助。

就个人而言,我并不打算让它变得更安全 - 正如其他人所说的那样,网络服务本质上是公开的。

答案 2 :(得分:0)

我说没有问题;但是,你可能想做一些Rate Limiting,所以人们不能尝试强制它。

答案 3 :(得分:0)

你也可以在2-3次登录失败后放置验证码,这样可以避免蛮力。