2013-07-10 37 views
0

所以很显然,贝宝API代码不是很容易阅读或理解,也没有提供的文档。 This guy agrees with me.如何通过PayPal API凭证安全地使用PHP(以及为什么这不被认为是安全的)

如果你不是PayPal的文档在几分钟内花了,你就会知道它更容易手动解密有1024位的RSA私钥比理解PayPal的数字商品与快速结账API。

所以,我终于想通了如何让PHP通过此示例代码使用PayPal的API进行通信:

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

但是贝宝完全距离自己从他们提供的样品,他们必须有一个对开发人员花费数小时的时间来计算系统的兴趣,而不是只给他们易于实现并开始获得报酬的代码。我不知道他们是如何得到如此成功......

作为事实上的示例代码甚至说,这是不安全的,不应该用于生产:

// 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();和相关函数以某种方式与PayPal服务器进行通信,并返回一个唯一的密钥来标识事务及其值。

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

两个问题:

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

2)如果它不保证通过写他们到变量,来告诉你的API证书的应用,又是什么

回答

2

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

因为这些值是在文档根目录内的普通.php文件中写入的。如果由于一些错误配置,你的.php文件最终会变成常规文本,或者你允许包含有问题的行的堆栈跟踪被写入,那么你只是泄漏了所有和各种各样的秘密。这种情况发生的频率比你想象的要多。

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

你当然可以把它们放在变量中,但通常认为获取值的方式 - 无论它们是数据库凭证,API密钥还是其他秘密值 - 都是从配置文件中读取它们它们位于文档根目录之外,它们永远不会被意外地提供。

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

+0

“URL编码和HTML编码处理不当”像什么和在哪里? – olli

+1

注入'$ req_str'的​​变量都不是URL编码的,因此任何这些变量中的任何URL特殊字符(例如'&')都会将其分解。 'return.php'在一个字符串中构建一个HTML页面,其中包含不带'htmlspecialchars()'的响应中的值,从而允许响应的供应商将脚本内容注入到页面中。好的,供应商是贝宝,所以你希望他们不会试图利用你,但它仍然是错误的行为和蹩脚的代码症状。 – bobince

+0

我会推荐使用PHP SDK从这里:http://paypal.github.io/#merchant – Praveen

相关问题