php - 根据 2016-2017 安全升级处理 Paypal IPN

标签 php paypal paypal-ipn paypal-sandbox

我对 2016-2017 Merchant Security Roadmap 有疑问.我多年来一直在运营一个使用 Paypal 的网站,并希望遵守 IPN Verification Postback to HTTPS要求。我担心我在这里收到的任何答复都不是来自 Paypal 代表的官方答复,但看来我别无选择,因为 PayPal support page此处的“询问我们的社区”链接点。

根据我对 IPN 验证回发到 HTTPS 要求的理解,它指的是我的网站向 paypal 网站回发以验证任何传入的 IPN。但是,该文档令人困惑,因为它引用了一些我从未在我的代码中使用过的 url,即 ipnpb.paypal.comipnpb.sandbox.paypal.com

我希望有人能为我回答这些问题:

1) 我的代码回发到 https://www.sandbox.paypal.com/cgi-bin/webscr 用于沙箱或 https://www.paypal.com/cgi-bin/webscr 用于生产操作。这些 paypal 端点会继续工作还是我必须更改它们?

2) 如果您向传入的 IPN 请求发送 301 或 302 重定向, Paypal 网关是否会遵循重定向并将 IPN 重新发布到新的 url? PayPal 是否会在 IPN 尝试中失败?

3) 如果我修改我的 IPN 处理 url 以发送 400 BAD REQUEST,如果有任何不安全的(即非 HTTPS)请求访问它会怎样? PayPal 系统会采取任何行动,还是会因为我拒绝回复而丢失通知?

4) 鉴于 Paypal 似乎为每笔交易/定期付款/订阅存储了 IPN 网址,如果 Paypal 系统为 IPN 通知指定了非 HTTPS 链接,那么 Paypal 系统将如何处理我的旧交易? paypal 会直接切换到 HTTPS 吗?订阅/交易/任何东西会被取消吗?如果我们想要遵守,这似乎是非常重要的信息。

编辑:我会在这些问题中再添加两个:

5) paypal 是否提供在我的帐户上尝试的传入 API 请求的日志,以便我可以检查是否使用 GET 而不是 POST?

6) paypal 是否有任何 UI 或界面,我可以在其中获取可能为我的系统生成 IPN 的操作列表,以便我可以检查 IPN url?我的网站在我们的网站上使用了 3-5 个不同的 url 来进行 IPN 报告,我们仍然在其中一些网站上收到 IPN。很高兴看到我们是否可以淘汰一些旧的 IPN 脚本并检查是否使用了 HTTPS 或 HTTP。

最佳答案

绝对非官方,但由于指令实际上是在一年前发布的(并修改为将实现推迟到 2017 年),只是分享早期实现的经验 - 我错过了延期通知:)

  • 底线:TLS 1.2 用于ALL与(绑定(bind))Paypal 的安全通信

    PayPal is upgrading the protocols used to secure all external connections made to our systems.

    如果您完成了这项工作(如果您支持大量遗留资源,这可能会很困难),那么就安全路线图而言,您应该是“优秀的”。

    强调 to 是我的,因为他们没有提到与 your 资源的 Paypal 通信(相反:Paypal -> your site)。然而,恕我直言,作为一个电子商务应用程序,并且在经历了实现的努力之后,我努力寻找一个理由,不在您的应用程序中为任何/所有电子商务/支付相关流程实现它(redirecturl , cancelurl 等)

您可以验证/测试您的设置为 described here - 包括您关于重定向、错误代码的问题。通过 IINM,Paypal 文档包含有关如何正确响应 IPN 消息(或与此相关的任何 API)的协议(protocol),以及故障协议(protocol)(例如 retry mechanism)

您的最后一个问题(订阅)最好由 Paypal 回答。我对此事的看法可以追溯到“底线”——全面实现 https/TLS 1.2..

嗯..


更新

fails completely to address 301/302 redirects. It does seem to address what might happen if I send a 400 response. Sounds like that would result in PayPal retrying an IPN up to 15 times

  • 所有 API 都有协议(protocol)供使用。 official protocol for IPN状态:

    After receiving the IPN message from PayPal, your listener returns an empty
    HTTP 200 response to PayPal. Otherwise, PayPal resends the IPN message.
    

    如果您想测试“否则”(回复:如果 30x/40x 或除空 200 之外的任何 http 响应怎么办) ,那么您可以 - 但协议(protocol)已记录在案。

    注意:https://ipnpb.x.x 端点也在此处记录

  • 至于端点 URL - 安全升级是关于 HTTP 1.1 和 TLS。 documents include the base urls你提到(关于何时准备好进行测试以及何时执行生产限制的日期)-回复:所以在 HTTP 1.1/TLS 1.2 的上下文中,无论什么 API 端点资源(完整路径 - [baseurl]/some/resource/endpoint) 包含在安全更新中。

    我不为 Paypal 工作,也没有声称精通他们的所有 API。我会查看您正在使用的特定 API 并检查 API 级别更改 - 重新:端点/资源/字段等,如果有的话(ipnpb 资源是一些 API 级别更改的示例/更新)。

关于php - 根据 2016-2017 安全升级处理 Paypal IPN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42377941/

相关文章:

soap - 您无权使用 SOAP for DoDirectPaymentReq 进行此 API 调用

javascript - 防止 PHP/JavaScript/JQuery 中的表单操作 (PayPal)

php - preg_match_all 完美匹配英语单词,但与希伯来语单词不匹配

paypal - 如何以健壮的方式实现 Paypal 代码

php - 如何在使用 mysql php 查询别名列之间运行

php - Paypal IPN 总是 "INVALID"- 字符集相关?

paypal - 使用即时付款通知取消 Paypal 定期付款

paypal - 修改现有的 Paypal 配置文件经常到期日

php - 使用 mysql 存储函数和选择查询

php - 警告 : mysql_query(): supplied argument is not a valid MySQL-Link resource in