2013-09-28 98 views
0

我有一個存儲用戶數據的網站。我正在開發一個Wordpress插件,允許其他網站訪問爲每個用戶存儲的數據並上傳新數據。確保API密鑰的安全

例如,喬在我的網站上創建一個帳戶並上傳信息。 Joe在他自己的網站上安裝插件,這將使他能夠訪問他存儲在我網站上的數據。

Joe網站的訪問者將能夠在我的網站上將數據上傳到Joe的帳戶。 Joe的網站將決定誰可以訪問,誰可以修改,誰可以在我的網站上將新信息上傳到Joe的帳戶。

我想過在我的網站上發佈API並讓Wordpress插件訪問它。據我所知,喬的網站會有一個API密鑰,允許他的網站通過我的網站進行身份驗證。但是,會阻止其他人使用該API密鑰並假裝成Joe的網站?

我已經看到了我想要做的類似實現,當我檢查客戶端上的代碼時,我可以看到api鍵。什麼會阻止我使用該API密鑰並假裝成爲網站?

有沒有一種方法來保護API密鑰,以便喬的網站訪問者沒有看到它?

我看到這個答案在這裏:How to securely use api key

但是不會訪問者仍然能夠看到關鍵時候喬的網站張貼在請求我的網站?

謝謝。

回答

4

該API密鑰將用於其他網站的服務器端與您的網站 進行通信,因此客戶端將無法看到它。

無法直接從用戶瀏覽器使用API​​密鑰來訪問您的網站資源,因爲此時它將是由於安全風險而被瀏覽器阻止的Cross-site request forgery

如果對您網站的請求也被加密(https),那麼即使某人以某種方式觀看流量,他也無法獲取API密鑰。

如何實現它:

你應該有可以處理其他網站請求更新用戶配置文件的URL,例如:

www.yoursite.com/api/updateprofile 

現在,你應該決定是否要支持GET/POST請求(或支持兩者)提供的數據。

例如,如果你想支持GET請求,然後告訴其他網站,他們可以在URL上執行以上操作,用給定參數: API_KEY,USER_ID,FIRST_NAME(可選),姓氏(可選)

在他們的網站上使用的

例子:

www.yoursite.com/api/updateprofile?api_key="key"&user_id=1&first_name="joe's new first name!" 

爲了實現它你的網站,只要解析請求,並嘗試獲取的參數,在驗證API密鑰。

我想在PHP語法類似於下面雖然我不知道:

var api_key = GET["api_key"]; 
var user_id = GET["user_id"]; 

更新2:

這裏有一個圖表來說明你:

Joe的用戶瀏覽器< ----> Joe的服務器---(API_KEY)--->您的站點API

客戶端無法訪問密鑰,因爲Joe的服務器根本不會將它發送給客戶端,因此客戶端甚至不知道您的站點存在。

+0

這是有道理的。謝謝。因此,在喬的網站上運行的Wordpress插件應該有一個PHP腳本,當Joe的訪客將他們想要加載到Joe的帳戶的信息發佈到我的網站時,而不是直接發佈到我的網站上,他們會發布到Joe的服務器中的php腳本,反過來會發布到我的網站?那我該怎麼去實現呢?謝謝 – jdias

+0

我已更新我的答案 –

+0

感謝您更新您的答案。但是,如果joe的訪問者檢查joe的網站中的頁面,那麼api密鑰是不是可見的?或者你的意思是打電話給我的網站將從喬的網站,而不是從瀏覽器的PHP腳本完成? – jdias