Javascript 用于验证特定条件的密码的正则表达式
我期待有一个符合以下标准的regx模式: 验证/要求该字段包含Javascript 用于验证特定条件的密码的正则表达式,javascript,regex,Javascript,Regex,我期待有一个符合以下标准的regx模式: 验证/要求该字段包含 混合情况 最小长度为10个字符 最大长度为16个字符 存在2个数字(最少) 存在2个α(最小值) 1个特殊字符(最小值) 允许的特价:!\* 其他特殊字符应被拒绝 所有字符必须是非连续的 没有重复,例如“alittle1A!”将无效,因为它有“tt” 任何帮助都将不胜感激 到目前为止,我已经开发了: var passwordPattern = /^(?=.*\d{2})(?=.*[a-z]{2,})(?=.*[A-Z]{2,})(?
混合情况
最小长度为10个字符
最大长度为16个字符
存在2个数字(最少) 存在2个α(最小值) 1个特殊字符(最小值) 允许的特价:
!\*代码>
其他特殊字符应被拒绝
所有字符必须是非连续的
没有重复,例如“alittle1A!”将无效,因为它有“tt”
任何帮助都将不胜感激
到目前为止,我已经开发了:
var passwordPattern = /^(?=.*\d{2})(?=.*[a-z]{2,})(?=.*[A-Z]{2,})(?=.*[^a-zA-Z0-9]{2,})(!#.\*)\1?(?!\1).{10,16}$/;
这好像不管用 您可以使用此正则表达式:
/^(?=(\D*\d){2})(?=([^a-z]*[a-z]){2})(?=[^!#.*]*[!#.*])(?!.*?(.)\1)[a-z0-9!#.*]{10,16}$/i
您可以使用此正则表达式:
/^(?=(\D*\d){2})(?=([^a-z]*[a-z]){2})(?=[^!#.*]*[!#.*])(?!.*?(.)\1)[a-z0-9!#.*]{10,16}$/i
您不应该限制密码中允许的字符,除了最小长度之外。您无法强制用户选择安全密码。您所能做的就是确保您拥有一个安全的系统,该系统不会被单个受损的用户帐户削弱
切勿传输未加密的明文密码
永远不要存储明文密码
在用户进行“我忘记了我的密码”歌舞表演时,切勿向用户发送其现有密码——重置密码并向其发送一次性使用密码(仍然存在风险),或使用令牌系统允许用户通过单击链接登录,并确保在登录时强制用户设置新密码
如果您遵循这些规则,那么就没有理由不能使用特殊字符——哈希和盐渍密码无论如何都不会包含这些字符,因此即使是数据类型或字符集限制在这一点上也是无效的
以下是一些相关的问题/答案,说明为什么您的建议没有帮助,实际上可能有害:
小结:这样做完全是随意的,对安全性没有影响
总结:这相当于程序员的懒惰,或者密码能否以安全的方式存储或正确处理的不确定性
?
摘要:限制长度可以限制哈希时间
总结:懒惰的程序员
摘要:密码限制非常烦人
这里有一个建议--在此处测试一些符合您的限制的密码:
完成此操作后,请将这些密码的“安全性”与以下几种密码进行比较:
您可能还希望研究双因素身份验证(因为最终,即使是安全的密码系统也不是真正安全的):
除了最小长度之外,您不应该限制密码中允许的字符。您无法强制用户选择安全密码。您所能做的就是确保您拥有一个安全的系统,该系统不会被单个受损的用户帐户削弱
切勿传输未加密的明文密码
永远不要存储明文密码
在用户进行“我忘记了我的密码”歌舞表演时,切勿向用户发送其现有密码——重置密码并向其发送一次性使用密码(仍然存在风险),或使用令牌系统允许用户通过单击链接登录,并确保在登录时强制用户设置新密码
如果您遵循这些规则,那么就没有理由不能使用特殊字符——哈希和盐渍密码无论如何都不会包含这些字符,因此即使是数据类型或字符集限制在这一点上也是无效的
以下是一些相关的问题/答案,说明为什么您的建议没有帮助,实际上可能有害:
小结:这样做完全是随意的,对安全性没有影响
总结:这相当于程序员的懒惰,或者密码能否以安全的方式存储或正确处理的不确定性
?
摘要:限制长度可以限制哈希时间
总结:懒惰的程序员
摘要:密码限制非常烦人
这里有一个建议--在此处测试一些符合您的限制的密码:
完成此操作后,请将这些密码的“安全性”与以下几种密码进行比较:
您可能还希望研究双因素身份验证(因为最终,即使是安全的密码系统也不是真正安全的):
这种验证是否不会在后端发生?如果不是,它真的应该这样做。没有什么能阻止一些精通JS的用户提交表单并绕过您的验证。另外,您是否有特殊原因不能在密码中使用任何字符?无论如何,在将密码传递给服务器之前,您应该在客户端对密码进行哈希和盐析,否则您只会招致攻击。仅供参考:通过实施这些限制,密码的强度实际上被削弱了。还有……我为任何需要在这个系统中使用人工密码的人感到非常抱歉:(这里是你实施密码限制的唯一原因:@Adrian-最佳做法是在两个地方都这样做。后端这样做是出于安全原因(例如,正如你所说,黑客可以绕过JS验证)前端这样做是为了获得良好的用户体验……强迫用户坐着完成服务器请求并重新加载页面以进行您可以轻松(立即)完成的格式检查,这根本不是一种好的体验在前端。@talemyn-但是,对密码中包含的字符进行验证的唯一方法是以明文形式访问密码。在任何情况下,密码都不应通过任何连接以明文形式传输,即使是“安全的”一、密码在任何时候都不能以明文形式存储,也就是说,以防发生明文传输