2012-07-13 79 views
21

因此,我正在開發一個小應用程序,僅供我自己使用,也許是Git上的一個開源項目。我使用的是Envato Marketplaces的API,而且大家都知道有些操作不需要任何密鑰,但同時也有一些操作需要。如何在使用JavaScript時保護API密鑰?

我首先爲PHP中的Envato API做了一個很好的API包裝,但後來我決定嘗試一點JavaScript,所以我正在開發與JavaScript相同的包裝。到目前爲止,我對公共操作沒有任何問題,但我現在必須使用API​​密鑰。

我的問題是如果有一種方法可以保護JavaScript中的API密鑰。我不能將它放在純文本中,因爲它可以被看到代碼的其他人使用。那麼API會保密嗎?也許從XHR的JSON文本文件中抓取它?

+3

讓您的javascript調用與服務器端php進行交互以調用需要隱私的方法。 – asawyer 2012-07-13 12:23:28

+1

@asawyer:你應該把它作爲答案 – Dancrumb 2012-07-13 12:26:49

+0

@asawyer - 就是這樣,我已經用PHP做了,現在我只想用JS做它。所以只用JS來做就不可能了?如果我使用XHR從JSON文件中獲取密鑰並將其傳遞給該方法,那該怎麼辦? – Roland 2012-07-13 12:27:08

回答

18

簡短的回答:沒有

無論你做什麼混淆的關鍵,你還是得把它以使其可在客戶端上不知何故,因此將有可能使用外匯進行解壓縮。螢火蟲。

即使您設計了一個令人敬畏的神奇方式來保留關鍵的祕密,在某些時候,您將不得不做出實際的API請求,並且因爲它必須從瀏覽器發送,攻擊者將能夠從Firebugs net標籤中以純文本格式讀取密鑰。

正確的做法是圍繞需要鍵的API調用創建一個PHP包裝器,然後從Javascript調用該包裝器。

+9

密鑰將被保護,但操作不會。如果門打開,小偷不需要鑰匙。 – 2013-07-23 14:37:43

+2

PHP封裝器能否強制請求來自同一個域?這與「同源政策」有何關係?看起來它不可靠確定請求者:http://stackoverflow.com/questions/1153967/php-source-hostname-of-a-get-request ...? – Toph 2013-10-04 22:01:18

+1

包裝如何改變任何東西? – 2016-04-21 12:27:15

相關問題