2016-09-29 3 views
0

У меня есть приложение Rails, который использует AWS Javascript SDK, я должен настроить секреты в моей JavaScript, прежде чем сделать запрос:Как защитить секретный ключ, передавая его в код javascript?

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

Проблема в том, кто может проверить эти секретные значения с помощью хромированной консоли, так как я могу скрыть эти ключи, все еще использую их на моей стороне клиента?

Я думал, чтобы получить их с помощью 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

Но клиентская сторона должна иметь возможность расшифровать ключ, чтобы использовать его? И так может пользователь. –

Смежные вопросы