Задать вопрос
@mkone112
Начинающий питонист.

Безопасно ли хранить конфиденциальные данные в переменных окружения?

Я часто слышу, что хранить пароли в коде зло(что очевидно) и в качестве альтернативы предлагается хранить их в переменных окружения. Без сомнения это выглядит безопаснее, но насколько? Ведь получить переменные окружения процесса достаточно легко, и даже не нужен root.
  • Вопрос задан
  • 1446 просмотров
Подписаться 3 Простой 2 комментария
Пригласить эксперта
Ответы на вопрос 4
@kandrash
Кратко о себе
Ведь получить переменные окружения процесса достаточно легко

Разве? Подкините мне переменных с тостера? Давно хочу в БД у них флаг is_super_super_admin. себе поставить.

На самом деле если злоумышленник уже зашёл на ваш сервер - нет никакой разницы где вы храните свои тайны. У него полный доступ к любым переменным.
Ответ написан
inoise
@inoise
Solution Architect, AWS Certified, Serverless
Оба варианта не безопасны. В приложениях, запускающих инстанс (примерно все что не PHP) надо обязательно очищать их, предварительно сложив в память. В PHP и других языках, очищающих память по окончанию действия скрипта (на каждый запрос) - безопасности нет от слова совсем в рамках данного вопроса
Ответ написан
Безопасно ли хранить конфиденциальные данные в переменных окружения?
Нет! Ноги от этого дела растут из 12 factors. Как это красиво победить, сам голову ломаю. Очень непростой вопрос. Эти чувствительные данные надо где-то хранить до деплоя, потом их передавать (безопасно) и удалять.

Ведь получить переменные окружения процесса достаточно легко, и даже не нужен root.
Команда printenv в пространстве пользователя и выгребай что хочешь.
Ответ написан
saboteur_kiev
@saboteur_kiev Куратор тега Информационная безопасность
software engineer
Конфиденциальные данные следует хранить не в переменных окружения а в окружении.
Если вы не используете внешние ваулты, то непосредственно на боевом сервере, доступ к которому защищен от посторонних.
1. Можно хранить просто в конфиг файле, который лежит на сервере.
2. Можно, в принципе, хранить в исходниках в шифрованном виде, а на боевом сервере хранить ключ для расшифровки, но первый вариант лучше.
3. Можно хранить и в переменных окружения, но зачем - они же должны считаться на боевом сервере из какого-то файла, а в этом случае почему бы бэкенду не считать их из файла напрямую? Но тут ситуация такая - чтобы злоумышленник получил переменные окружения он должен проникнуть на сервер либо взломать ваш код, а в этом случае уже не так важно как оно хранится. Другое дело, если на сервер могут зайти посторонние и вы провтыкаете с правами доступа на профайлы.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы