Шифрование пароля с помощью password hash
мой запрос заключается в том, что у меня есть регистрационная форма, в которой предлагается сохранить пароль, форма работает правильно, и следующее encriptar
пароль, я использую функцию password_hash
однако я не могу иметь правильный синтаксис, чтобы при регистрации пароля он был зашифрован в BD.
я прилагаю код PHP
<?php
//include "Conex1.php";
$conexion = mysqli_connect("localhost", "root", "", "gesy_agro");
echo "Conexion realizada";
$sql= "INSERT INTO `documentacion_usuario` (`DocNombre`,`DocCedula`, `DocCorreo`, `DocDireccion`, `DocTelefono`, `DocUsuario`, `DocContraseña`) VALUES ('$_POST[Nombres]',$_POST[Cedula], '$_POST[Correo]', '$_POST[Direccion]', '$_POST[Telefono]', '$_POST[Usuario]', $_POST[Contraseña])";
$password = password_hash($Contraseña, PASSWORD_BCRYPT, ['cost' => 11]);
echo "$password";
if (!mysqli_query($conexion, $sql)) {
echo "Error: ,". mysqli_error($conexion);
//$result = mysqli_query($conexion, $query);
mysqli_close($conexion);
}
?>
2 answers
Привет, я прокомментирую ваш вопрос и предложу следующий пример, где я могу сгенерировать соответствующий hash
; тогда единственное, что вам нужно сделать, это передать имя переменной в INSERT
SQL для хранения в базе данных.
<?php
$name = '';
function store($name)
{
return password_hash($name, PASSWORD_BCRYPT);
}
echo store('Alfredo');
И я замечаю, что он возвращает мне:
$2y$10$wv/mofEWT/KBqFlj4ENZRuhna6.d/TDGhTegVlVHBZ2O2XEcUuOp.
Второй параметр PASSWORD_BCRYPT
используется для создания новых хэшей пароля с использованием алгоритма CRYPT_BLOWFISH
Первый процесс hashing
с функцией password_hash выполняется после правильного назначения значений для оператора SQL
. Как ваш код будет добавлен значения, которые приходят POST
, но . у вас очень серьезные проблемы с безопасностью при объединении значений в ваш запрос, он поддается получению атак SQL-инъекций. Вместо этого вы должны подготовить запрос, чтобы избежать этих сбоев безопасность.
Ejm (возможный код)
$nombres = $_POST['Nombres'];
$cedula = $_POST['Cedula'];
$correo = $_POST['Correo'];
$direccion = $_POST['Direccion'];
$telefono = $_POST['Telefono'];
$usuario = $_POST['Usuario'];
//Encriptamos el valor de contrasenia
$contrasenia = password_hash($_POST['Contrasenia'], PASSWORD_BCRYPT, ['cost' => 11]);
$mysqli = new mysqli("localhost", "root", "", "gesy_agro");
// Tantos marcadores como campos en su base de datos 7 para su caso
if ($stmt = $mysqli->prepare("INSERT INTO `documentacion_usuario` (`DocNombre`,`DocCedula`, `DocCorreo`, `DocDireccion`, `DocTelefono`, `DocUsuario`, `DocContraseña`) VALUES (?,?, ?, ?, ?, ?, ?)")) {
/* ligar parámetros para marcadores ? , luego la S significa que será de tipo String */
$stmt->bind_param("sssssss", $nombres,$cedula,$correo,$direccion,$telefono,$usuario,$contrasenia);
/* ejecutar la consulta */
$stmt->execute();
}
Важным соображением в моем примере является замена буквы N как для значения
post
, так и для имени поля базы данныхDocContrasenia
, поскольку использование этого может привести неожиданные результаты, поэтому вы должны заменить в своемinput
form
, который отправляет данные.