我有个商业站点,是用php开发的,有个订单系统昨天出了问题。昨天有个新注册的会员,他登录后,直接下订单购买商品,第一次购买了一个标价1元的商品,但奇怪的是,他提交成功后的订单价格变成了0元,由于他的会员余额是0,居然也提交购买成功了。我不知道他是如何将进入订单的商品价格由1元修改成0元。过了几分钟后,他第二次订购了一个标价为100元的商品,他成功的将订单价格修改为-700,并且提交成功。(这个订单漏洞我已经修改了代码)我奇怪的是他是如何修改订单价格的?因为我看了apache的日志系统,他访问的订单页面,没有多次刷新页面测试现象,也没有输入优惠码的行为,一气呵成,很连续的直接点下一步就提交了。虽然订单漏洞已经被修补,但是我一直想不明白,这位兄弟是如何做到在订单提交前修改了订单金额?
临时测试网址:猛击这种里!欢迎大家前往测试,注册会员后,直接点“订购”看看有没有人能够将历史重演,帮我解开心中的疑惑

解决方案 »

  1.   


    嗯,商品的价格字段是:int(11)会员的余额字段是:decimal(10,2)我在会员下单前,有个比较:
    $if(会员余额 < $ 订单总金额)
    {
       //提示:您的余额不足,请先充值
    }
    else
    {
       //订单成功,将用户余额减掉订单总金额,以及后缀操作
    }
    这个一般没问题,因为订单都是>0以上的。(如果订单价格变成0,用户可以成功订单任何商品,太危险了。而如果果订单价格变成负数,用户订单成功不说,而且系统扣除用户的订单金额时,减掉一个负数,等于加上一个正数了,也就是说,该用户的订单价格变成负数后,不仅购物成功,而且还将自己的余额+上了订单价格)奇怪的是,那个人,是如何将订单的金额变成0和负数的?因为进入购物车时,是无法修改订单价格的。对了,我的订单第一步,是将查询好的商品价格进行SESSION保存到最后一步,再用SESSION取出商品价格变量难道是这个出了问题?用户可以修改SESSION变量中的商品价格?但是,用户他并不知道我的SESSION变量的商品价格的名称是什么呀
      

  2.   

    alibaba 很容易就修改订单了。- -;;