Paypal 贝宝IPN认证协议是否足够安全?

Paypal 贝宝IPN认证协议是否足够安全?,paypal,paypal-sandbox,paypal-ipn,Paypal,Paypal Sandbox,Paypal Ipn,和我们中的许多人一样,我正在实施贝宝解决方案。通过阅读开发人员文档,我了解到IPN是一种异步消息协议,可以触发付款履行 PayPal有一种官方的方式来响应这些消息,以及如何在IPN侦听器上验证IPN消息的来源。侦听器从PayPal收到的每个IPN消息都包含一个用户代理HTTPS请求头,其值为PayPal IPN(),它们突出显示不要使用该头来验证IPN是否确实来自PayPal且未被篡改。相反,要验证这些内容,必须使用下面概述的IPN身份验证协议,该协议包括四个步骤 PayPal HTTPS向您的

和我们中的许多人一样,我正在实施贝宝解决方案。通过阅读开发人员文档,我了解到IPN是一种异步消息协议,可以触发付款履行

PayPal有一种官方的方式来响应这些消息,以及如何在IPN侦听器上验证IPN消息的来源。侦听器从PayPal收到的每个IPN消息都包含一个用户代理HTTPS请求头,其值为PayPal IPN(),它们突出显示不要使用该头来验证IPN是否确实来自PayPal且未被篡改。相反,要验证这些内容,必须使用下面概述的IPN身份验证协议,该协议包括四个步骤

  • PayPal HTTPS向您的侦听器发布一条IPN消息,通知其发生事件
  • 您的侦听器向PayPal返回一个空的HTTP 200响应
  • 您的侦听器HTTPS将完整、未更改的消息发回PayPal;消息必须包含与原始消息相同的字段(顺序相同),并且编码方式与原始消息相同
  • PayPal发回一个单词,要么经过验证(如果消息与原件匹配),要么无效(如果消息与原件不匹配)
  • 下图中的步骤2、3、4和5显示了该协议

    正如你在上面看到的,他们建议使用一条[VERIFIED]的[INVALID]消息来响应,以防止欺诈

    我的想法是,任何虚假的IPN模拟器都可以将“已验证”状态消息发回给侦听器,因此这毫无意义。因此,我的问题是:

    • 这种解决方案真的安全吗
    • 如果没有,什么方法可以真正防止欺诈并确保付款履行
    我想知道,如果我们能交换一把秘密钥匙,它会更可靠


    任何想法都是受欢迎的。谢谢。

    协议的安全性取决于贝宝TLS证书的验证


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

    此过程的安全性取决于您将验证请求发送给PayPal,而不是发送给攻击者:您只需将相关URL硬连接起来,而不是从请求中获取验证请求,即可实现此目的


    为什么他们不让你依赖客户端证书认证是另一个问题,但它已经有20年的历史了,而且设计得很糟糕。

    谢谢你的回答。我认为白名单IPN可以阻止真正的IPN,这在您的列表中并不存在。这可能会阻止在您的系统中成功注册付款。也许,交换一个秘密密钥会更有效。这是不正确的。这取决于您将验证请求发送给PayPal,而不是发送给攻击者:您只需将相关URL硬连接起来,而不是从请求中派生出来,就可以实现这一点。无论如何,贝宝都是连接到你的,而不是相反的。硬链接URL不能防止DNS欺骗和中间人攻击。你真的需要检查证书。谢谢你,我没有意识到有两个常量保存着paypal服务器的URL,这是有意义的。实际上,第一个实现是在2009年出现的,奇怪的是,示例代码看起来很聪明,但闻起来太多了。看起来,将应用程序机密作为要在服务器端进行比较的属性包含在其范围之外。