自定义 PayPal 按钮的自动 OpenSSL 加密? PHP

Posted

技术标签:

【中文标题】自定义 PayPal 按钮的自动 OpenSSL 加密? PHP【英文标题】:Automatic OpenSSL encryption for custom PayPal Buttons? PHP 【发布时间】:2016-07-09 15:37:49 【问题描述】:

我目前正在尝试将 PayPal 立即购买功能添加到我自定义创建的第三方购物车中。通常,这些按钮仅包含有关正在购买的特定商品的信息,出于安全原因,这些信息是通过 PayPal 网站手动输入的,但是我也可以选择使用 php 动态创建信息以注入正确的信息 - 这一切都很好,但是因为该按钮不是在 PayPal 网站上创建的,它没有使用标准加密来保护它不被篡改。

在 PayPal 网站上,他们概述了加密方法,其中包括使用 OpenSSL 创建私钥、公共证书以及加密 PayPal 按钮代码的方法。创建密钥和证书听起来不错,但是当需要对按钮代码本身进行加密时,PayPal 要求我手动将命令输入到下载的 OpenSSL 程序中以输出加密代码 - 但是这对我的购物车来说是不可能的,因为事实上,购物车内容是动态的并且一直在变化,因此每次有人访问“购物车页面”时我都需要一个全新的加密按钮。

问题:所以我想知道是否可以使用诸如openssl_encrypt() 之类的PHP 函数来处理加密过程,而不是依赖手动操作。这可能吗?这还安全吗?

注意:下载的 OpenSSL 软件连同必要的密钥位于我的网络服务器上

我强烈建议快速查看此链接,以获取有关 PayPal 概述的简短加密过程的更多信息:https://developer.paypal.com/docs/classic/paypal-payments-standard/integration-guide/encryptedwebpayments/#id08A3I0P0MRO 有关输入手动命令的信息,请单击链接并向下滚动到“使用下载的软件手动加密支付按钮代码”标题。

PS:这是我第一次处理任何类型的加密或 OpenSSL

有什么想法吗?

【问题讨论】:

【参考方案1】:

由于时间限制,我只是浏览了 PayPal 文档。

首先,在不知道自己在做什么的情况下使用任何类型的加密都是不好的,并且很容易导致安全问题。

但是让我们看看你想要实现什么以及我“阅读”了什么。

您必须上传您的公钥(不是您的私钥)并下载他们的公钥(证书)。

"Encrypt the payment button code" 这个词听起来不对,因为您可能只需要加密一些参数(但在我所拥有的短时间内,这会涉及太多细节)。

无论如何,这个“按钮代码”必须使用他们的公钥/证书进行(非对称)加密,这意味着只有 PayPal 才能解密它。

在下一步中,这个“加密按钮代码”必须使用您的私钥进行签名。然后 PayPal 可以检查消息的真实性,因为他们拥有您的公钥(并且只有您能够对其签名 - 所以请确保您的私钥安全!)。

string openssl_encrypt ( string $data , string $method , string $password [, int $options = 0 [, string $iv = "" ]] )

或许

int openssl_seal ( string $data , string &$sealed_data , array &$env_keys , array $pub_key_ids [, string $method = "RC4" ] )

是可以使用的方法。

或者,可以直接调用 openssl 二进制文件来完成这项工作。

无论如何,你应该小心:

仔细验证所有输入,因为您可能会签署恶意数据

如果您直接调用二进制文件,请确保您不会实现任何类型的 os 命令注入漏洞。

【讨论】:

是的,我目前正在追求使用 openssl 二进制文件来完成这项工作的想法,这似乎是我工作的最佳解决方案。感谢 os 命令注入漏洞警告,请注意。 (另外,是的,我的意思是公共证书而不是私钥对不起)

以上是关于自定义 PayPal 按钮的自动 OpenSSL 加密? PHP的主要内容,如果未能解决你的问题,请参考以下文章

具有数字服务自动交付功能的 PayPal [关闭]

“立即捐赠”按钮的 Paypal 自定义金额

具有自定义价格的 Paypal 按钮

自定义 PayPal 捐赠按钮以将信息传递到 PayPal 页面

Paypal 结帐按钮未将自定义字段传递给 PIN 消息

Paypal 支付按钮和自定义选项