AJAX检查用户名功能的安全性

时间:2012-05-11 14:49:47

标签: ajax security username

我们的注册表单上有一些功能,它使用AJAX调用来检查用户名是否可用。

这是非常直接的

  • 拨打我们的服务
  • 根据数据库检查用户名
  • 如果找到了用户名记录,则返回,否则返回。

一旦用户停止输入几秒钟,我们就会执行对我们服务的调用。

然而,我们的问题是,攻击者可以在我们的服务上使用某些暴力手段并编译我们所有用户名的列表。

有谁知道有什么好方法可以帮助防止这种“攻击”?

我能想到的唯一一个就是要求获得Captcha,但这不是一个好的用户体验,可能会让人们填写表格。

如果它有帮助,我们使用的是ASP.NET MVC,C#,SQL Server。

非常感谢任何帮助,谢谢!

3 个答案:

答案 0 :(得分:1)

我认为最好的方法是对其进行速率限制,方法是允许用户仅提供一定数量的请求,或者在每个请求上添加0.5-1秒的等待时间。通过执行其中任何一项操作,攻击者在合理的时间内枚举相当数量的用户名将变得更加困难。

我认为更好的保护应用程序的方法是将其视为每个人都已拥有用户列表并从那里开始工作。假设攻击者知道您的所有用户,您将如何防范暴力攻击?通过限速密码尝试。通过每10分钟左右只允许几次密码尝试,您将大大保护应用程序的用户。

我个人认为所有不明显的密码(例如“密码”和“qwerty”)都应该是安全的 - 例如,“soccerfan”应该是一个安全的密码。为什么?因为你不会马上猜测“soccerfan”。它可能是你的蛮力词典中的第100个左右,当他们猜到试图以接近该数量的任何地方登录时,他们应该被禁止并且用户应该被通知。 (顺便说一下,我并不是说人们应该使用这样的密码,越复杂越好)。

答案 1 :(得分:1)

你可以检查ajax请求来自同一个来源,并在那里加上某种节流,你也可以签署请求。

通过限制,我的意思是例如一个IP地址每天最多允许10个请求。

答案 2 :(得分:1)

另一种方法是让客户端计算需要几秒钟的东西。

在服务器端,可以使用非常少的CPU资源检查计算值。并且只有在客户端计算的结果正确时才会处理请求。

此类算法称为Trapdoor functions