【发布时间】:2015-05-22 09:06:34
【问题描述】:
我正在开发一个网站,以了解有关 Web 编程的更多信息,并作为一家初创公司推出。我遇到的第一个问题是如何实现一个安全的登录系统。目前我已经采取了一些步骤,比如转义密码,然后使用盐对其进行哈希处理。但我想知道以下机制是否安全,
- 我会让用户输入用户名,并会继续检查用户是否输入了他的用户名(当文本框失去焦点或提交用户名的按钮时,也为了防止用户名列表通过在系统上设置 cookie 来阻止用户,如果多个进行了错误的尝试,或者可能对每个错误都使用了验证码),一旦输入了用户名,就会将随机存储的盐发回给用户。
- 使用输入的盐和密码,用户将对密码进行哈希处理并以表单形式发送
- 我将通过比较哈希来验证密码
我认为这将是有益的,因为服务器端我不必做任何处理,因此我不必担心 DoS 攻击,因为我在某处读到使用像 BCrypt 这样的慢速哈希会暴露网站DoS 攻击。 此外,用户的密码永远不会通过网络进行通信,从而防止有人嗅探网络。
请给我一些参考或任何可以帮助我安全实施的东西。考虑我是菜鸟,因为我仍然开始学习,想知道您对此有何看法,可能存在哪些缺陷?以及什么必须是安全的策略。
更新- 我得到了很多答案,通常都假设我认为这是 SSL 的替代方案;不,事实并非如此。防止嗅探是指保护,以防某些攻击者可能让用户使用 SSL 代理。 仅供参考 - https://security.stackexchange.com/questions/19616/why-is-it-possible-to-sniff-an-https-ssl-request
【问题讨论】:
-
是什么让您认为自己不会受到 DoS 攻击,仅仅因为您在客户端而不是服务器端对密码进行哈希处理?
-
为什么您认为用户不会简单地删除您用来阻止多次失败尝试的 cookie?
-
你不应该在浏览器中散列,这就是几年前phpbb遇到麻烦的原因,因为当你到达另一边时你必须对散列进行散列,而双重散列实际上可以使密码更可预测。无论如何,哈希密码相当于原始密码。
-
如果您只是学习 Web 开发并且想要生成一个实际工作的应用程序身份验证,而这很难正确执行,那么这不是一个好的开始。使用一个框架,如果你想学习研究优秀的 php 开源应用程序是如何做到的,但我敦促你不要尝试自己真正实现它。如果只是为了学习,可能但即使在那里,您如何从专家那里获得认真的代码审查?
-
指望没有人来打扰你,因为你没有使用框架,这忽略了一个事实,即来自你认识的人的威胁是特别危险的。如果您认为您不必重新对服务器端进行哈希处理,那么您就不明白任何人都可以查看您的数据库并知道要输入什么密码。 stackoverflow.com/questions/348109/…stackoverflow.com/questions/8611050/…owasp.org/index.php/How_to_write_insecure_code