1

我目前正在研究一个已经修改过的 magento 版本(v 1.6.1)。之前的开发者自己修改了app/core,我升级到1.7怎么办?它将恢复原始应用程序/核心,对吗?(因为我知道每个模组都应该放在 app/local 下)

然后我注意到,通过在电子商务上运行 diff 和一个干净的 1.6.1 安装,开发人员已经应用了这个修改(标有“<”的行是原始内容,“>”是编辑过的内容)

diff app/code/core/Mage/Checkout/controllers/CartController.php
169c169,170
<                 $params['qty'] = $filter->filter($params['qty']);
---
>                 #$params['qty'] = $filter->filter($params['qty']);
>                 $params['qty'] = $params['qty'];
311c312,313
<                 $params['qty'] = $filter->filter($params['qty']);
---
>                 #$params['qty'] = $filter->filter($params['qty']);
>                 $params['qty'] = $params['qty'];
383c385,386
<                         $cartData[$index]['qty'] = $filter->filter(trim($data['qty']));
---
>                         //$cartData[$index]['qty'] = $filter->filter(trim($data['qty']));
>                         $cartData[$index]['qty'] = $data['qty'];

您可能会注意到他们禁用了 $filter->filter 和 trim。

这不会将电子商店暴露给 SQLInjections 或类似的任意代码执行吗? magento 之前是否执行过另一项检查以将此数据存储在数据库中?

4

1 回答 1

0

之前开发者移除的过滤器函数不用于过滤 SQL 注入或其他安全风险的输入。它们用于将本地化输入转换为无论语言环境如何都可以处理的标准形式。这是第一个差异的扩展上下文:

$filter = new Zend_Filter_LocalizedToNormalized(
    array('locale' => Mage::app()->getLocale()->getLocaleCode())
);
$params['qty'] = $filter->filter($params['qty']);

有关LocalizedToNormal功能的详细信息,请参阅 Zend 文档。

Magento 具有内置保护措施,可通过使用标准数据库类在构造查询之前过滤所有数据来防止 SQL 注入。该逻辑位于 Mage_Core_Model_Resource_* 类以及存储在 /lib/Zend 中的 Zend 库中。只要以前的开发人员没有修改这些类,就不应该有额外的 SQL 风险。

当然,跨站点脚本总是一个潜在的问题,但那里的风险通常更多地存在于视图层(PHTML 和块类)而不是控制器或模型层。

于 2012-08-26T16:28:51.810 回答