paypal_adaptive gem 的安全问题

Posted

技术标签:

【中文标题】paypal_adaptive gem 的安全问题【英文标题】:Security concerns with paypal_adaptive gem 【发布时间】:2012-02-10 02:58:47 【问题描述】:

我在 Rails 3.1 中使用 paypal_adaptive gem 进行链式支付。然而,在观看http://railscasts.com/episodes/143-paypal-security 之后,我开始担心我可能应该在我的付款请求中添加安全措施。具体来说,我不希望有人能够操纵我在请求中发送的商品的价格。当然,我使用的是标准的 paypal_adaptive gem 请求:

pay_request = PaypalAdaptive::Request.new

data = 
"returnUrl" => "http://testserver.com/payments/completed_payment_request", 
"requestEnvelope" => "errorLanguage" => "en_US",
"currencyCode"=>"USD",  
"receiverList"=>"receiver"=>["email"=>"testpp_1261697850_per@nextsprocket.com",     "amount"=>"10.00"],
"cancelUrl"=>"http://testserver.com/payments/canceled_payment_request",
"actionType"=>"PAY",
"ipnNotificationUrl"=>"http://testserver.com/payments/ipn_notification"


pay_response = pay_request.pay(data)

if pay_response.success?
  redirect_to pay_response.approve_paypal_payment_url
else
  puts pay_response.errors.first['message']
  redirect_to failed_payment_url
end

我的问题是:我是否需要加密此请求以防止人们像 Ryan 在他的 rails cast 中那样更改价格?如果是这样,我该如何操作这段代码呢?

【问题讨论】:

【参考方案1】:

IPN 验证绝对是一个好习惯。但是关于加密发送的变量;不,那没有必要。

http://railscasts.com/episodes/143-paypal-security 上列出的示例使用网站支付标准,在这种情况下, 最好对其进行加密。

但 Adaptive Payments 是一系列从您的服务器到 PayPal 的服务器到服务器 API 调用(“支付”API)。唯一暴露给买家的部分是 payKey,这是一个买家无法操作的临时代币。

【讨论】:

谢谢,罗伯特!我会接受这个作为答案。但是有一个问题,有点不相关:我一直在使用这些 API 调用来访问沙箱中的帐户——你知道我是否需要 Website Payments Pro 才能在生产中进行这些 API 调用吗?我一直在努力寻找这个问题的答案,而且你似乎对 Paypal 很了解,所以我想我会问。 不,您不需要网站支付专业版;如果您想使用 DoDirectPayment API 调用,则需要使用 Website Payments Pro。对于自适应支付,您需要通过 x.com 提交申请,之后您将获得申请 ID。您需要确保在 HTTP 标头中传递此应用程序 ID(您可能已经在做这件事,现在在 Sandbox 中)。 我自己不使用 Adaptive Payments(我不需要链式/拆分式付款,因此我不需要它),但您可以在 paypal.com/dts 使用 PayPal 登录票证以获取启动应用程序所需遵循的确切步骤。 谢谢。非常有用的 cmets。

以上是关于paypal_adaptive gem 的安全问题的主要内容,如果未能解决你的问题,请参考以下文章

对贝宝 ipn 感到困惑和迷失方向

使用 Rails 3 的 PayPal 自适应支付

Github 警告关于 Omniauth gem 的安全问题

在 Ruby 中安全地需要 gem

如何安全地更新 Rails 应用程序中的所有 gem

用于安全支付的最佳支付网关和 Rails gem? [关闭]