gpt4 book ai didi

php - 在 Adodb for PHP 中清理 SQL 查询的输入

转载 作者:行者123 更新时间:2023-11-29 00:52:13 25 4
gpt4 key购买 nike

我正在优化一个使用 ADODBforPHP 的平台.我使用了一个清理功能来避免对以前版本的 PHP (mysql_escape_string) 进行 sql 注入(inject),这显然不再受支持也不推荐。

对于那些没有使用过这个库的人来说,它是这样的:

$rs = $cnn->Execute('SELECT * FROM user WHERE id_user='.q($_GET['id']));

更新某行时的例子:

$record = array();
$record['name'] = q($_GET['name']);
$record['last_update'] = time();
$rsProfile = $cnn->Execute('SELECT * FROM user WHERE id_user='.q($_GET['id']));
$sql = $cnn->GetUpdateSQL($rsProfile,$record);
if($sql) $cnn->Execute($sql);

在这种情况下,q($string) 是清理函数,我正在努力改进它。我无权在此服务器上安装 PDO,因此这不是一个选项。

当前的 q() 使用不带第二个参数的 mysql_real_escape_string:

function q($data) {
if(!empty($data) && is_string($data)) {
$data = str_replace(array('\\', "\0", "\n", "\r", "'", '"', "\x1a"), array('\\\\', '\\0', '\\n', '\\r', "\\'", '\\"', '\\Z'), $data);
$data = "'".$data."'";
}
return $data;
}

有人在另一个论坛上推荐了 filter_var($value, FILTER_SANITIZE_STRING),但老实说我还没有用它来解决这些问题。

关于如何提高此功能目的的安全性的任何建议?

更新 1

function q($data) {
if(is_string($data)) {
return "'".mysql_real_escape_string($data)."'";
} elseif(is_numeric($data) || is_bool($data)) {
return $data;
} else {
return "''";
}
}

最佳答案

很抱歉让你失望了,但是你的清理功能,无论它做什么,都不会“清理”任何东西,你可以在你在这里发布的代码中进行注入(inject)。
就这样调用你的脚本

code.php?id=1 union select password from users where id=1

看看这段代码是否“净化”了任何东西。

Any recommendations on how to improve the security of this function's purpose?

当然可以。
首先,您必须了解什么是转义 以及如何使用它。

然后你必须开始使用占位符,我相信

关于php - 在 Adodb for PHP 中清理 SQL 查询的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7962192/

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