хеш — PHP 5.5 API хеширования паролей правильный способ сравнения 2 переменных password_hash ()

Я настраиваю регистрационную форму и использую API хэширования паролей, который из того, что я прочитал, в настоящее время является лучшим способом защиты паролей.

моя форма

    <form action="register.php" method="post">
<div class="fluid reg_firstname">
<label for="first-name">First Name</label>
<input name="first-name" type="text" style="width:90%;">
</div>

<div class="fluid reg_lastname">
<label for="last-name">Last Name</label>
<input name="last-name" type="text" style="width:90%;">
</div>

<div class="fluid reg_email">
<label for="email">Email</label>
<input name="email" type="text" style="width:50%;">
</div>

<div class="fluid reg_password">
<label for="create-password">Create Password</label>
<input name="create-password" type="password" style="width:70%;">
</div>
<div class="fluid reg_password">
<label for="confirm-password">Confirm Password</label>
<input name="confirm-password" type="password" style="width:70%;">
</div>

<div class="fluid reg_agreement">
<p>
By clicking 'Submit' I agree that:
</p>
<ul>
<li>I accept the User Agreement- opens in a new window or tab.</li>
<li>I give consent to the processing of my data- opens in a new window or tab.</li>
<li>I may receive communications from SLF and I understand that I can change my notification preferences at any time in My Account.</li>
<li>I am at least 18 years old.</li>
</ul>
</div>

<div class="fluid reg_submit">
<input name="step1" type="submit" value="Submit">
</div>
</form>

Поэтому я добавляю некоторую проверку в мою форму после нажатия кнопки отправки, которая выглядит следующим образом

<?php if(isset($_POST['step1']))
{
#RETRIEVE VARIBLES
$first = mysqli_real_escape_string($db,$_POST['first-name']);
$last = mysqli_real_escape_string($db,$_POST['last-name']);
$email = mysqli_real_escape_string($db,$_POST['email']);
$password1 = password_hash($_POST['create-password'], PASSWORD_DEFAULT);
$password2 = password_hash($_POST['confirm-password'], PASSWORD_DEFAULT);#VALIDATION CHECKS

if($first == "")
{
$error[] = "Please Enter First Name";
}
if(strlen($first) < 2 OR strlen($first) > 16)
{
$error[] = "Name between 2 and 16 chars long";
}
if(!ctype_alnum ( $first ))
{
$error[] = "Letters Only Please";
}

if($last == "")
{
$error[] = "Please Enter Last Name";
}
if(strlen($last) < 2 OR strlen($last) > 16)
{
$error[] = "Surname between 2 and 16 chars long";
}
if(!ctype_alnum ( $last ))
{
$error[] = "Letters Only Please";
}

if($email == "")
{
$error[] = "Please Enter Vaild Email";
}
if (!filter_var($email, FILTER_VALIDATE_EMAIL))
{
$error[] = "Invalid email format";
}

if($password1 == "")
{
$error[] = "Please enter a valid password";
}

if($password1 <> $password2)
{
$error[] = "Passwords Dont Match";
}if(isset($error) && (count($error) >0))
{
echo "<pre>";
print_r($error);
echo "</pre>";
}

echo "step one complete<br />";
echo $password1."<br />".$password2;
}?>

проблема в том, что я имею с моей проверкой пароля

if($password1 <> $password2)
{
$error[] = "Passwords Dont Match";
}

я проверяю, совпадают ли две переменные, но я угадываю, потому что я добавил к ним password_hash, он проверяет значение хеша, а не фактическое значение, введенное пользователем? Как бы я исправить это, чтобы он проверял фактические данные, а не хэш-значение (которое никогда не будет совпадать)?

ценю любую помощь!

ура

0

Решение

Если вы хотите проверить исходные данные, то почему бы просто не проверить подлинные данные?

if($_POST['create-password'] <> $_POST['confirm-password'])
{
$error[] = "Passwords Dont Match";
}

Я что-то пропустил?

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]