2009-11-28 35 views
1

使用登录系统 - 客户选择密码进行站点访问的点。限制用户密码字符集

除了使用RegEx确保密码足够强大之外,通常在我们的系统上,所有将在数据库中结束的数据都会针对注入进行检查等,并在所有字段上强制执行合理的限制字符集。我并不想为密码设置一个特别限制的字符集,因为我认为这太过于控制它的安全性。

在密码的情况下

不过,我会用盐腌SHA-512散列反正它插入其中提出的问题了一把:

  • 是否有任何一点在任何限制的字符设置客户可以在密码中使用 - 也就是说,我是否暴露了任何我认为会被哈希完全绕过的注入之外的漏洞?

  • 必须有一个否定的允许所有的方法 - 我能想到的事实是,在未来什么是无辜的组合现在可能会变成一个危险的组合 - 是一个真正的关注,并有其他人我可能错过了?

  • 是否有任何必须被拒绝的字符/字符串 - 他们会通过本机ASP.NET保护吗?

  • 可能有点更主观,但鉴于它是一个SHA-512散列 - 有没有限制用户可以选择的密码的最大长度(在合理的参数范围内),假设密码的大小/复杂性可能会引发警告,确认他们确实想要设置它。

感谢您的帮助。

编辑:这是一个ASP.NET Web应用程序使用ADO.NET(而不是LINQ/EF)访问MSSQL2008数据库。

回答

1

没有理由担心SQL插入攻击,除非您实际上以纯文本方式将密码插入数据库(危险,威尔罗伯森,危险!),即使如此,如果您参数化查询它不会一个问题。你应该允许[a-zA-Z0-9]加上一些特殊字符。可能唯一限制的字符是'<',这将触发ASP.net验证警告。有很多有趣的工具可以在客户端进行密码复杂性检查。我喜欢this one。它提供了一些即时反馈给用户,因为他们正在打字。

3

从非英语的角度来看 - 密码应该没有限制。

例如,为什么限制日语讲话者使用US-ASCII字符集?为什么法语演讲者不会使用重音字符?

鉴于你的哈希是正确保存的,没有技术上的理由限制它。

+0

谢谢 - +1引起我的注意国际字符。 – Chris 2009-11-30 20:40:24

1

由于密码被散列,它将以十六进制格式存储在数据库中。因此,我看不出限制允许字符的类型。如果我想在密码中使用中文字母,我应该可以这样做。如果我已经安装了Firefox的扩展程序,它会生成随机字节并将其用于我的密码,我应该可以这样做。这里的教训是不限制用户的密码。

另请注意,RegEx具有能够检测用户是否使用过任何语言字母的unicode支持。当您验证密码的强度时,这可能会变得方便。