【问题标题】:Paypal Security Flaw?贝宝安全漏洞?
【发布时间】:2013-04-15 03:28:23
【问题描述】:

我在预订流程结束时有以下表格(简化版):

<form action="https://www.paypal.com/cgi-bin/webscr" name="paypalForm" method="post">
<input type="hidden" name="amount" value="<?=$price;?>">
<input type="hidden" name="business" value="business@email.co.uk">
<input type="hidden" name="notify_url" value="http://website.co.uk/ipn">
</form>

我只省略了地址名称等内容。因此,当他们通过 Paypal 付款时,我使用 paypal IPN 在数据库中将它们标记为已付款。 然而..

我已经到了我的预订系统的末尾并查看了网页的来源,修改了企业电子邮件地址和金额。我还没有尝试过完整的交易,但肯定有 Paypal 中的“notify_url”向我的服务器发送 IPN 消息并将此人标记为已付款?这不是可怕的安全吗?当然这不是所有贝宝付款的运作方式,我一定是遗漏了一些东西。

我能想到有两件事可以防止这种情况发生:

  1. 如果我删除“notify_url”,我在 in paypal 中设置的 IPN URL 是否可以代替? paypal 在隐藏变量notify_url 上设置了什么值,它会覆盖paypal 后端的设置吗?
  2. 在我的 IPN 代码中,我可以检查业务和金额。我目前没有,因为我没有阅读文档中我应该阅读的任何地方。但现在,我想这可能是一个非常好的主意。

【问题讨论】:

    标签: php security paypal paypal-ipn


    【解决方案1】:

    PayPal 无法进行任何检查以了解正确的金额或使用的电子邮件地址,或者 IPN URL 是否应仅用于特定的 PayPal 帐户。您的选项将写在您已经提到的附加检查中。除了您已经说明的两种解决方法之外,第三种选择是使用 PayPal 的BMCreateButton API 即时创建托管或加密按钮。然后买家只会看到加密的按钮代码,他们将无法查看您的 HTML 按钮代码。因此,他们将无法修改任何变量,也无法查看它们当前的设置。

    【讨论】:

    • 嗯,好的,谢谢!!我为此绞尽脑汁,因为这对我来说似乎很奇怪。不过谢谢你的回复。