如何在将密钥传递给javascript代码时保护密钥?

时间:2016-09-29 18:47:22

标签: javascript ruby-on-rails ajax amazon-web-services

我有一个使用AWS Javascript SDK的Rails应用程序,我必须在发出请求之前在我的javascript中设置机密:

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

问题是任何人都可以使用chrome控制台检查这些秘密值,那么如何隐藏这些密钥,同时仍然在我的客户端使用它们?

我正在考虑使用ajax来获取它们,但是ajax调用的返回数据是否也可以在客户端上查看?或不?

由于

2 个答案:

答案 0 :(得分:2)

不,在客户端保护您的密钥是不可能的。如果您的代码需要密钥并且可以读取它,那么任何用户都可以通过在浏览器控制台中执行相同的逻辑来读取它。例如。

目前尚不清楚您在AWS SDK中使用了哪些功能,但如果是文件上传,则您不需要在客户端上使用密钥。您需要它来签署请求,但这不需要在客户端发生。就像这样:

  1. 用户选择文件
  2. 客户端JS使用访问密钥和文件信息(名称,类型等)从您的服务器请求S3签名
  3. 服务器使用密钥生成S3签名并将其返回给客户端
  4. 客户端JS将签名附加到S3请求并将文件发布到AWS S3
  5. ...
  6. PROFIT!

答案 1 :(得分:1)

您无法在客户端使用可能隐藏在客户端之外的JS值,唯一的方法是仅加密服务器端的数据,客户端显示的任何秘密数据都将被加密且无法理解。如果要加密流量,请考虑使用HTTPS协议。希望这会有所帮助。