2015-04-05 71 views
0

我有一個我想限制訪問的API。我可以提供訪問密鑰並在每次請求時檢查它們,但我不確定這將會走多遠。如何使Web API私有

該API由應用程序使用,但它也被某個Web應用程序使用,該應用程序只能查看源代碼。如果他們這樣做了,他們將擁有密鑰並可以輕鬆地進行API調用。

有沒有一種更可靠的方法來保護訪問?我不確定這裏的標準做法是什麼。

編輯:思考完後,我可以使用雙叉法。 Web應用程序可以使用POST和CSRF,並且應用程序可以使用API​​密鑰。任何其他想法,或者這是一個普遍接受的解決方案? (請注意,這仍然不適用於第三方Web應用程序。)

回答

1

您的API從不是私有的,因爲它被我假設的一個Web應用程序使用,可供公衆使用。如果是這樣的話,確實沒有動力來保護它,因爲任何人和每個人都可以訪問API。

另一方面,如果此Web應用程序僅適用於註冊用戶,則可以使用令牌系統檢查授權。當用戶成功登錄時,您會傳回一個令牌(通常長度爲20到30個字符)。每個API請求都需要一個有效的令牌。如果您的應用程序需要更高的安全閾值,可以將令牌設置爲在創建X小時後自動過期(使用數據庫作業)。如果安全問題不是一個大問題,那麼每次提出請求時都可以自動更新。

這基本上是一個兩層的方法。生成臨時令牌以供用戶直接連接到您的API,以便永久憑據永遠不會發送到客戶端。預定義的密鑰提供給在API之上構建應用程序並擁有自己的後端的第三方開發人員。

+0

對,問題是網絡應用程序是公開的。然而,我的CSRF思想基本上遵循相同的原則,而不是要求登錄和生成令牌。 – 2015-04-05 04:52:14

+0

@LukeSapan CSRF與公共或私有API無關。無論如何,當API向公衆開放時,爲什麼攻擊者想模仿您網站上的另一個匿名用戶? – 2015-04-05 04:59:10

+0

我更多的是試圖阻止API在未經授權的應用程序中使用。通過在不使用API​​密鑰時添加CSRF要求,這使得它變得更加困難(儘管我認爲技術上仍然可行)。 – 2015-04-05 05:01:45

0

如果是您的API,則可以簡單地執行此操作。

1)將以下代碼到您的API文件(S)

$authToken = "APItoken"; //variables 


if(!isset($_REQUEST["authToken"]) || $_REQUEST["authToken"] != $authToken) 
die("Need auth token"); 

2)您現在需要GET/POST/PUT的URL是這樣的: http://www.yoursite.com/api1.php?authToken=APItoken&nextParam=&paramAfterThat=

如果這有助於請將其標記爲答案

編輯:

沒關係,看錯了。幾分鐘後更新答案。