2009-09-01 153 views
43

我已經爲我的域獲得Google Maps API密鑰。我應該採取哪些措施來保護我的Google Maps API密鑰?

,當我得到我的鑰匙顯示嵌入在請求參數的關鍵,例如提供的例子:

<script src="http://maps.google.com/maps?file=api&amp;v=2&amp;sensor=true_or_false&amp;key=my-key" type="text/javascript"></script> 

我明白,在請求引薦字段必須我的域名相匹配,它是安全,使我的鑰匙在腳本標籤和類似的可見?或者我應該採取其他措施嗎?

回答

49

考慮到關鍵必須包括在HTML頁面的<script>標籤,加載JS文件/從谷歌的服務器上的數據,有什麼可以做:

  • ,你必須把它放在你的HTML文件
  • 每個人都可以看看這些。

不過,它並不重要:如果有人試圖在另一個域名上使用此密鑰,他們將得到一個Javascript警報 - 這對用戶來說並不好。

所以:

  • 沒有什麼可以做;這是它的工作方式
  • 而且沒有太多你應該擔心的,我會說。
+3

我認爲你可以在你自己的網站上使用代理來獲取「真實」文件。完全沒有意義,是的,但我認爲這是可能的。 – 2009-09-01 22:07:37

+1

想象一下,如果我錯過了某些東西,值得檢查。歡呼那些回答的人。 – Brabster 2009-09-01 22:26:30

+0

@Tim:不確定;如果想要顯示地圖的站點的域名,我猜測JS代碼本身,它以某種方式與密鑰中包含的信息進行比較似乎很正常 - 但我仍然不要嘗試。 ;;; @Brabster :-) – 2009-09-01 22:50:21

3

我不明白爲什麼你會打擾。是不是隻從你的域名有效的關鍵? IIRC,唯一編碼的信息是您的域名,除了Google可能添加的任何信息,例如它生成的時間。

7

在Google API控制檯上有設置可以保護您的API帶寬使用不被其他域/用戶使用。您可以通過在API控制檯上使用引用來限制和保護該內容。 API密鑰會拒絕沒有符合您的限制的推薦人的請求。

以下是Google for API Key的屏幕截圖,Google只能使用它的兩個域名。 enter image description here

10

雖然這個問題已經有幾年了,但它是一個非常好的問題。據我所知,暴露API密鑰,即使他們是域匹配,仍然可能導致濫用。這裏有一篇關於Security Stack Exchange的文章,更詳細地介紹了這一點。

,你可以採取以避免潛在的濫用的步驟已公佈由谷歌在這裏:

的最佳實踐指南安全地使用API​​: https://support.google.com/cloud/answer/6310037?hl=en

雖然我會建議服用這一切有一種方法可以處理由Brabster發佈的具體示例,並將密鑰存儲在環境變量中。這樣您所需要做的就是將鍵替換爲存儲在項目中的服務器端變量。但是,一定不要將存儲密鑰的文件提交到公共存儲庫。

+0

你將如何使用原始問題(純Javascript)的環境變量? – 2017-09-09 18:43:42

+0

由於環境變量是服務器端變量,因此可以使用JavaScript使用node.js進行設置。這裏有一個關於這種技術的簡短教程:https://hackernoon.com/how-to-use-environment-variables-keep-your-secret-keys-safe-secure-8b1a7877d69c。考慮到原始問題,腳本標記將不得不動態生成,或者在函數中進行請求。 – rjbultitude 2017-09-11 12:03:07

+0

我也覺得這個答案沒有解決這個問題。 maps API需要瀏覽器端JavaScript,任何讀取頁面的人都可以閱讀。 – 2017-11-26 17:48:44

1

您應該使用後端/服務器端來保護和處理密鑰。在我的情況下,我使用Django f/w服務器端,它可以服務於ajax調用,從服務器腳本/ db獲取密鑰,然後將其傳遞到谷歌API。

相關問題