4

在标准的 Paypal IPN PHP 脚本中,有这行来评估支付是否成功:

if ($_POST["payment_status"] == "Completed" && $_POST["receiver_email"] == $email)

评估支付状态的目的是显而易见的。但据我所知,比较的第二部分似乎并没有增加太多价值。

$email我了解,价值只是您希望将错误和成功的付款确认电子邮件发送到的地方。这receiver_email只是在 Paypal 上附加到商家帐户的电子邮件。

在我看来,这些可能不是一回事。尤其是在使用 Paypal 沙箱进行测试时,它一直让我感到困惑,因为商家电子邮件地址部分是在我设置帐户时自动生成的,因此无论如何我都无法接收电子邮件。

因此,由于两个电子邮件地址可能不同,我最初的想法是这种比较并不那么重要。但也许我错过了一个重要的安全考虑。

这种比较是否重要?

4

1 回答 1

2

是的,在大多数情况下这是一项关键检查,因为如果您在发布请求(按钮)中发送 IPN,恶意用户可能会向他自己的 PayPal 地址付款。

由于您有 2 个贝宝帐户,因此更容易更换

$_POST["receiver_email"] == $email

in_array($_POST["receiver_email"], array("myemail1", "myemail2"))

就我个人而言,即使您的 IPN 网址被很好地隐藏并在您的帐户中配置,我也不会跳过接收者检查。我的简单方法将使您免受恶意请求的侵害。

于 2013-04-07T12:27:59.980 回答