Intereting Posts
Laravel прикованный / связанный блок выбора не смог загрузить статус ресурса. Внутренняя ошибка сервера. Какой был бы лучший способ резервного копирования и восстановления дампов mysql с помощью только php? Как сделать cURL php с помощью AJAX, чтобы сделать живой запрос? Регулярное выражение PHP для проверки URL-адреса Символы классов Symfony2 / Doctrine2 для многоразового пакета PHP – Измененное изображение имеет больший размер файла MySQL-Невозможно перейти к строке 0 по индексу результата MySQL Как установить Zend Framework в Windows Соединение fsockopen ssl не работает Изменение jQuery только тогда, когда оно уже существует в div PHP Oauth signature_invalid jquery, Ajax или PHP: запустить скрипт в определенное время или выполнить действие в фоновом режиме Объединение двух регулярных выражений для усечения слов в строках php – изменить размер и сохранить изображение? не может нажимать элементы, отобранные другой страницей, используя ajax – $ (document) .on не работает

Подтвердить вход с помощью пароля Bcrypt

У меня есть сайт, где я программирую систему регистрации / входа в систему с помощью bcrypt. Я успешно вставил регистрационные данные с хешированным паролем в базу данных. Моя проблема заключается в том, как аутентифицировать пользователя, используя этот хешированный пароль. Ниже приведены коды, которые я использовал:

Действие регистрации:

<? ob_start();//Start buffer output ?> <html> <head> <title>MySite: Registration Action</title> </head> <font face="arial"> <?php session_start(); if(isset($_POST["captcha"])&&$_POST["captcha"]!=""&&$_SESSION["code"]==$_POST["captcha"]) { //echo "Correct Code Entered"; //Do req stuff $host="host"; // Host name $username="username"; // Mysql username $password="password"; // Mysql password $db_name="db"; // Database name $tbl_name="tbl"; // Table name // Connect to server and select database. mysql_connect("$host", "$username", "$password")or die("cannot connect"); mysql_select_db("$db_name")or die("cannot select DB"); // Get values from form $myusername=mysql_real_escape_string($_POST['myusername']); $mypassword=mysql_real_escape_string($_POST['mypassword']); $myemail=mysql_real_escape_string($_POST['myemail']); $mysecrquest=mysql_real_escape_string($_POST['mysecrquest']); $mysecransw=mysql_real_escape_string($_POST['mysecransw']); $mypassword_rep=mysql_real_escape_string($_POST['mypassword_rep']); $myemail_rep=mysql_real_escape_string($_POST['myemail_rep']); $mysecransw_rep=mysql_real_escape_string($_POST['mysecransw_rep']); $salt = '$2a$18$' . substr(md5(uniqid(rand(), true)), 0, 22); $encpass = crypt($mypassword, $salt); //validate input if (( !empty($myusername) && !empty($mypassword) && !empty($myemail) && !empty($mysecrquest) && !empty($mysecransw) ) && (($mypassword_rep==$mypassword)&&($myemail_rep==$myemail)&&($mysecransw_rep==$mysecransw))) { // Insert data into mysql $sql="INSERT INTO $tbl_name(username, salt, password, email, secrquest, secransw)VALUES('$myusername', '$salt', '$encpass', '$myemail', '$mysecrquest', '$mysecransw')"; $result=mysql_query($sql); // if successfully insert data into database, displays message "Successful". if($result){ echo "<center><font color='green'>Congratulations! Your registration was Successful</font></center>"; echo "<BR>"; echo "<center><a href='somepage.php'>Somepage</a></center>"; } } else { echo "<center><font color='red'>You have one or more invalid entries: Your Registration was not successful</font></center>"; echo "<br>"; echo "<center><a href='regpage.php'>Back</a></center>"; } } else { echo "<center><font color='red'>Wrong Captcha: Your Registration was not successful</font></center>"; echo "<br>"; echo "<center><a href='regpage.php'>Back</a></center>"; } ?> <?php // close connection //mysql_close(); ?> </font> </html> <? ob_flush();//Flush buffer output ?> 

Вход Действие:

 <? ob_start();//Start buffer output ?> <html> <head> <title>MySite: Login Action</title> </head> <font face="arial"> <?php session_start(); if(isset($_POST["captcha"])&&$_POST["captcha"]!=""&&$_SESSION["code"]==$_POST["captcha"]) { // echo "<font color='green'>Correct Code Entered</font>"; //Do req stuff $host="host"; // Host name $username="username"; // Mysql username $password="password"; // Mysql password $db_name="db"; // Database name $tbl_name="tblx"; // Table name $tbl_name2="tbl"; // Table name 2 // Connect to server and select database. mysql_connect("$host", "$username", "$password")or die("cannot connect"); mysql_select_db("$db_name")or die("cannot select DB"); // Get values from form $myusername=mysql_real_escape_string($_POST['myusername']); $mypassword=mysql_real_escape_string($_POST['mypassword']); // Validate the login $sql2="SELECT * FROM $tbl_name2 WHERE username='$myusername'"; $result2=mysql_query($sql2); $row=mysql_fetch_assoc($result2); //$count=mysql_num_rows($result2); // If result matched $myusername and $mypassword, table row must be 1 row //if($count==1) //$salt = '$2a$18$' . substr(md5(uniqid(rand(), true)), 0, 22); $encpass = crypt($mypassword, $salt); if ($encpass == $row['password']) { session_start(); $_SESSION['myusername'] = $myusername; header ("Location: memberspage.php"); } else { echo "<center><font color='red'>Invalid Login Details. Not Logged In.</font></center>"; echo "<br>"; echo "<center><font color='red'>Please go back and try again.</font></center>"; echo "<br>"; echo "<center><a href='loginpage.php'>Back</a></center>"; } } else { echo "<center><font color='red'>Wrong Captcha. Not Logged In.</font></center>"; echo "<br>"; echo "<center><font color='red'>Please go back and try again.</font></center>"; echo "<br>"; echo "<center><a href='loginpage.php'>Back</a></center>"; } ?> <?php // close connection //mysql_close(); ?> </font> </html> <? ob_flush();//Flush buffer output ?> на <? ob_start();//Start buffer output ?> <html> <head> <title>MySite: Login Action</title> </head> <font face="arial"> <?php session_start(); if(isset($_POST["captcha"])&&$_POST["captcha"]!=""&&$_SESSION["code"]==$_POST["captcha"]) { // echo "<font color='green'>Correct Code Entered</font>"; //Do req stuff $host="host"; // Host name $username="username"; // Mysql username $password="password"; // Mysql password $db_name="db"; // Database name $tbl_name="tblx"; // Table name $tbl_name2="tbl"; // Table name 2 // Connect to server and select database. mysql_connect("$host", "$username", "$password")or die("cannot connect"); mysql_select_db("$db_name")or die("cannot select DB"); // Get values from form $myusername=mysql_real_escape_string($_POST['myusername']); $mypassword=mysql_real_escape_string($_POST['mypassword']); // Validate the login $sql2="SELECT * FROM $tbl_name2 WHERE username='$myusername'"; $result2=mysql_query($sql2); $row=mysql_fetch_assoc($result2); //$count=mysql_num_rows($result2); // If result matched $myusername and $mypassword, table row must be 1 row //if($count==1) //$salt = '$2a$18$' . substr(md5(uniqid(rand(), true)), 0, 22); $encpass = crypt($mypassword, $salt); if ($encpass == $row['password']) { session_start(); $_SESSION['myusername'] = $myusername; header ("Location: memberspage.php"); } else { echo "<center><font color='red'>Invalid Login Details. Not Logged In.</font></center>"; echo "<br>"; echo "<center><font color='red'>Please go back and try again.</font></center>"; echo "<br>"; echo "<center><a href='loginpage.php'>Back</a></center>"; } } else { echo "<center><font color='red'>Wrong Captcha. Not Logged In.</font></center>"; echo "<br>"; echo "<center><font color='red'>Please go back and try again.</font></center>"; echo "<br>"; echo "<center><a href='loginpage.php'>Back</a></center>"; } ?> <?php // close connection //mysql_close(); ?> </font> </html> <? ob_flush();//Flush buffer output ?> на <? ob_start();//Start buffer output ?> <html> <head> <title>MySite: Login Action</title> </head> <font face="arial"> <?php session_start(); if(isset($_POST["captcha"])&&$_POST["captcha"]!=""&&$_SESSION["code"]==$_POST["captcha"]) { // echo "<font color='green'>Correct Code Entered</font>"; //Do req stuff $host="host"; // Host name $username="username"; // Mysql username $password="password"; // Mysql password $db_name="db"; // Database name $tbl_name="tblx"; // Table name $tbl_name2="tbl"; // Table name 2 // Connect to server and select database. mysql_connect("$host", "$username", "$password")or die("cannot connect"); mysql_select_db("$db_name")or die("cannot select DB"); // Get values from form $myusername=mysql_real_escape_string($_POST['myusername']); $mypassword=mysql_real_escape_string($_POST['mypassword']); // Validate the login $sql2="SELECT * FROM $tbl_name2 WHERE username='$myusername'"; $result2=mysql_query($sql2); $row=mysql_fetch_assoc($result2); //$count=mysql_num_rows($result2); // If result matched $myusername and $mypassword, table row must be 1 row //if($count==1) //$salt = '$2a$18$' . substr(md5(uniqid(rand(), true)), 0, 22); $encpass = crypt($mypassword, $salt); if ($encpass == $row['password']) { session_start(); $_SESSION['myusername'] = $myusername; header ("Location: memberspage.php"); } else { echo "<center><font color='red'>Invalid Login Details. Not Logged In.</font></center>"; echo "<br>"; echo "<center><font color='red'>Please go back and try again.</font></center>"; echo "<br>"; echo "<center><a href='loginpage.php'>Back</a></center>"; } } else { echo "<center><font color='red'>Wrong Captcha. Not Logged In.</font></center>"; echo "<br>"; echo "<center><font color='red'>Please go back and try again.</font></center>"; echo "<br>"; echo "<center><a href='loginpage.php'>Back</a></center>"; } ?> <?php // close connection //mysql_close(); ?> </font> </html> <? ob_flush();//Flush buffer output ?> на <? ob_start();//Start buffer output ?> <html> <head> <title>MySite: Login Action</title> </head> <font face="arial"> <?php session_start(); if(isset($_POST["captcha"])&&$_POST["captcha"]!=""&&$_SESSION["code"]==$_POST["captcha"]) { // echo "<font color='green'>Correct Code Entered</font>"; //Do req stuff $host="host"; // Host name $username="username"; // Mysql username $password="password"; // Mysql password $db_name="db"; // Database name $tbl_name="tblx"; // Table name $tbl_name2="tbl"; // Table name 2 // Connect to server and select database. mysql_connect("$host", "$username", "$password")or die("cannot connect"); mysql_select_db("$db_name")or die("cannot select DB"); // Get values from form $myusername=mysql_real_escape_string($_POST['myusername']); $mypassword=mysql_real_escape_string($_POST['mypassword']); // Validate the login $sql2="SELECT * FROM $tbl_name2 WHERE username='$myusername'"; $result2=mysql_query($sql2); $row=mysql_fetch_assoc($result2); //$count=mysql_num_rows($result2); // If result matched $myusername and $mypassword, table row must be 1 row //if($count==1) //$salt = '$2a$18$' . substr(md5(uniqid(rand(), true)), 0, 22); $encpass = crypt($mypassword, $salt); if ($encpass == $row['password']) { session_start(); $_SESSION['myusername'] = $myusername; header ("Location: memberspage.php"); } else { echo "<center><font color='red'>Invalid Login Details. Not Logged In.</font></center>"; echo "<br>"; echo "<center><font color='red'>Please go back and try again.</font></center>"; echo "<br>"; echo "<center><a href='loginpage.php'>Back</a></center>"; } } else { echo "<center><font color='red'>Wrong Captcha. Not Logged In.</font></center>"; echo "<br>"; echo "<center><font color='red'>Please go back and try again.</font></center>"; echo "<br>"; echo "<center><a href='loginpage.php'>Back</a></center>"; } ?> <?php // close connection //mysql_close(); ?> </font> </html> <? ob_flush();//Flush buffer output ?> 

Любая помощь приветствуется. Благодарю.

Я предлагаю использовать встроенные функции password_xxx() PHP. Они явно разработаны, чтобы упростить работу с хэшированием паролей с использованием bcrypt. Вам не нужно думать ни о чем другом, кроме вызова функции password_verify() чтобы проверить попытку входа в систему и password_hash() при создании учетной записи. Легко.

Это самый простой способ работы с паролями в PHP.

Обратите внимание, что эти функции доступны только в последней версии PHP (v5.5). Однако есть библиотека обратной совместимости, которую вы можете загрузить, что заставляет их работать одинаково во всех поддерживаемых в настоящее время версиях PHP (т. Е. V5.3 и 5.4).

Надеюсь, это поможет.

При всем этом уважении: ваш код полон ошибок, устаревших вещей и, следовательно, очень небезопасных. Я бы порекомендовал использовать профессиональный, проверенный и чистый сценарий входа в систему, а не дальше с вашим кодом.

  1. $salt = '$2a$18$' . substr(md5(uniqid(rand(), true)), 0, 22); полностью устарел и больше не уверен. $2a -algorithmns являются «слабыми» алгоритмами, даже если они соленые.

  2. mysql_ устарел и никогда не должен использоваться.

  3. <font face="arial"> устарел с 1999 года, остальная часть вашего кода также может быть с этого времени.

Sooo, в результате: посмотрите на официальную библиотеку совместимости паролей PHP здесь: https://github.com/ircmaxell/password_compat и создайте свою систему входа в систему с помощью сексуальных простых функций. Или используйте установленную систему входа, как здесь: https://github.com/panique/php-login

bcrypt использует соль для каждой строки, что означает, что вам нужно проверить что там, а не генерировать новую соль и сравнивать.

для получения дополнительной информации Как вы используете bcrypt для хеширования паролей в PHP?