我有一个PHP页面,允许人们运行htpasswd来更新他们的密码。什么是消毒他们的输入的最佳方法。我不想限制输入,因为我想允许安全密码。这就是我所拥有的。如何改进?
$newPasswd = preg_replace('/[^a-z0-9~!()_+=[]{}<>.\\\/?:@#$%^&*]/is', '', $inputPasswd);
$cmdline = $htpasswd . " " . $passwd_file . " " . escapeshellarg($username) . " " .escapeshellarg($newpasswd);
exec( $cmdline, $output, $return_var );
答案 0 :(得分:8)
ecscapeshellarg函数内置于PHP,并且基于shell的系统不同以清理文本,因此不能将“不安全”字符传递给exec。
答案 1 :(得分:1)
我不会在“危险字符”上使用带有空字符串的preg_replace,因为这会让用户相信他将密码更改为某些内容,但是您执行了其他操作。因此,用户将密码设置为与他不同的密码投入...最好向用户提供反馈,告诉他某些角色(最好是捕获并显示有问题的角色)没有通过验证。
除此之外,我觉得它看起来还不错。我认为它为用户提供了广泛的可能性,并且他不需要创建安全密码。告诉用户密码中允许哪些字符也是有用的,这样他就不必猜测。