Как мне хэшировать 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]')";