PayPal金额篡改

use*_*216 3 php security paypal tampering

我之前从未做过Paypal集成,但是我曾与其他网关合作过.

对于其他网关,还有一个哈希值也会在表单中发送,这会阻止人们篡改数据,即更改数量.

如何用paypal停止这种篡改,似乎没有任何哈希.

<form method="post" action="https://www.sandbox.paypal.com/cgi-bin/webscr">
  <input type="hidden" value="_xclick" name="cmd">
  <input type="hidden" value="online****@theg*****.com" name="business">
  <!-- <input type="hidden" name="undefined_quantity" value="1" /> -->
  <input type="hidden" value="Order" name="item_name">
  <input type="hidden" value="NA" name="item_number">
  <input type="hidden" value="22.16" name="amount">
  <input type="hidden" value="5.17" name="shipping">
  <input type="hidden" value="0" name="discount_amount">        
  <input type="hidden" value="0" name="no_shipping">
  <input type="hidden" value="No comments" name="cn">
  <input type="hidden" value="USD" name="currency_code">
  <input type="hidden" value="http://XXX/XXX/XXX/paypal/return" name="return">
  <input type="hidden" value="2" name="rm">      
  <input type="hidden" value="11255XXX" name="invoice">
  <input type="hidden" value="US" name="lc">
  <input type="hidden" value="PP-BuyNowBF" name="bn">
  <input type="submit" value="Place Order!" name="finalizeOrder" id="finalizeOrder" class="submitButton">
</form>
Run Code Online (Sandbox Code Playgroud)

那么如何才能阻止人们在发布到PayPal之前修改金额?即数量应为100但人们将其更改为1.

And*_*ndy 5

有几种方法可以防止这种情况发生.首先是使用PayPal的即时付款通知(IPN).使用此功能,您可以将PayPal发回给您的价格进行比较,以确认它们符合您的预期.如果它们不匹配,则取消订单.

示例工作流程:

  • 用户订购商品并将价格修改为0.01美元
  • 订单发布到PayPal,显示价格为0.01美元
  • 用户接受价格并支付0.01美元
  • PayPal会调用您的IPN URL并发布交易详情,显示该用户为某件物品支付了0.01美元
  • 您的IPN会检查PayPal收到的价格(0.01美元)以及您所期望的价格(> 0.01美元).由于它们不匹配,您取消订单

PayPal IPN流程

另一种选择是使用PayPal的Button API来创建动态加密按钮.它们嵌入到您的页面中,用户单击它以进行订购.由于它是加密的,因此用户无法在事务期间可靠地修改源代码.这个答案中提供了一个很好的例子.此外,您可以将其与上面列出的IPN选项结合使用,以充当对事务的良好审计