如何在 XAMPP PHP7.4 服务器中复制 magic_quotes 功能?
How can I replicate magic_quotes functionality in a XAMPP PHP7.4 server?
首先,我明白magic_quotes会导致各种问题,在现代PHP中没有立足之地。我处于一个非常特殊的情况,我已经将 XAMPP 从 PHP 5 升级到 PHP 7.4,用于包含 5000 多个文件的内部网站。突然间,当用户生成的字符串中包含单引号或双引号时,各种 SQL INSERT 查询都会中断。使用 add_slashes 函数遍历并包装这 5000 个文件中的每个变量绝对是不可行的,因此我需要想出一些方法来全局应用与 magic_quotes 相同的逻辑。有什么建议吗?
您确实需要更新此应用程序 How can I prevent SQL injection in PHP?. However, I am pretty sure that's not going to happen. So, in a header file or one that is included before any database operation (auto_prepend_file 也许),只需将超全局变量映射到 addslashes
。如果需要,您可以添加 $_COOKIE
:
$_POST = array_map('addslashes', $_POST);
$_GET = array_map('addslashes', $_GET);
显然这不会处理多维数组,因此您必须使用递归函数:
function addslashes_recursive($v) {
$v = is_array($v) ? array_map('addslashes_recursive', $v) : addslashes($v);
return $v;
}
$_POST = addslashes_recursive($_POST);
$_GET = addslashes_recursive($_GET);
首先,我明白magic_quotes会导致各种问题,在现代PHP中没有立足之地。我处于一个非常特殊的情况,我已经将 XAMPP 从 PHP 5 升级到 PHP 7.4,用于包含 5000 多个文件的内部网站。突然间,当用户生成的字符串中包含单引号或双引号时,各种 SQL INSERT 查询都会中断。使用 add_slashes 函数遍历并包装这 5000 个文件中的每个变量绝对是不可行的,因此我需要想出一些方法来全局应用与 magic_quotes 相同的逻辑。有什么建议吗?
您确实需要更新此应用程序 How can I prevent SQL injection in PHP?. However, I am pretty sure that's not going to happen. So, in a header file or one that is included before any database operation (auto_prepend_file 也许),只需将超全局变量映射到 addslashes
。如果需要,您可以添加 $_COOKIE
:
$_POST = array_map('addslashes', $_POST);
$_GET = array_map('addslashes', $_GET);
显然这不会处理多维数组,因此您必须使用递归函数:
function addslashes_recursive($v) {
$v = is_array($v) ? array_map('addslashes_recursive', $v) : addslashes($v);
return $v;
}
$_POST = addslashes_recursive($_POST);
$_GET = addslashes_recursive($_GET);