使用PHP保护第三方API凭证并包含

时间:2014-05-24 17:57:21

标签: php api security curl include

我正在编写一系列与第三方API交互的函数,这些API将包含在其他PHP脚本中。这些第三方API中的大多数都使用基于令牌的身份验证,因此我想在函数中存储这些令牌,但我想知道防止在包含的文件中利用这些函数的最佳做法是什么。

例如,在名为~/public_html/includes/functions.php的脚本中,我将定义一些使用cURL调用公共API的函数,然后从API返回某种响应。然后,在我的应用程序中,我将包含~/public_html/includes/functions.php并调用函数与第三方API进行交互。

我担心的是,如果其他人在他们的脚本中包含http://www.example.com/includes/functions.php,并开始调用我的函数来使用我的凭据进行API调用? functions.php应该住在其他地方,可能在~/public_html目录之外吗?或者我可以使用UNIX权限来阻止除我自己的应用之外的任何人包含functions.php脚本?

1 个答案:

答案 0 :(得分:1)

  

如果其他人包括,我的担心是什么   http://www.example.com/includes/functions.php在他们的剧本中,和   开始调用我的函数来使用我的凭据进行API调用?   应该将functions.php放在其他地方,也许是在其他地方   〜/ public_html目录?或许我可以使用UNIX权限来防止   除了我自己的应用程序以外的任何人都包含functions.php脚本吗?

你在这里混淆了很多东西。长话短说:你不应该担心。我详细解释了如何使用网址in this answer。以下是您的摘要。

具体而言,虽然可以使用include来包含完整的网址,例如include('http://www.google.com/');,但您从include获得的唯一内容是页面的最终呈现内容。 100%没有函数,类,变量,字符串,常量或PHP代码内部包含的任何内容。或者非常清楚地解释in the PHP documentation you are linking to;强调我的:

  

如果在PHP中启用了“URL include wrappers”,则可以指定该文件   使用URL包含(通过HTTP或其他支持的包装器 - 请参阅   支持协议列表的协议和包装器)而不是   本地路径名。如果目标服务器将目标文件解释为PHP   代码,变量可以使用URL请求传递给包含的文件   与HTTP GET一起使用的字符串。 严格来说,这并不严格   包含文件并让它继承父文件的东西   变量范围;该脚本实际上是在远程服务器上运行的   然后将结果包含在本地脚本中。

因此,您无法以您描述的方式远程包含凭据或任何PHP内部。可能发生的唯一方法是在本地包含~/public_html/includes/functions.php。那是PHP内部暴露的时候。

或者更好的理解方法:当您通过http://https://请求PHP文件时,会对其进行解析&通过Apache中的PHP模块处理。所以它只返回最终产品 - 如果有任何帖子经常由echo声明传达。

但是当您通过本地文件系统包含文件时,Apache中的PHP模块不会解析它。它只是原始代码。这就是你如何使用PHP代码内部包含的函数,类,变量,字符串,常量和任何东西。