带有Wepay-rails宝石的Rails购物车结账,避免在结账时返回安全漏洞

时间:2013-04-10 21:26:23

标签: ruby-on-rails ruby e-commerce

我一直在尝试使用我的rails应用程序设置wepay-rails gem https://github.com/adamthedeveloper/wepay-rails,并且已经成功地这样做但是我已经意识到,由于我的设置,用户可以继续他们的订单的一部分,然后打开一个新的选项卡,创建一个新的订单,然后返回到第一个选项卡,允许他们完成他们在第一个项目上的结帐,但将第二个项目标记为已付款。

我已遵循自述文件中的指南,以实现我当前的设置:

class Purchase::CheckoutController < ApplicationController
  include WepayRails::Payments
  def index
    begin
      @order = Order.find(session[:order_id])
    rescue
      redirect_to :root
      flash[:warning] = "You do not currently have any pending orders."
      return
    end
    @item = Item.find(@order.item_id)
    checkout_params = {
      :amount => @order.total.to_f,
      :short_description => "Order",
      :long_description => "Your order for #{@order.quantity} #{@item.name.pluralize(@order.quantity)} ",
    }
    init_checkout_and_send_user_to_wepay(checkout_params)
  end
end

用户在返回时重定向到的控制器:

class Purchase::FinalizeController < ApplicationController
  def index
    # Fetch the WepayCheckoutRecord that was stored for the checkout
    wcr  = WepayCheckoutRecord.find_by_checkout_id(params[:checkout_id])

    @order = Order.find(session[:order_id])
    @order.wepay_checkout_record = wcr
    @order.paid = true if wcr.state == 'authorized'
   @order.save

    redirect_to :root, :notice => "You have completed your purchase."
  end
end

安全问题本身非常明显,如果您在订单中间更改会话ID,那么在返回时错误的订单会被批准。问题是init_checkout_and_send_user_to_wepay没有返回任何值,我可以使用它来立即将订单和结账记录捆绑在一起。我使用这个插件是错误的,还是只是遗漏了一些明显的东西?

谢谢大家的帮助!

0 个答案:

没有答案