gpt4 book ai didi

php - 升级 PHP - 需要删除 get_magic_quotes_gpc

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

我们正在从 php 5.3 升级到 5.4,它不向后兼容“get_magic_quotes_gpc”。我知道代码仍然可以工作,某种程度上,但每次都返回一个 FALSE。

但是,我认为是时候从我们的代码中清除它了。

这是一个典型的例子:

     $product_id = "0";
if (isset($HTTP_GET_VARS["id"])) {
$rid = (get_magic_quotes_gpc()) ? $HTTP_GET_VARS["id"] : addslashes($HTTP_GET_VARS["id"]);
}

//then $product_id gets used all over the place in many different queries

我一直在研究如何解决这个问题,这就是我想出的:

    $rid = "0";
if (isset($HTTP_GET_VARS["id"])) {
$rid = addslashes($HTTP_GET_VARS["id"]);
}

我有点头大了。我知道这一切都与 SQL 注入(inject)等有关。我的解决方案是否合理/可接受?

提前致谢。

<<<< 编辑 - 附加信息 >>>>>

感谢您的回复。实际上,我们在大约 18 个月前进行了一系列到 PDO 的转换(主要是由于 stackoverflow 上的此类建议 :)

所以,我可能有一些多余的、毫无意义的代码在运行。以下是我在上面发布的从 URL 获取变量的代码下面发生的事情的全貌。

你会看到,曾经有 (get_magic_quotes_gpc),现在被注释掉并被 (addslashes) 取代。但是该变量被传递给 PDO 查询。

$product_id = "0";
if (isset($HTTP_GET_VARS["id"])) {
//$product_id = (get_magic_quotes_gpc()) ? $HTTP_GET_VARS["id"] : addslashes($HTTP_GET_VARS["id"]);
$product_id = addslashes($HTTP_GET_VARS["id"]);
}

// NEW QUERIES - BEG xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

try {
# MySQL with PDO_MYSQL
$pdo = new PDO("mysql:host=$hostname_db;dbname=$database_db", $username_db, $password_db);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

// Query 1: product details
$stmt = $pdo->prepare('SELECT
[a bunch of stuff here, fields, joins, etc]
WHERE product_id = ? ');
$stmt -> execute(array($rid));
$row_count_resto_details = $stmt->rowCount();
$row_resto_details = $stmt->fetch(PDO::FETCH_ASSOC);


}
// Error message for pdo
catch(PDOException $e) {
echo $e->getMessage();
}


// END QUERY xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

我能否去掉前 4-5 行代码中的所有内容,并使其成为这样:

$product_id = $HTTP_GET_VARS["id"];

最佳答案

不,这不合理。

问题是,“魔术引号”功能一开始就是个坏主意,因此尝试复制它只意味着您一直依赖于一个损坏的解决方案,并且您的应用程序无疑容易受到攻击SQL 注入(inject)攻击。

“为什么魔术引号是一个失败的解决方案?”,您可能会问。答案有点隐藏在问题本身中 - 安全和 IT 通常不是也不能魔法。每当您看到一个 self 宣传的解决方案或至少看起来以一种“神奇”的方式工作时,请知道它是不好的并且您永远不应该相信它。

您需要的是上下文感知解决方案,并且在防止 SQL 注入(inject)的情况下 - 这是参数化查询。您应该阅读此内容以了解更多信息:How can I prevent SQL-injection in PHP?

我还建议您直接升级到 PHP 5.6,主要有两个原因:

  • PHP 5.4 将在一个月内结束生命周期,仅此一项就可能构成安全风险。
  • 你没有理由不这样做。老实说,升级路径是轻而易举的,并且几乎没有向后兼容性问题,如果有的话。 PHP 现在更加稳定,自 5.3 和 5.4 以来几乎没有重大变化。

更新(回答扩展问题):

您不仅可以删除 addslashes() 逻辑,而且您必须 这样做 - 如果您保留它,它会在您的一些输入数据中添加斜杠,并且这些斜杠将是数据本身的一部分
您要做的是验证 输入数据 - 首先检查它的格式是否正确。例如,如果您需要数字 ID - 请在使用前检查它是否仅包含数字。

此外,$HTTP_GET_VARS 自 PHP 4.1 起已被弃用,您应该改用 $_GET

关于php - 升级 PHP - 需要删除 get_magic_quotes_gpc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31840480/

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