0

所以很明显,paypal API 代码不是很容易阅读或理解,提供的文档也不是。这个人同意我的看法。

如果您在 PayPal 文档中花费了超过几分钟,您就会知道手动解密 1024 位 RSA 私钥比了解 PayPal Digital Goods with Express Checkout API 更容易。

所以我终于想通了如何通过这个示例代码让 PHP 与 paypal API 进行通信:

https://ppmts.custhelp.com/app/answers/detail/a_id/945/kw/php

然而 PayPal 完全远离他们提供的样本,他们必须对开发人员花费数小时来弄清楚系统感兴趣,而不是仅仅给他们提供易于实施的代码并开始获得报酬。我想知道他们是如何取得如此成功的...

事实上,示例代码甚至说它不安全,不应该用于生产:

// Set API creds and version greater than 65.1, also set endpoint and redirect url

//**************************************************// 
// This is where you would set your API Credentials // 
// Please note this is not considered "SECURE" this // 
// is an example only. It is NOT Recommended to use // 
// this method in production........................// 
//**************************************************//   

$APIUSERNAME  = "xxxx";   
$APIPASSWORD  = "xxxx";   
$APISIGNATURE = "xxxx";   
$ENDPOINT     = "https://api-3t.sandbox.paypal.com/nvp";  

本质上,这些变量用于创建一个字符串,其中包含有关购买的所有信息以及 API 凭证。字符串由每个索引和值对组成,并用与号等连接$req_str = "USER=xxxx&PWD=xxxx";。这个字符串被传递给一个函数PPHttpPost($ENDPOINT, $req_str);。此函数使用curl_init();和相关函数以某种方式与贝宝服务器通信并返回一个唯一键来识别交易及其价值。

我不确定这个函数是如何工作的,但它列在我上面提供的“functions.php”下的链接中。

两个问题:

1.) 为什么这不被认为是安全的?

2.) 如果通过将 API 凭证写入变量来告诉应用程序您的 API 凭证是不安全的,那么什么是

4

1 回答 1

2

1.) 为什么这不被认为是安全的?

因为这些值是写在文档根目录内的普通 .php 文件中的。如果由于某些错误配置,您的 .php 文件最终被用作常规文本,或者您允许写入包含相关行的堆栈跟踪,那么您只是将您的秘密泄露给了所有人。这种情况发生的频率比你想象的要多。

2.) 如果通过将 API 凭证写入变量来告诉应用程序您的 API 凭证是不安全的,那么什么是?

您当然可以将它们放在变量中,但人们普遍认为,在其中获取值的方法(无论它们是数据库凭据、API 密钥还是其他秘密值)是从位于文档外部的配置文件中读取它们根,他们永远不会被意外送达。

PS。他们的示例代码也对 URL 编码和 HTML 编码处理不当,导致可能的 XSS。如果我是他们,我也会远离它!

于 2013-07-10T20:54:51.687 回答