Как мне хэшировать SHA2 на $_POST?

Я пытаюсь зашифровать свой столбец пароля с помощью SHA2. Проблема в том, что инъекция в MYSQL осуществляется через переменную $_POST, поэтому я не понимаю, куда мне поместить SHA2().

Вот моя страница вставки (inscreate.php):

  <?php
    include 'header.php';
    $ins="INSERT INTO users (uname, pwrd, bdate, mail)
        VALUES ('$_POST[uname]','$_POST[pwrd]','$_POST[bdate]','$_POST[mail]')";
if (!mysqli_query($con,$ins))
      {
      die('Error: ' . mysqli_error($con));
      }
    echo "User added! You will be returned to the index page!";

    mysqli_close($con);
    ?>  

Из того, что я прочитал, я должен поместить его в раздел 'value' моего запроса на вставку: http://coderlearner.com/MySQL_Encryption-Decryption_Example_SHA2

Итак, я попробовал эти комбинации:

$ins="INSERT INTO users (uname, pwrd, bdate, mail)
            VALUES ('$_POST[uname]','SHA2($_POST[pwrd])','$_POST[bdate]','$_POST[mail]')";

но тогда, если пароль был, например: mypass, вывод в моей базе данных был такой: SHA2(mypass)

Я попробовал это:

$ins="INSERT INTO users (uname, pwrd, bdate, mail)
    VALUES ('$_POST[uname]',$_POST[SHA2(pwrd)]','$_POST[bdate]','$_POST[mail]')";

Но затем я получаю сообщение об ошибке разбора (которое я понимаю почему, но все же я просто пытался). Итак, мой вопрос: кто-нибудь знает, как я шифрую $_POST??

3 ответа

Решение

Посмотрите на примеры еще раз.

mysql> INSERT INTO userpassword(id, username,password)
    -> VALUES(null,'Lili',SHA2('mypassword1',256));

Кавычки идут вокруг строки. SHA2() вызов функции идет вокруг кавычек.

Также SHA2() принимает два аргумента.

'SHA2($_POST[pwrd])'

должно быть:

SHA2('$_POST[pwrd]', 256)

… Но не вставляйте данные POST непосредственно в ваш SQL. Это делает вас уязвимым для атак с использованием SQL-инъекций, от которых вам нужно защищаться.

Хэш-функции SHA* не подходят для паролей, потому что они слишком быстры. Другая проблема в вашем примере заключается в том, что вы генерируете несоленые хэши. Взгляните на PHP-функцию password_hash (), она сгенерирует хеш BCrypt и позаботится о создании безопасной соли. Существует также пакет совместимости для более старых версий PHP.

// Hash a new password for storing in the database.
// The function automatically generates a cryptographically safe salt.
$hashToStoreInDb = password_hash($password, PASSWORD_BCRYPT);

// Check if the hash of the entered login password, matches the stored hash.
// The salt and the cost factor will be extracted from $existingHashFromDb.
$isPasswordCorrect = password_verify($password, $existingHashFromDb);

Это также означает, что вы не можете проверить пароль непосредственно в операторе SQL, вместо этого прочитайте хеш из базы данных (по имени пользователя), а затем вызовите password_verify() с этим хешем.

Использование SHA2('$_POST[pwrd]',256) поставленный 'SHA2($_POST[pwrd])'

$ins="INSERT INTO users (uname, pwrd, bdate, mail)
       VALUES 
('$_POST[uname]',SHA2('$_POST[pwrd]',256),'$_POST[bdate]','$_POST[mail]')";
Другие вопросы по тегам