gpt4 book ai didi

magento - 使用 Magento 方法编写插入查询,小心 SQL 注入(inject)

转载 作者:行者123 更新时间:2023-12-03 10:07:29 40 4
gpt4 key购买 nike

我正在使用 Magento 的功能来插入和更新查询。我的要求是在执行这些类型的查询时要处理 SQL 注入(inject)。但我无法找到 Magento 是如何做到这一点的。我正在提供一个起始样本。请给我一个完整的例子。

<?php
$write = Mage::getSingleton("core/resource")->getConnection("core_write");
$sql = "INSERT INTO Mage_Example (Name, Email, Company, Description, Status, Date)
VALUES ('$name', '$email', '$company', '$desc', '0', NOW())";
?>

现在我想更改上述查询以防止可能的 SQL 注入(inject)。我不想使用 PHP 的默认“ mysql_real_escape_string()”内置函数。任何人都可以为我提供一个有用的解决方案,使用“ $write”数据库处理程序。

任何帮助是极大的赞赏。

最佳答案

好的,稍微研究了一下这个。如果您可以获得 DB_Adapter 的实例(我相信资源调用将返回),这应该不会太难。 Magento 内部是基于 Zend 框架的,而 DB 适配器具体是从 Zend_Db_Adapter 继承而来的。 ,因此您可以免费使用这些方法。有关更多示例,请参阅之前的链接,但这是文档中提供的语法,它应该自动转义您的输入:

$write = Mage::getSingleton("core/resource")->getConnection("core_write");

// Concatenated with . for readability
$query = "insert into mage_example "
. "(name, email, company, description, status, date) values "
. "(:name, :email, :company, :desc, 0, NOW())";

$binds = array(
'name' => "name' or 1=1",
'email' => "email",
'company' => "company",
'desc' => "desc",
);
$write->query($query, $binds);

同样,请参阅文档以获取更多信息。

更新:

我改变了上面的例子。您通过 core_write 请求返回的对象是一个暴露了 query 的 PDO 对象。方法(见上文),它将让您使用参数化查询。这是比尝试使用 mysql_real_escape_string 之类的东西进行数据清理更好的方法,而且我已经测试了上述代码的正确性。请注意,与大多数 MySQL 参数化查询相比,绑定(bind)是使用 :labels 完成的,而且您的 var 不需要引号。

为了回应您的另一点,如下所述,在 Magento 中执行此操作的“正确”方法是根本不使用直接查询。 Magento 对象模型开发得很好,旨在从您那里抽象出这种实现细节,因为您不需要关心它。要“正确”地做到这一点,请创建一个新的基于数据库的模型并省去麻烦。

关于magento - 使用 Magento 方法编写插入查询,小心 SQL 注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3575160/

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