Шифрование пароля с помощью 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);
}
?>
Author: Dev. Joel, 2018-02-20

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

 2
Author: Jorgesys, 2018-11-30 17:37:12

Первый процесс 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, который отправляет данные.

 4
Author: Dev. Joel, 2018-02-20 05:06:14