2016-09-29 63 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

但客户端必须能够解密密钥,才能使用它?用户也可以。 –