我正在尝试保护一个即将移动到公共服务器的网站。我刚刚在我的所有登录脚本中添加了密码散列函数。我正在使用FormsAuthentication.HashPasswordForStoringInConfigFile(pw, method)
这样做。我对我正在使用的流程以及它是否对Web服务器安全有疑问:
这看起来对吗?我只是看不出盐在这种方法中是如何有效的...无论如何,我所做的只是加盐和哈希。这被认为是加密吗?或者我错过了一步?我记得读过像SHA1和MD5这样的散列算法不是加密算法,还有什么需要做的呢?
答案 0 :(得分:3)
这是正确的。盐用于防止彩虹表攻击,其中使用MD5散列的常用字典来尝试进入。使用salt可确保即使它们具有单词的MD5哈希值,也不会起作用,因为它们不知道盐。
MD5算法是单向散列算法,而不是加密值。不同之处在于,一旦您对值进行了哈希处理,就无法恢复到原始值。加密允许您解密数据并获取原始值。所以你是对的,它们不一样,你的密码没有加密,它们是经过哈希处理的。这意味着如果有人忘记了密码,则无法将密码发送给他们。您必须为他们提供重置密码的方法。这也意味着有权访问数据库的任何人都无法访问原始密码。这很好,因为很多人在任何地方使用相同的密码,如果你有权访问大量的用户名和密码,有人可能会决定开始尝试登录银行/信用卡网站。
您正在做的是推荐的做法。
答案 1 :(得分:1)
您不应该在会话中存储重试计数 - 攻击者可以在每次尝试后丢弃他们的会话cookie,允许他们根据自己的意愿重试多次。而是将其存储在用户记录中。