簡體   English   中英

在PHP中保護第三方API憑證並包括

[英]Securing third-party API credentials in PHP and 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腳本?

我擔心的是,如果其他人的腳本中包含http://www.example.com/includes/functions.php ,並開始使用我的憑據來調用我的函數以進行API調用? functions.php是否應該存在於其他地方,也許在〜/ public_html目錄之外? 或者,也許我可以使用UNIX權限來阻止除我自己的應用程序之外的任何人都包含functions.php腳本?

您在這里混淆了很多事情。 長話短說:您不必擔心。 我對這個答案中的 include如何與URL結合使用做了完整的解釋。 以下是針對您的目的的摘要。

具體來說,雖然可以使用include包含完整的URL,例如include('http://www.google.com/'); 你得到的唯一include在頁面的最終呈現的內容。 100%沒有函數,類,變量,字符串,常量或該PHP代碼內部包含的任何內容。 或正如您鏈接到的PHP文檔中清楚解釋 ; 我的重點:

如果在PHP中啟用了“ URL包含包裝器”,則可以使用URL(通過HTTP或其他受支持的包裝器-請參見受支持的協議和包裝器以獲取協議列表)而不是本地路徑名來指定要包含的文件。 如果目標服務器將目標文件解釋為PHP代碼,則可以使用與HTTP GET一起使用的URL請求字符串將變量傳遞到包含的文件。 嚴格來講,這與包括文件並讓其繼承父文件的變量作用域不同; 該腳本實際上是在遠程服務器上運行的,然后將結果包含在本地腳本中。

因此,您不能以您描述的方式遠程包含憑據(或任何PHP內部信息)。 可能發生的唯一方法是在本地~/public_html/includes/functions.php 那就是暴露PHP內部結構的時候。

或者更好的理解方式:當您通過http://https://請求PHP文件時,將通過Apache中的PHP模塊對其進行解析和處理。 因此,它只返回通常由echo語句傳達的最終產品(如果有的話)。

但是,當您通過本地文件系統包含文件時,Apache中的PHP模塊不會對其進行解析。 它只是原始代碼。 這就是您可以使用函數,類,變量,字符串,常量以及該PHP代碼內部包含的所有內容的方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM