我有一些代码可以注册,但我不知道如何散列密码。我想用sha512。
$con=mysqli_connect("localhost","root","","users");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$sql="INSERT INTO users (username, password, email)
VALUES
('$_POST[username]','$_POST[password]','$_POST[email]')";
if (!mysqli_query($con,$sql))
{
die('Error: ' . mysqli_error($con));
}
echo "Thank you.";
mysqli_close($con);
我知道我的mysql登录没有密码。这是一个刚用于测试的本地mysql服务器。
答案 0 :(得分:5)
您可以使用hash()
功能哈希密码:
$hashed_password = hash('sha512', $_POST['password']);
然后修改insert语句以将散列密码插入数据库:
INSERT INTO users (username, password, email)
VALUES ('$_POST[username]', '$hashed_password', '$_POST[email]');
请注意,由于您使用的是未经过处理的用户输入,因此您的SQL语句容易受到SQL注入攻击。为了提高安全性并保护数据的完整性,请在SQL语句中使用之前考虑转义和验证输入。实现此目的的一种方法是通过mysqli_real_escape_string()
:
$escaped_username = mysqli_real_escape_string( $con, $_POST['username'] );
$escaped_email = mysqli_real_escape_string( $con, $_POST['email'] );
答案 1 :(得分:3)
你在这里做的事情有很多问题。
首先,您很容易受到SQL注入的攻击,因为您没有在SQL中清理输入。
其次,你应该避免使用像SHA512这样的快速哈希。它不再被认为是安全的。看看this question。你基本上想要使用像bcrypt这样的自适应散列函数。
答案 2 :(得分:2)
以下是如何散列密码的示例:
<?php
$password = hash('sha512', $_POST[password]);
我建议输入密码。在这里阅读更多相关信息:
http://www.aspheute.com/english/20040105.asp
另请阅读“mysqli_real_escape_string”
...和 Prepared Statements 。
答案 3 :(得分:1)
首先清理输入数据。
$ password = filter_input(INPUT_POST,'password',FILTER_SANITIZE_STRING);
哈希密码字符串
$hashedPassword = hash('sha512', $password);
更好地散列密码的方法是使用新密码哈希API
$hashedPassword = password_hash($password, PASSWORD_DEFAULT);
答案 4 :(得分:-2)
请在进入数据库之前转义您的数据。他们可以接受攻击。
hash('sha512', $_POST['password']);