代码之家  ›  专栏  ›  技术社区  ›  Andrew Harry

Ajax安全问题:动态提供可用用户名

  •  1
  • Andrew Harry  · 技术社区  · 17 年前

    我想允许在用户键入时验证用户名(根据下面链接的相关问题)

    这很容易。 但这样一个功能的安全含义是什么?

    我如何避免人们滥用这个来确定有效用户名的列表?

    一些相关问题: 1 , 2

    5 回复  |  直到 9 年前
        1
  •  3
  •   UnkwnTech    17 年前

    为了防止在我的一些内部ajax内容上出现“恶意”活动,我添加了两个GET变量,一个是日期(通常是纪元),然后我将该日期添加一个salt并将其删除,还发布了一条消息,如果日期(重新刷新时)与哈希不匹配,那么我会删除请求,否则会实现它。

    使用基于IP/cookie的限制的问题是两者都可以绕过。 使用具有良好的、加密性强的salt(比如Steve Gibson的一个“完美密码”)的令牌方法 https://www.grc.com/passwords.htm )这将需要大量的时间(几十年的规模)才能可靠地预测该方法,并确保一定的安全性。

        2
  •  0
  •   Jason    17 年前

    您可以将请求的数量限制为每10秒2次左右(真正的用户可能会输入一个使用过的名称,稍加修改,然后重试)。有点像这样,你不会每30秒评论一次以上。

    如果你真的很担心,你可以采用上面的方法,计算他们在某个时间段内尝试了多少次,如果超过了阈值,就把他们踢到另一个页面。

        3
  •  0
  •   SeanJA    17 年前

    验证为:“此用户名已被使用”?如果您限制每秒的请求数,应该会有所帮助

        4
  •  0
  •   msingleton    17 年前

    解决这一问题的一种常见方法是在请求中添加延迟。如果请求被发送到服务器,请等待1(或更长)秒进行响应,然后使用结果进行响应(如果名称有效或无效)。

    增加一个时间限制并不会真正影响到用户不去尝试抓取,而且你可以免费获得每分钟60个请求的限制。

        5
  •  0
  •   Cais Manai    14 年前

    基于UnkwnTech提供的答案,这是一些非常可靠的建议。

    您可以更进一步,让客户端执行一些计算来创建返回哈希-这可能只是一些简单的算术运算,比如对一些数字进行子运算、添加数据并乘以2。

    添加的arithmatic确实意味着开箱即用的用户名抓取脚本不太可能工作,并迫使客户端使用更多的CPU。