【问题标题】:Allowing spaces in passwords允许密码中有空格
【发布时间】:2012-01-16 01:21:40
【问题描述】:

我正在编写一个 php 脚本,我想知道是否应该在用户密码中允许空格。我正在使用sha1() 对密码进行哈希处理,而且它似乎可以很好地处理包含空格的密码。但是,我注意到许多主要网站不允许密码包含空格。这是有原因的还是允许他们这样做?

【问题讨论】:

  • 拒绝空格没有实际的安全理由。这个限制是几十年前写得不好的系统的一个毫无意义的遗产,只会阻止人们使用更容易记住的密码短语。让人们随心所欲地使用。
  • 你应该允许空格。您还应该允许 -- 真正鼓励 -- 使用密码短语。你可以享受this xkcd。哦,请使用 bcrypt 或 scrypt,或者更好的是,使用可以完成所有工作的现有库。 (普通的 sha1 不足以提供密码,而且太容易暴力破解。)
  • 别忘了给这些密码加盐!
  • 当我指出这样做是可以的(事实上,preferable)时,根据我通常从各家公司得到的回复,我认为可以安全地假设他们这样做的原因是惹恼他们的用户。
  • @JonathanNewmuis GMX 和 cPanel 是两个不允许密码包含空格的“主要网站”示例。

标签: php passwords


【解决方案1】:

您应该绝对允许密码中有空格。许多人更喜欢使用密码短语,而禁止使用空格会让他们的生活变得艰难而没有任何好处。

除了允许使用密码短语而不是密码之外,您还应该鼓励它们,因为它们是 more secure(好吧,我承认我写这篇文章的一半原因是为了放入 xkcd 链接)。

【讨论】:

  • +1 另外,空格被认为是特殊字符,被认为更安全。
  • 特殊字符与常规字符相比并没有真正的好处。鼓励他们,因为他们扩展了字符空间(可能性/组合的数量)。
【解决方案2】:

绝对没有充分的理由限制用户可以在密码中使用的字符。永远。

【讨论】:

    【解决方案3】:

    我不明白为什么会有。如果它不会对您的实现造成任何问题(它不应该),它所要做的就是将可用字符空间扩大 1,并使破解变得更加困难。

    【讨论】:

      【解决方案4】:

      只要您的散列机制能够每次都对它们进行相同的散列,限制密码中允许的字符是没有意义的。例如,如果您打算从使用不同字符编码的系统中进行密码检查,例如在 PHP 中对密码进行哈希处理并尝试在 Java 中进行检查,您可能不想对多字节字符进行哈希处理。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-22
        • 2015-10-19
        • 1970-01-01
        • 2017-06-01
        相关资源
        最近更新 更多