PayPal IPN身份验证协议是否足够安全?

时间:2018-06-10 06:48:46

标签: paypal paypal-sandbox paypal-ipn

正如我们许多人所做的那样,我正在实施PayPal解决方案。通过阅读开发人员文档,我了解到IPN是异步消息协议,可以触发付款实现。

PayPal有正式的方式来回应这些消息以及如何验证IPN侦听器上IPN消息的来源。收听者从PayPal收到的每条IPN消息都包含一个用户代理HTTPS请求标头,其值为 PayPal IPN(https://www.paypal.com/ipn他们突出显示不使用此标头验证IPN真的来自PayPal并且没有被篡改。相反,要验证这些内容,您必须使用下面概述的IPN身份验证协议,该协议包含四个步骤。

  1. PayPal HTTPS向您的侦听器发送IPN消息,通知其发生事件。
  2. 您的侦听器向PayPal返回一个空的HTTP 200响应。
  3. 您的侦听器HTTPS将完整的,未经更改的消息发送回PayPal;邮件必须包含与原始邮件相同的字段(按相同顺序),并以与原始邮件相同的方式进行编码。
  4. PayPal会发回一个单词 - VERIFIED(如果邮件与原始邮件匹配)或INVALID(如果邮件与原始邮件不匹配)。
  5. 下图中的步骤2,3,4和5显示了此协议。

    PayPal IPN Authentication flow

    正如您在上面所看到的,他们建议使用单个[已验证] [无效]消息进行回复,以防止欺诈。

    我的想法是,任何虚假的IPN模拟器都可以回复"验证"状态消息给听众,所以没有意义。因此,我的问题是:

    • 这个解决方案真的安全吗?
    • 如果没有,哪种方法可以真正防止欺诈并确保付款实现?

    我想知道,如果我们可以交换一个秘密密钥,它会更可靠。

    欢迎任何想法。感谢。

2 个答案:

答案 0 :(得分:0)

协议的安全性取决于对PayPal的TLS证书的验证。

由于某些CA未能检查他们颁发证书的人,因此您不能依赖于通过CA进行检查。您应该保留一份您信任的PayPal证书列表。然后在连接时验证使用的证书是否在列表中。进一步选择足够强度的加密方法。

答案 1 :(得分:0)

此过程的安全性取决于您将验证请求发送到PayPal ,而不是发送给攻击者:您只需通过硬连接相关URL即可完成此操作,而不是将其从请求。

为什么他们不仅仅要求您依赖客户端证书身份验证是另一个问题,但它已经20年了,即使在那时设计也很差。