检查空密码字段而不发布未加密的密码

时间:2012-10-29 01:21:23

标签: php encryption passwords

说我有一个简单的表格:

<form action="register.php" method="post">
<label>Password:</label>
<?php if (isset($errors[1])) echo $errors[1]; ?> <- Displays error message if there is one
<input type="password" name="user_pass" />
<label>Confirm Password:</label>
<input type="password" name="user_pass_confirm" />

<input type="submit" />
</form>

$user_pass = $security->encrypt($_POST['user_pass']);
$user_pass_confirm = $security->encrypt($_POST['user_pass_confirm']);

$registration->form($user_pass, $user_pass_confirm);

一堂课:

if (empty($user_pass)) {
$errors[1] = 'Passwords  required';
} else if ($user_pass != $user_pass_confirm) {
$errors[1] = 'Passwords don't match';
}

//if error array empty, create member

我要做的是验证密码以使其成为必需,确保它们匹配,我还会添加一个preg_match正则表达式,以确保它至少有8个字符或其他。

我的问题是,我在提交密码之前已经加密了密码(我认为不应该发布未加密的密码,如果我错了,请纠正我)。

然后当我的类获取编码字符串时,我无法做任何事情来验证它。我可以通过将字段与加密/加盐版本进行比较来检查是否为空,但我确定不是这样做的。

任何人都可以向我指出验证密码的标准程序或您对解决方案的任何建议。

非常感谢

1 个答案:

答案 0 :(得分:1)

PHP无法在客户端执行。您不能使用PHP加密普通密码而不将其发送到服务器,因为PHP是服务器端语言。必须先将密码发送到服务器,然后才能访问它。您可以通过https使用SSL / TLS等机制,但这不会影响您的PHP代码。

这意味着:在提交表单之前,您无法使用PHP加密密码。这可以通过JavaScript等客户端编程语言来完成。你可以实现一个JavaScript函数来检查密码是否正常(不是空的,足够长/足够安全),然后让JavaScript对其进行加密,然后将其发送到服务器,以便将加密的密码传输到服务器。

<form action="register.php" method="post">
...
</form>
<?php
//$user_pass = $security->encrypt($_POST['user_pass']);
//$user_pass_confirm = $security->encrypt($_POST['user_pass_confirm']);
//$registration->form($user_pass, $user_pass_confirm);
//YOUR PASSWORD HAS NOT BEEN SENT TO YOUR SERVER YET. YOU CANNOT ACCESS IT USING PHP.
//YOU WOULD NORMALLY DO SOMETHING LIKE THIS (IN REGISTER.PHP)
if(isset($_POST["name_of_your_submit_field"])) //WHICH MEANS THAT YOUR FORM HAS BEEN SUBMITTED NOW
{
    //This checks whether the POST-variable of your submit field is set.
    //If it is, you know that the client has submitted the form and sent the form data to your server.
    //Only here you can access the form data.
    $user_pass=$_POST['user_pass'];
    if(strlen($user_pass) > 8)
    {
        $user_pass = $security->encrypt($user_pass);
        $user_pass_confirm = $security->encrypt($_POST['user_pass_confirm']);
        $registration->form($user_pass, $user_pass_confirm);
    }
}
?>