gpt4 book ai didi

php - mysql_real_escape_string() 对于十六进制编码数据不安全吗?

转载 作者:行者123 更新时间:2023-11-29 14:39:06 28 4
gpt4 key购买 nike

我们知道,在php脚本中的mysql上执行之前,所有用户输入都必须通过mysql_real_escape_string()函数进行转义。并且知道此函数在用户输入中的任何 '" 字符之前插入\。假设以下代码:

$_POST['username'] = 'aidan';
$_POST['password'] = "' OR ''='";

// Query database to check if there are any matching users
$query = "SELECT * FROM users WHERE user='".mysql_real_escape_string($_POST['username']."' AND password='".mysql_real_escape_string($_POST['password']."'";

mysql_query($query);

// This means the query sent to MySQL would be:
echo $query;

此代码是安全的。

但是我发现如果用户以十六进制格式输入输入,那么 mysql_real_escape_string() 就无法执行任何操作,并且用户可以轻松执行她的 SQL 注入(inject)。下面的 27204f522027273d27' OR ''=' 相同,但采用十六进制格式,sql 执行没有问题:

$_POST['username'] = 'aidan';
$_POST['password'] = "27204f522027273d27";

// Query database to check if there are any matching users
$query = "SELECT * FROM users WHERE user='".mysql_real_escape_string($_POST['username']."' AND password='".mysql_real_escape_string($_POST['password']."'";

mysql_query($query);

// This means the query sent to MySQL would be:
echo $query;

但是这是否属实,如果答案是肯定的,我们如何才能以这种方式防止 SQL 注入(inject)呢?

最佳答案

如果您使用mysql_real_escape_string() ,使用准备好的声明可能会为您提供更好的服务。

对于您的具体情况,请尝试以下代码:

/*
Somewhere earlier in your application, you will have to set $dbh
by connecting to your database using code like:
$dbh = new PDO('mysql:host=localhost;dbname=test', $DBuser, $DBpass);
*/

$_POST['username'] = 'aidan';
$_POST['password'] = "' OR ''='";

$user = $_POST['username'];
$password = $_POST['password'];

// Query database to check if there are any matching users
$query = "SELECT * FROM users WHERE user=? AND password=?";

$stmt = $dbh->prepare($query);
$stmt->bindParam(1, $user);
$stmt->bindParam(2, $password);
$stmt->execute();

这确实要求您使用 PDO 进行数据库交互,但总的来说这是一件好事。 Here's a question discussing the differences between PDO and mysqli statements .

另请参阅this StackOverflow question which is remarkably similar to yours以及已接受的答案,我从中窃取了一些答案。

关于php - mysql_real_escape_string() 对于十六进制编码数据不安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8353366/

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