我正试图用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);
?> 根据我所读到的,我必须将它放在insert查询的“value”部分: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吗?
发布于 2014-04-24 09:03:50
再看一遍例子。
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注入攻击的攻击,而您需要从它那里获取守备。
发布于 2014-04-24 09:34:33
SHA*散列函数不适合密码,因为它们的速度太快。您的示例中的另一个问题是,您正在生成未加盐的散列。看看散列()函数,它将生成一个BCrypt哈希,并负责安全盐的生成。还存在一个用于较早版本的兼容性包。
// 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()。
发布于 2014-04-24 09:02:33
使用SHA2('$_POST[pwrd]',256) insted of 'SHA2($_POST[pwrd])'
$ins="INSERT INTO users (uname, pwrd, bdate, mail)
VALUES
('$_POST[uname]',SHA2('$_POST[pwrd]',256),'$_POST[bdate]','$_POST[mail]')";https://stackoverflow.com/questions/23264343
复制相似问题