2010-01-15 156 views
2

我已经设计了登录页面,我已经使用以下资源登录页面安全性?

  1. 登录名和Passowrd拉布勒和文本框
  2. 组合框的多语言支持
  3. 提交按钮我们的网站之一。

现在,让这个网页更加安全,我打算用以下加分。

  1. CAPTCHA/RE-CAPTCHA
  2. 数量重试的:后3 unsuccessfull登录尝试块。

我见过通过访问其他网站,这些额外的东西。我想知道

  1. 这些extar点是否对安全性有一定影响?
  2. 我们应该如何实行重试次数?我们何时应该再次取消阻止用户帐户。

什么是正确的做法?

+1

为了安全起见,您最好的选择是TSL/SSL。无论您使用什么其他选项,都可以嗅探未加密的连接。 – 2010-01-15 06:20:29

回答

1
  1. 一般 - 需要强大的密码并限制登录尝试/用户(不是IP/cookie)。如果在三次失败之后为用户名添加五分钟锁定,则一次bruit force攻击将比您的网站生活花费更多的时间(因为您需要强密码,字典攻击是不可能的)*。

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

  3. http://en.wikipedia.org/wiki/Cross-site_request_forgery,也有你的服务器签名的cookie值,使cookie更加难以伪造。

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

  5. 中间人 - 最难防范的威胁,我猜测https是最简单的方法,但可信证书需要花钱。如果你今天自己签署用户,不要去看看它是否是正确的证书,这需要太多的用户形式。购买证书或希望你没有一个中间人。

我永远不会使用重新验证码登录,因为用户名锁定更有效,对用户来说更少干扰。虽然重新验证码有助于帐户注册,所以您不会拥有大量脚本帐户。

  • 限制登录尝试/用户名可以用来阻止用户登录。杂音力攻击仍然可用,因为它们可以攻击大量用户名,而不是唯一的一个,从而保持了极限/用户名下攻击块。但对于少数(少于10,000个)用户帐户的网站,您应该非常安全。
+0

我们如何处理大多数黑客打开多个浏览器并提供相同的有效帐户凭证的情况。 在这种情况下,CAPTCHA不需要吗? – 2010-01-18 08:56:48

+0

我真的不明白。如果具有有效凭证的用户(为什么称他为黑客?)从多个站点/浏览器登录,那么您想解决什么问题?你是否想限制,只有一个有效的会话/帐户?还是你害怕DoS攻击? – MyGGaN 2010-01-20 09:38:49

3

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

看看MSDN here,向下滚动到“使用SqlMembershipProvider的”一节。

1
  1. 如果您正在更新一个存在安全问题的现有网站,captcha不会受到伤害。如果它是一个新网站,是公开还是内部使用?如果遇到问题,您可以随时添加。如果存在敏感材料,那么在执行用户的强密码时(尽管这可能会让他们感到厌烦),您会比获得验证码(也很烦人)获得更多的里程碑。
  2. 这里有几个选项。您可以在每次尝试登录时记录IP地址并记录失败的尝试。第三次在15分钟内从相同的IP中失败,阻止进一步的尝试(每次尝试失败并锁定帐户信息)。其他尝试重置15分钟的“计时器”。真的,没有计时器,但每次尝试登录时,都会检查它在最近15分钟内是否被锁定的日志。

的登录尝试日志信息可以保存在许多方面 - 往往一个数据库表。有可能是在保持每次登录的记录值(万一有是有史以来违反),或者你只需​​要登录失败。从日志或者,您可以删除失败的登录,当用户成功登录。可能您从时间清理表的已经超过了等待期失败的登录记录时间数据库例程(15分钟,或者别的什么)。

显然15分钟是任意的 - 这可以是1分钟或24小时或直到用户调用你的客户支持线得到它复位。

+0

好吧,我正在为Esteban的答案投票。 – Jay 2010-01-15 06:28:41

+0

我曾经说过同样的事情,但是当他已经完成了这件事时,你会讨厌这个人实施整个事情,对吧? :) – 2010-01-15 06:56:36

+0

谢谢, 现在假设用户尝试3次错误的凭据,那么我们应该向用户显示什么消息? 我是否应该说,15分钟后尝试还是说一般信息? – 2010-01-15 07:24:38