2016-09-29 99 views
0

我有一個使用AWS的Javascript SDK Rails應用程序,我已經發出請求之前設置在我的javascript的祕密:如何在將密鑰傳遞給JavaScript代碼時獲取密鑰?

AWS.config.update({ accessKeyId: '<%= ENV["AWS_ACCESS_KEY_ID"] %>', secretAccessKey: '<%= ENV["AWS_SECRET_ACCESS_KEY"] %>' }); 

的問題是任何人都可以使用Chrome控制檯檢查這些祕密的值,因此我如何隱藏這些密鑰,同時仍然在我的客戶端使用它們?

我正在想用ajax抓取它們,但不是來自該ajax調用的返回數據也可以在客戶端上看到嗎?或不?

感謝

+1

你不能,這是不可能的。 – meagar

回答

2

不,不可能在客戶端保護您的密鑰。例如,如果您的代碼需要密鑰並可以讀取密鑰,則任何用戶都可以通過在瀏覽器控制檯中執行相同的邏輯來讀取密鑰。

您不清楚AWS SDK使用哪些功能,但如果是文件上傳,則不需要客戶端上的密鑰。您需要它來簽署請求,但這不需要發生在客戶端。它是這樣的:

  1. 用戶選擇文件
  2. 客戶端JS從服務器請求S3簽名,使用快捷鍵和文件信息(名稱,類型等)
  3. 服務器使用密鑰生成S3簽名,並返回給客戶端
  4. 客戶端JS重視簽名S3請求和文件發佈到AWS S3
  5. ...
  6. 利潤!
1

有沒有辦法,你可以對可能隱藏來自客戶端的遠客戶端JS值,唯一的辦法就是加密在客戶端上顯示只有服務器端數據和任何祕密數據會加密和不可理解。如果您想要加密您的流量,請考慮使用HTTPS協議。希望這可以幫助。

+0

https只防止竊聽,而不是好奇的客戶端。 –

+0

你可以通過使用你選擇的加密算法在服務器端加密來保護你的數據,即使是最安全的站點,所有的「祕密」數據都是這樣完成的,因爲加密數據對於任何沒有鍵。 – MrMisery

+1

但客戶端必須能夠解密密鑰,才能使用它?用戶也可以。 –