清理PHP密码字符串

时间:2009-06-12 12:49:05

标签: php security validation

我有一个PHP页面,允许人们运行htpasswd来更新他们的密码。什么是消毒他们的输入的最佳方法。我不想限制输入,因为我想允许安全密码。这就是我所拥有的。如何改进?

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

2 个答案:

答案 0 :(得分:8)

ecscapeshellarg函数内置于PHP,并且基于shell的系统不同以清理文本,因此不能将“不安全”字符传递给exec。

http://us2.php.net/manual/en/function.escapeshellarg.php

答案 1 :(得分:1)

我不会在“危险字符”上使用带有空字符串的preg_replace,因为这会让用户相信他将密码更改为某些内容,但是您执行了其他操作。因此,用户将密码设置为与他不同的密码投入...最好向用户提供反馈,告诉他某些角色(最好是捕获并显示有问题的角色)没有通过验证。

除此之外,我觉得它看起来还不错。我认为它为用户提供了广泛的可能性,并且他不需要创建安全密码。告诉用户密码中允许哪些字符也是有用的,这样他就不必猜测。