7

我有一些代码可以注册,但我不知道如何散列密码。我想使用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 服务器。

4

5 回答 5

5

您可以使用该hash()函数对您的密码进行哈希处理:

$hashed_password = hash('sha512', $_POST['password']);

然后修改您的插入语句以将您的散列密码插入数据库:

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'] );
于 2013-07-22T20:57:16.250 回答
3

你在这里做的事情有很多问题。

首先,您很容易受到 SQL 注入的影响,因为您没有清理 SQL 中的输入。

其次,您应该避免为此使用 SHA512 之类的快速哈希。它不再被认为是安全的。看看这个问题。您基本上想使用像 bcrypt 这样的自适应哈希函数。

于 2013-07-22T20:59:03.117 回答
1

以下是如何对密码进行哈希处理的示例:

<?php
$password = hash('sha512', $_POST[password]);

我建议加盐密码。在此处阅读更多信息:
http ://www.aspheute.com/english/20040105.asp

另请阅读“ mysqli_real_escape_string

…和准备好的陈述

于 2013-07-22T20:59:11.867 回答
1

首先清理您的输入数据。$password = filter_input(INPUT_POST, '密码', FILTER_SANITIZE_STRING);

散列您的密码字符串

$hashedPassword = hash('sha512', $password);

哈希密码的更好方法是使用新的密码哈希 API

$hashedPassword = password_hash($password, PASSWORD_DEFAULT);
于 2013-07-22T20:59:29.560 回答
-2

请在进入数据库之前转义您的数据。他们对攻击持开放态度。

hash('sha512', $_POST['password']);
于 2013-07-22T20:58:37.397 回答