警告正在使用由CosmoCommerce开发的Magento支付宝(Alipay)&快钱(99bill)支付插件的用户

今天在看Magento官网的免费版支付宝(Alipay)支付和快钱(99bill)支付插件,首先感谢开发者的共享精神,但发现一个严重问题,而且警告现在正使用这两个插件的用户。它们极其不安全,在后端接收支付网关的相关程序有严重安全漏洞,可以篡改订单的支付状态到已支付,实际用户并未支付。如果插件确认是下面列的版本,建议立即
停止使用。

        <CosmoCommerce_Alipay>
            <version>0.9.1</version>
        </CosmoCommerce_Alipay>
        <CosmoCommerce_Cosmo99Bill>
            <version>0.9.0</version>
        </CosmoCommerce_Cosmo99Bill>

直觉告诉我在MAGENTO CONNECT里由CosmoCommerce写的支付网关都有问题,没有时间做进一步验证。

缺陷解释,一般我们在开发支付接口的时候有验签和解签的动作,一般用户可以理解它为加密与支付网关之间的数据。而在接收支付网关的数据时我们必须做的两步:
第一是验签,即严正这个请求数据是否由网关发出的,不然任何一个人都可以更改订单状态。
第二是去重处理,即支付网关有可能重复发送支付结果给你的网站,如果不做去重处理,已经到已完成的订单很可能又会回到处理中状态(取决于支付插件的配置—支付成功后的订单状态)。

而这两个插件的接收参数端没有对以上两点做任何的处理。结论是,任何一个人都可以修改订单状态,已经到已完成的订单又会回到处理中状态,有经过实际测试!简单到访问这个URL就可以:

https://www.somestore.com/cosmo99bill/payment/notify/?reference=100000009
http://www.somestore.com/alipay/payment/notify/?trade_status=TRADE_FINISHED&out_trade_no=100000008

我带大家看一段代码,用来解释,请打开这个文件 app/code/community/CosmoCommerce/Alipay/controllers/PaymentController.php
下面这段代码就是对应的上面的URL(http://www.somestore.com/alipay/payment/notify/?trade_status=TRADE_FINISHED&out_trade_no=100000008)

    public function notifyAction()
    {
        //WEMVC:这里是获取参数代码
        if ($this->getRequest()->isPost())
        {
            $postData = $this->getRequest()->getPost();
            $method = 'post';
 
 
        } else if ($this->getRequest()->isGet())
        {
            $postData = $this->getRequest()->getQuery();
            $method = 'get';
 
        } else
        {
            return;
        }
 
        //WEMVC:问题就在这里,开发者没有经过任何验签过程直接改了订单状态。同时也没有去重处理。
        if ($postData['trade_status'] == "TRADE_FINISHED")
        {
            $order = Mage::getModel('sales/order');
            $order->loadByIncrementId($postData['4']);
            //$order->setAlipayTradeno($postData['trade_no']);
            $order->setStatus(Mage_Sales_Model_Order::STATE_PROCESSING);
            // $order->sendNewOrderEmail();
            $order->addStatusToHistory(
            $order->getStatus(),
            Mage::helper('alipay')->__('买家已付款, 等待卖家发货。'));
            try
            {
                $order->save();
            } catch(Exception $e)
            {
                ;
            }
 
 
        }
 
        return;
    }
  1. Hi, 我从阿水那里了解到你是做Magento开发的。我现在有一些Magento开发的业务,想请你出来聊一聊。有意的话,请联系我,我加你QQ了,你也可以发我邮件 zhl***@gmail.com。

    • elenson
    • 07月 19th, 2010 10:35am

    你怎么不修复下这个呢?

    • jakyou
    • 07月 20th, 2010 3:10pm

    如何修复?能否修补这个bug,是它们安全完整?

    • 精东
    • 07月 23rd, 2010 1:28am

    @elenson
    会修复的

    • 精东
    • 07月 23rd, 2010 1:30am

    @jakyou
    增加验签和去重代码 过段时间会分享代码出去 也可以看看MAGENTOCHINA的TENPEY插件 写得还不错

    • af
    • 08月 1st, 2010 1:32am

    1 我不太喜欢你这个言辞,你应该帮忙建议(开源是个社区,不是我们做的一个商业产品,有问题什么问题都告诉我们,我们也会尽可能去维护)。 你知道只是警告,没办法促进开源社区进步的(这是目前国内没有开源成功的原因,大家没有拧成一个方向用力气)。当然从这篇文章我终于看到你的理由了(之前我只是到处看到你写警告)。 我们这个开源的版本的确存在这个问题,其他几个未开源接口(工商银行接口)没问题,只是因为这个接口做的很早,那个时候有两个验签方式,我们改了一次换成notify机制没有补上验签。不过目前用户没有提出问题,我们也会今天尽快进行更新这类开源接口代码。我相信这个接口帮助了很多程序员,也包括很多开店者,并不是以加害者身份站在他们身后。

    2 快钱的接口我们几乎还没给出订单状态更新return url这个功能,你看到的这个action只是一个测试函数。快钱的回调也需要一些时间(我们需要把快钱官方的receive代码集成进来)。

    3 我由衷感激你和另一位网友帮忙我获得宝贵反馈! 之前我还在怀疑你是网上的枪手和竞争对手的写手,看了博文以后这个疑虑打消了,的确代码和项目非常多,我很难保证这个开源的版本和其他项目的一致,你看到了问题,也给我们敲响了警钟,需求变化时候进行迁移和控制的管理要加强。

    如有任何疑问可以联系我:

    gongyu*****@cosmocom***e.com
    毛功缘
    138189******

    • af
    • 08月 1st, 2010 5:49am

    已经更新,谢谢精东。 请老版本用户更新至新版本

    • 精东
    • 08月 4th, 2010 1:59pm

    功缘兄,

    首先请原谅我用词的不当,我非常赞同你的观点。
    “警告”标题,主观上是警告现在用这两个插件的用户,出于资金安全的考虑,并非加害者身份。如若我是加害者,我为何不去利用漏洞去黑店?而是公布于众、督促大家主动防范。它们确实有很大风险,希望您能理解。

    最近工作比较忙,希望日后我们能够共同促进Magento在中国的发展。

    精东

    • af
    • 08月 6th, 2010 6:34am

    精东,

    呵呵,好的。 祝你们做大做强。 一起把整个产业环境做好。
    相信你们的实力和信念。

    祝成功!

    • jakyou
    • 11月 26th, 2010 10:31pm

    你好,由于TENPEY插件是付款的,请问是否能有MAGENTOCHINA的TENPEY插件的源码?仅供学习。

  1. 还没有引用通告。