【发布时间】:2021-07-31 16:28:13
【问题描述】:
我正在开发一个 wordpress 网站(我是网络开发的新手)。我安装了一个主题,现在我正在寻找改进它并使其适合我的需求。关于注册表单,主题检查密码中无效字符的代码是这样的:
else if(preg_match("/^([a-zA-Z0-9@#-_$%^&+=!?]{1,20})$/", $data['user_password'])==0) {
SendtoUSER::$messages[]=__('Forbidden characters detected', 'mytheme');
用户名是这个
if(preg_match('/[@\s]/', $username)) {
$valid=false;
}
我做了一些研究,我理解"/^([a-zA-Z0-9@#-_$%^&+=!?]{1,20})$/" 的大部分表达 - 我不明白为什么;仍然可以使用(我观察到从工作中删除#-_prevents ;,所以#-_ 是一个反转?)我的问题是@#-_$%^&+=!? 在表达式中的含义是什么?这段代码是否足够好,有哪些好的做法可以实现 preg_match 以实现最大安全性?提前感谢您的回复。
【问题讨论】:
-
“有哪些好的做法可以实现 preg_match 以获得最大安全性?”不。限制密码中的字符会降低安全性。
-
好的,很高兴知道。另外,我害怕格式错误的字符串:)
-
我同意@ceejayoz 的观点,即您永远不应该费心限制用户在密码中使用字符集,而是对密码长度施加最小的下限。所以不要使用少于 8 个字符的密码是一个好习惯。但是,使用不超过 20 个字符的密码是不好的。此外,机密安全的关键是可预测性,因此大多数网站都提供某种形式的基数指示器,以保持用户对其密码安全性的看法。以password meter 为例。
-
@VreauCutitul 恶意密码字符串应该无关紧要,因为它们永远不会显示,并且它们存储为哈希(使用
password_hash函数),而不是原始密码。