【发布时间】:2019-01-17 12:32:48
【问题描述】:
我在下面写了一些代码。我想知道两件事。
1.我的代码有漏洞吗?
2。我是否需要将 mysqli_real_escape_string 与准备好的语句一起使用?它会充当额外的安全层还是多余的?
使用的代码:
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
$admin_type = mysqli_real_escape_string($conn, $_POST['admin_type']);
$position = mysqli_real_escape_string($conn, $_POST['position']);
$first_name = mysqli_real_escape_string($conn, $_POST['first_name']);
$last_name = mysqli_real_escape_string($conn, $_POST['last_name']);
$user_name = mysqli_real_escape_string($conn, $_POST['user_name']);
$email = mysqli_real_escape_string($conn, $_POST['email']);
$phone_number = mysqli_real_escape_string($conn, $_POST['phone_number']);
$passwd = mysqli_real_escape_string($conn, $_POST['passwd']);
$created_at = mysqli_real_escape_string($conn, $_POST['created_at']);
$about = mysqli_real_escape_string($conn, $_POST['about']);
$sql = "INSERT INTO admin_accounts (admin_type, position, first_name, last_name, user_name, email, phone_number, passwd, about) VALUES (?,?,?,?,?,?,?,?,?);";
$stmt = mysqli_stmt_init($conn);
if (!mysqli_stmt_prepare($stmt, $sql)) {
echo "SQL Error";
} else {
mysqli_stmt_bind_param($stmt, "sssssssss", $admin_type, $position, $first_name, $last_name, $user_name, $email, $phone_number, $passwd, $about);
mysqli_stmt_execute($stmt);
{
$_SESSION['success'] = "Admin user added successfully!";
header('location: admin_users');
exit();
}
}
}
【问题讨论】:
-
您的代码仍然为那些嗅探纯文本密码的人敞开大门,并且相对容易找到/弄清楚。如果我是你,我会考虑正确地散列和存储密码,如果你打算上网的话。这些函数称为
password_hash(),验证它们的称为password_verify()。在网上查一下;你会得到很多(好的)点击,包括 php.net 上的手册。顺便说一句,我关闭了您可以咨询的问题。 -
当然,我现在确实在这样做!谢谢你:)
-
你的意思是我之前在评论中发布的功能?
-
是的,我正在阅读它!
标签: php sql prepared-statement sql-injection