假设情况:您已经实施了密码处理系统,并且不会对可以使用的字符施加任何限制。你想建立一些在两件事之间合理妥协的规则 -
你会施加什么规则?还有其他因素会影响您的选择吗?
答案 0 :(得分:13)
永远不要施加任何限制。在我看来,你计划存储密码,而不是哈希。不要这样做。而是存储salt并散列密码和所述盐的组合。
但是,您可以通过对长度(例如,不少于6个字符)和构成密码的字符(例如,它应包含小写和大写字母字符)施加限制来要求您的用户拥有相当强的密码,一个或两个数字和几个非字母字符,如^或#)。
答案 1 :(得分:8)
最好没有任何限制,除非你能证明他们的合理性。
如果您是银行,电子邮件提供商,或者如果用户可以在不提供信用卡的情况下订购某些商品,那么强制用户使用强密码是有道理的。否则,你只是无缘无故地努力。
至于你应该存储什么,我会说禁用控制字符的1024个unicode字符是关于所有这些是合理的。如果用户无法输入,则应选择不同的密码。您存储的所有内容都是哈希值,因此您可以随时将其缩小到您想要的任何大小。
答案 2 :(得分:2)
任何非控制角色应该没问题。我认为未来超级密码系统的开发人员会允许“不寻常”的ASCII字符,如标点符号和其他标记,但控制字符有一种习惯,就是难以进入文本模式shell,甚至是期望Tab的GUI对话框和Enter / Return为自己的目的是免费的。
答案 3 :(得分:2)
空白区域(基于在被散列之前可能被意外修剪的逻辑)
答案 4 :(得分:2)
密码没有限制。如果他们可以从键盘输入,无论他们使用什么区域键盘。您可能希望施加最小长度,例如至少一个数字和一个特殊字符,但没有最大限制。
关于你的第二个问题。我实现它的方法是通过制作单独的字段来提高密码强度。例如,现在您将有两个与密码相关的字段:salt,password_md5。让我们稍后说你想使用sha256。创建一个名为password_sha256的新字段。当用户登录时,请先检查password_sha256。如果该字段为空,请检查password_md5。如果匹配,您现在拥有用户输入的纯文本密码。然后,您可以生成sha256密码(我还会重置盐以获得良好的测量值)并存储新值。然后我会在password_md5中删除该值,因此没有人可以反转它来获取密码。
就个人而言,我只会使用您的语言可以做的最佳哈希并使用它。重要的是强制执行一个良好的最小密码策略 - 当密码为“1234”时散列的安全性无关紧要 - 并且使用一些随机字符对散列进行播种以避免字典攻击。
答案 5 :(得分:1)
我个人一直热衷于不执行太多规则。
这刚刚改变了。我刚发现我的网站容易受到XSS攻击。解决方案是清理来自用户的每一条输入,包括密码。
10年来,我们对密码没有限制。 现在我们正在对可以使用的字符实施限制,这只是为了阻止黑客能够访问Javascript或SQL。所以我们构建了以下列表:
密码的有效字符为:a-z A-Z 0-9。 - _ $ *()#@! %/(空白)
这允许很多灵活性但避免可能用于编码XSS hack的字符,例如; < > \ {} [] + =? &安培; ,:''`
HTH
答案 6 :(得分:0)
除了标签外,我会用键盘上的一个键(以及可选择的移位)保留任何内容。什么样的计划需要更严格的选择?
答案 7 :(得分:0)
让用户输入的密码至少包含一个数字和一个非字母数字字符,且长度超过六个字符。无论如何,我认为无论有什么限制,如果你改变验证密码的方式,你应该在合理的时间内通知用户更新他们的密码。
答案 8 :(得分:0)
在我们的组织中,如果用户提供密码,我们允许他们使用他们想要的任何内容。
当用户首次注册系统时,会为他们生成密码。由于此密码通常会邮寄给他们,因此我们避免使用某些可能会混淆的字符,特别是在使用某些字体时。例如,不使用字母O和数字0(零)。 L,I和1(一),S和5,Z和2等都是相同的。
在我们进行此项更改之前,我们向服务台打了很多电话,因为我们混淆了他们无法登录的字符。
答案 9 :(得分:0)
就个人而言,我使用的是DigitalPersona的指纹键盘(是的,微软确实[或者做过]制作类似的设备,无论是与键盘集成还是与键盘分开)。
这样可以生成非常长且复杂的密码,这些密码不必写下来(因为在阅读器上按下手指会将密码提供给登录对话框[系统/应用程序/网站])。
在我看来,这提供了两全其美:极难“猜测”密码,而不必记住密码。它还简化了在不同系统上使用不同密码的额外安全建议。
嗯,这是我的2美分价值。
答案 10 :(得分:-1)
要遵循的一些规则:
答案 11 :(得分:-3)
我建议执行的规则: