gpt4 book ai didi

php - 为什么 mysql_real_escape_string() 没有阻止 hack?

转载 作者:行者123 更新时间:2023-11-30 23:55:34 25 4
gpt4 key购买 nike

我有一个网站今天被黑了。服务器日志返回类似这样的内容作为黑客的尝试:

www.site.com/notifications.php?PID=7&id=999999.9%20union%20all%20select%20%28select%20distinct%20concat%280x7e%2C0x27%2Cunhex%28Hex%28cast%28schema_name%20as%20char%29%29%29%2C0x27%2C0x7e%29%20from%20%60information_schema%60.schemata%20limit%201%2C1%29%2C0x31303235343830303536%2C0x31303235343830303536%2C0x31303235343830303536--

但是我在我的代码中使用了mysql_real_escape_string():

if (isset($_GET['id']) && $_GET['id'] != '') {
$id = mysql_real_escape_string($_GET['id']);
} else {
$id = '';
}

if ($id == '') {
$stmt = "SELECT * FROM tbln13 ORDER BY id DESC";
} else {
$stmt = "SELECT * FROM tbln13 WHERE id = $id";
}

$NewsResult = mysql_query($stmt) or die (mysql_error());

为什么我的网站无法阻止这种攻击?

最佳答案

因为 escape_string 在引号中添加斜杠等。您的查询或他们提交的字符串中没有任何引号。

您的查询中没有 STRING,它似乎需要一个 int。如果你需要一个整数,你应该在查询中使用它之前验证它是一个 int,或者强制它是一个 int。将值转义为字符串,然后将其用作 int,是行不通的。

切换到 MySQLi 或 PDO 中的预处理语句。

关于php - 为什么 mysql_real_escape_string() 没有阻止 hack?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20806625/

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