PHP密码字符串的清理处理

3

我有一个PHP页面,允许人们运行htpasswd来更新他们的密码。最好的方法是如何对他们的输入进行清洗。我不想太过限制输入,因为我想允许使用安全的密码。这是我的代码。如何改进呢?

$newPasswd = preg_replace('/[^a-z0-9~!()_+=[]{}<>.\\\/?:@#$%^&*]/is', '', $inputPasswd);
$cmdline = $htpasswd . " " . $passwd_file . " " . escapeshellarg($username) . " " .escapeshellarg($newpasswd);
exec( $cmdline, $output, $return_var );
2个回答

8

你是说如果我使用escapeshellarg,就不需要费心去删除坏字符了吗? - JonDrnek
Escapeshellarg函数将删除任何可能被shell解释的内容(或更改它,例如' => ')。我对htpasswd不是很熟悉,但这可以防止任何shell注入攻击。 - MiffTheFox

1

我不会使用 preg_replace 和空字符串处理 "危险字符",因为这会让用户误以为自己已经将密码更改为其他内容,但实际上执行了其他操作。因此,用户会将密码设置为与其输入不同的内容......最好向用户提供反馈,告诉他一些字符(最好捕获并显示有问题的字符)未通过验证。

除此之外,我认为它看起来相当不错。它为用户提供了广泛的可能性,他不需要比那些字符更多的内容来创建安全的密码。同时,告诉用户哪些字符可以在密码中使用也可能很有用,这样他就不必猜测了。


这实际上是插件的一部分,我有限的能力与用户交互。真实用户输入不良字符的可能性足够低,我愿意处理支持电话。 - JonDrnek
虽然我可能会让密码更改失败得更早一些... 我会研究一下的。 - JonDrnek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接