gpt4 book ai didi

PHP Prepared Statement vs mysqli_real_escape_string

转载 作者:行者123 更新时间:2023-12-03 23:54:16 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





How can I prevent SQL injection in PHP?

(28 个回答)



Why are plain text passwords bad, and how do I convince my boss that his treasured websites are in jeopardy? [closed]

(9 个回答)



Encrypting/Hashing plain text passwords in database [closed]

(15 个回答)


3年前关闭。




我在下面写了一些代码。我想知道两件事。

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();
}
}

}

最佳答案

PHP Prepared Statement 和 PHP mysqli_real_escape_string 的一个古老的论点并没有执行相同的功能,尽管它们都有相同的目标,即尝试以 may 的格式获取字符串或用户输入。不会对您的数据库造成损害我使用了 may 这个术语因为缺乏适当的验证仍然会导致同样的问题。

例如,用户在没有适当验证的情况下删除自己的帖子的删除查询用户可能会删除其他用户的帖子,用户甚至不需要 SQL 注入(inject)来存档。

string mysqli_real_escape_string ( mysqli $link , string $escapestr )

此函数用于创建可以在 SQL 语句中使用的合法 SQL 字符串。考虑到 current character set of the connection,给定的字符串被编码为转义的 SQL 字符串。现在这意味着 mysqli_real_escape_string 取决于您当前的字符集。

而准备好的语句将您的值/用户输入绑定(bind)到特定的 Data type并指示您的 sql 将其视为此类,但这也取决于您指定数据类型。

基本上 mysqli_real_escape_string 将根据定义的字符集取出用户输入中的垃圾,而准备好的语句将确保用户输入中是否有任何垃圾,它只会被解释为您希望它被解释为通常作为用户垃圾:)

我想说的是,同时使用这两者并不是一个坏主意,但是保护您的数据库的责任落在了您的身上,开发人员采取一切必要和合乎逻辑的步骤来存档最大的安全性没有人关心被黑客入侵的网站有多快!!

关于PHP Prepared Statement vs mysqli_real_escape_string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51777247/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com