How to encrypt a password that is inserted into a MySQL table?
本问题已经有最佳答案,请猛点这里访问。
我有一些代码可以注册,但我不知道如何散列密码。我想用sha512。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | $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服务器。
您可以使用
1 |
然后修改insert语句,将哈希密码插入数据库:
1 2 | INSERT INTO users (username, password, email) VALUES ('$_POST[username]', '$hashed_password', '$_POST[email]'); |
请注意,您的SQL语句容易受到SQL注入的攻击,因为您使用的是未初始化的用户输入。为了提高安全性并保护数据的完整性,请考虑在SQL语句中使用输入之前对其进行转义和验证。实现这一目标的一种方法是通过
1 2 | $escaped_username = mysqli_real_escape_string( $con, $_POST['username'] ); $escaped_email = mysqli_real_escape_string( $con, $_POST['email'] ); |
你在这里做的事情有很多问题。
首先,您容易受到SQL注入的攻击,因为您没有清理SQL中的输入。
其次,您应该避免使用像sha512这样的快速哈希。它不再被认为是安全的。看看这个问题。您基本上希望使用类似bcrypt的自适应哈希函数。
下面是一个如何散列密码的示例:
1 2 |
我建议你加上密码。请在此处阅读更多信息:网址:http://www.aspheute.com/english/20040105.asp
还可以阅读"mysqli_real_escape_string"
&和准备好的声明。
首先清理输入数据。$password=filter_input(input_post,'password',filter_sanitize_string);
散列密码字符串
1 |
更好的密码散列方法是使用新的密码散列API
1 | $hashedPassword = password_hash($password, PASSWORD_DEFAULT); |
请在进入数据库前转义数据。他们容易受到攻击。
1 |