登录页安全性?

时间:2010-01-15 06:13:16

标签: asp.net login

我为我们使用以下资源的网站设计了登录页面

  1. 登录名和Passowrd标签和文本框
  2. 多语言支持的组合框
  3. 提交按钮。
  4. 现在为了让这个页面更安全,我打算使用以下额外的点。

    1. CAPTCHA / RE-CAPTCHA
    2. 重试次数:3次登录尝试失败后阻止。
    3. 我通过访问其他网站看到了这些额外的东西。我想知道

      1. 这些极端点是否会对安全产生影响?
      2. 我们应该如何实施重试次数?我们应该何时再次取消阻止用户帐户。
      3. 什么是正确的方法?

4 个答案:

答案 0 :(得分:3)

您可以使用ASP.NET的登录控件和默认的SQL成员资格提供程序。如果这样做,在锁定用户之前实现重试次数就像设置配置值一样简单。

查看MSDN here,然后向下滚动到“使用SQLMemberShipProvider”部分。

答案 1 :(得分:2)

从AjaxControlToolkit(http://www.asp.net/AJAX/AjaxControlToolkit/Samples/NoBot/NoBot.aspx)查看NoBot控件。这提供了一些“机器人保护”,用户无需破译验证码。

答案 2 :(得分:1)

  1. 如果您要更新存在安全问题的现有网站,则验证码不会受到影响。如果是新网站,是公开还是内部使用?如果遇到问题,可以随后添加。如果有敏感的材料,你可以从强制使用强密码(虽然这对他们来说很烦人)中获得更多的里程,而不是你会从验证码中解脱出来(也很烦人)。
  2. 这里有几种选择。您可以在每次尝试登录时记录IP地址并记录失败的尝试。第三次失败来自15分钟内的同一IP阻止进一步尝试(每次尝试都失败并显示锁定的帐户消息)。额外的尝试重置了15分钟的“计时器”。实际上,没有计时器,但每次尝试登录时,都会检查日志以查看它是否在过去15分钟内被锁定。
  3. 登录尝试日志可以以多种方式存储 - 通常是数据库表。保存每次登录的记录可能是有价值的(如果 曾经是违规行为),或者您可能只想登录失败。 (可选)您可以在用户成功登录时从日志中删除失败的登录。您可以拥有一个数据库例程,可以不时清除超过等待期(15分钟或其他)的登录记录失败的表。

    显然,15分钟是任意的 - 可以是1分钟或24小时,或直到用户致电您的客户支持热线以重置它。

答案 3 :(得分:1)

  1. 常规 - 需要强密码并限制登录尝试/用户(不是IP / cookie)。如果在三次失败后为用户名添加五分钟锁定,则会导致攻击所需的时间超过您的站点所需的时间(因为您需要强密码,因此无法进行字典攻击)*。

  2. 保护您的用户 - 在您的表单中,不要以明文发布密码,发布散列版本,例如。 md5([您的域名] + [密码]) 添加域名的原因是为了保护服务器所有者(您)的密码哈希,因此如果您的用户数据库被黑客攻击,即使您的用户在多个站点上使用相同的密码,您存储的哈希密码也是无用的。如果你喜欢更强的哈希,你可以寻找一些SHA版本。在发送之前创建一个用散列密码替换密码的js脚本。请记住在注册页面上计算此哈希值,切勿以明文形式从浏览器发送密码。你不想知道它!

  3. http://en.wikipedia.org/wiki/Cross-site_request_forgery,也让您的服务器签署Cookie值,以使Cookie伪造更难。

  4. 加密 - 使用TSL / SSL或获取RSA脚本并使用服务器public_key加密表单数据。

  5. 中间人 - 最难以防范的威胁,我想https是最简单的方法,但可靠的证书需要花钱。如果你今天自签名的用户不愿意看看它是否是正确的证书,这对用户来说需要太多。购买证书或希望你没有中间人。

  6. 我永远不会使用重新验证码进行登录,因为锁定用户名更有效,对用户来说不那么令人不安。虽然重新验证码适用于帐户注册,但您最终不会拥有大量脚本帐户。

    • 限制登录尝试/用户名可用于阻止用户登录.Bruit force攻击仍然可用,因为它们可以攻击许多用户名而不仅仅攻击一个,从而将攻击保持在限制/用户名块下。但对于拥有少量(少于10,000个)用户帐户的网站,您应该非常安全。