我最近读的一篇博文(伯乐在线注:请看本文最后),是关于强制使用更复杂的密码。原作者说这是为了更安全,但我认为这些技术不是最好的方式,比起「实用」来说,显得很麻烦。

问题

你想实施更安全的密码,我懂。但是,

请停止强迫我使用你那糟糕的密码规则 :(

不让这篇文章那么严肃,我在试图做到这一点。我只是因为那篇文章有了灵感写下我的想法,不是针对作者。总之我是在和每一个在自己的网站和服务器使用这些密码规则的人讲话。我讨厌这些类型的规则: 'password' => [ 'required', 'confirmed', 'min:8', 'regex:/^(?=S*[a-z])(?=S*[A-Z])(?=S*[d])S*$/',];

密码必须包含 1 个大写字母,1 个小写字母和数字。

有了这样的一个规则,密码 Abcd1234 会通过你的有效性检测,但是 mu-icac-of-jaz-doad 不会。

我知道你大概是想让人们使用随机字符密码,像 i%Mk3c4n,但是你的规则实际上并没有这样执行,这些密码是个麻烦事而且不安全,除非它们足够长——使得它们成为更麻烦的事。打出这些密码很痛苦,尤其是在那些你没有安装密码管理器的手机和计算机上。

其次,使用不安全密码的人依旧会使用愚蠢的密码(比如 Loverboy1964),所以你没有帮助任何人。

停止强迫我使用你专制的规则并鼓励其他人这么做——我的密码是更好呢。

例子

那位博主允许使用的 2 个密码:

下面这两个是那位博主不允许使用的密码:

解决方案

我不知道,但是如果你真的想要执行一些比此列表上的密码更安全的东西,那就不要强制不必要的复杂模式。你的验证规则,还是会让人继续用的原密码中的大部分,只是增加一个大写字母,或两三个数字。

(注1:此处提到的密码列表,里面都是 123456 、password、qwerty 之类的「愚蠢密码」)

相反,为什么不提高密码所需的最小长度,禁止 3 位或更长的数字序列 /[0-9]{3,}/?

你可以在那之后往前走一小步,不允许同样的字符在一行(相邻)重复两次以上 /(.)1{2,}/,而且还没有太多的麻烦。

这将消除大部分的困扰,并不会不必要地限制您的用户密码选择。

更新

更好的是,为什么不忘记所有这些规则,只使用一个最小密码强度要求。

来自 reddit 网友 sarciszewski 的建议:

我不明白为什么那么多人不用 Zxcvbn。 https://github.com/dropbox/zxcvbn

https://github.com/bjeavons/zxcvbn-php

我们并不特别关心你的密码包含了什么,只要密码强度估计量足够好就行。想要用2000个’A’构成一个ASCII penis来检测,zxcvbn 不会提醒你密码不包含小写字母不能使用而让你失望。

相关漫画

密码强度 (xkcd)

《在 Laravel 中强制复杂密码的建议》(英文原文)

根据简单优雅的 Laravel 文档,我将快速介绍如何促进用户使用更好的密码。通过 Authentication 的标准文档,我们用一个注册表单来说明。在 Laravel 的 AuthController 中,我稍作了修改。

(伯乐在线补注:Laravel 是一个 PHP Web 开发框架。) protected function validator(array $data) { $messages = ['password.regex' => "Your password must contain 1 lower case character 1 upper case character one number"]; return Validator::make($data, [ 'name' => 'required|max:255', 'email' => 'required|email|max:255|unique:users', 'password' => 'required|confirmed|min:8|regex:/^(?=\S*[a-z])(?=\S*[A-Z])(?=\S*[\d])\S*$/', ], $messages); }

使用文档 http://php.net/manual/en/function.preg-match.php 和 Laravel 文档的正则表达式规则,我可以设置一个表达式来检查这些字符,我还可以设置一个自定义消息如果失败。

通过这些微小的工作我们可以用一个错误消息来帮助用户设置更好的密码。

关于作者:LynnShaw

微博:@萧萧萧宁 个人主页 · 我的文章 · 25

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

php密码复杂,不要再强迫我设置复杂密码相关推荐

  1. 苹果计算机取消用户名和密码进入不,苹果电脑怎么设置不用密码开机

    Q7:苹果电脑怎么取消开机密码? 每次开机都需要输入密码麻烦,而有时候又需要开机密码保证电脑的安全,那么我们该如何设置和取消mac系统的开机密码呢?且往下看,希望对君有用,记得投票哟!取消开机密码1 ...

  2. 设了用户密码怎么打开计算机,电脑如何设置开机密码,教您如何设置电脑开机密码...

    自己的电脑都有私人属性,因此不希望别人看到,别人乱动自己的电脑,那么有什么拌饭可以办到呢?设置开机密码即可?怎么设置?目前来说还是有很多人不知道怎么给我们的电脑设置开机密码,下面,小编就来跟大家分享设 ...

  3. 设置计算机访问权限密码忘了怎么办,电脑上设置的密码忘记了怎么办

    很多人在设置电脑的登录密码老是会忘了密码是什么导致开不了机.下面由学习啦小编为大家整理了电脑上设置的密码忘记了怎么办的相关方法,希望对大家有帮助! 电脑上设置的密码忘记了的解决方法和步骤 情况一.非超 ...

  4. linux mysql 没有密码忘记,在linux系统中,如果忘记了MySQL的root密码,有没有办法重新设置新密码呢?...

    1.编辑MySQL配置文件my.cnf vi /etc/my.cnf #编辑文件,找到[mysqld],在下面添加一行skip-grant-tables [mysqld] skip-grant-tab ...

  5. Ubuntu18.04设置root密码(初始密码)

    Ubuntu18.04设置root密码(初始密码) ubuntu 默认的 root 用户是没有固定密码的,它的密码是随机产生并且动态改变的,即每次开机都有一个新的 root 密码,如果想查看 root ...

  6. 修改创维机顶盒服务器信息,广电机顶盒如何设置修改密码

    原标题:"广电机顶盒如何修改密码"的相关路由器设置教程资料分享.- 来源:191路由网. 由于怕大家忘记密码又不会自己更改,广电工作人员在安装的时候一般不会更改用户的WIFI密码, ...

  7. linux登录grub是什么,linux 如何单用户登录和设置grub密码Linux -电脑资料

    linux 如何单用户登录和设置grub密码 如何单用户登录和设置grub密码 如"kernel /vmlinuz-2.4.18-3 ro root=/dev/hda2", 再按e ...

  8. Linux常用命令(中)、时间日期类、date 显示当前时间、ntpdate命令、cal 查看日历、useradd 添加新用户、passwd 设置用户密码、id 查看用户是否存在

    文章目录 1.3 时间日期类 1.3.1 date 显示当前时间 1.3.2 date 显示非当前时间 1.3.3 date 设置系统时间 1.3.4ntpdate命令 ntpdate常用服务器 国内 ...

  9. 如何设置电脑自动锁屏_工信部重要提醒:赶紧设置这个密码!手机丢时也不怕损失!...

    点击上方"蓝字",关注了解更多 最新消息 近日,有舆论报道反映,不法分子偷盗个人手机后,在某政务APP窃取用户个人信息,进而申请网贷消费造成用户财产损失的情况.工信部近日发布消息, ...

最新文章

  1. P2387 [NOI2014]魔法森林
  2. python布尔测试对象_面试题十九期-测试开发面试题之python系列-这个中~
  3. UOJ#272. 【清华集训2016】石家庄的工人阶级队伍比较坚强
  4. c++成员函数可以将this传递给普通函数
  5. TreeView控件之,后台构建TreeView(WinForm小程序)
  6. 浮点数赋值给整数_初学者专题:变量和赋值
  7. JavaFX UI控件教程(二十四)之Password Field
  8. python安装pyqt4_windows下安装PyQt4
  9. 电脑4次连续故障音_格力空调电子膨胀阀故障判定与“E6”处理方法
  10. dj鲜生-35-设置django的session使用redis来存储
  11. 检查已终止。收集事实数据时检测到错误
  12. 一般服务器显示闪存多少合适,现在服务器一般内存多大合适
  13. 1062. Talent and Virtue (25)-PAT甲级真题
  14. jquery获取复选框checkbox的值
  15. ajax 图片加载不出来,jQuery.lazy()插件不能处理通过AJAX加载的图像
  16. 学编程脚本 android,Android开发之--脚本编程
  17. 计算机应用软件弹窗消除,怎么去掉电脑弹窗广告?这几种方法教你轻松解决
  18. windows WinExec()
  19. 亚马逊aws 服务器删除_亚马逊aws服务器免费套餐及被扣款怎么办
  20. Golang 期权 指标计算

热门文章

  1. 退出python交互模式_python如何退出交互模式
  2. PIC单片机精通_A/D模数转换模块细节补充
  3. 超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大
  4. 改变TPageControl的活动标签颜色
  5. 常用的开源视音频解码软件库
  6. CentOS8下安装docker
  7. 日常生活 -- 开博一周年
  8. hdu-2209 dfs
  9. 汇编语言布尔表达式(NOT、AND、OR)
  10. Creating a Java VM from Android Native Code