Безопасность5 мин чтения
Где хранить секреты на сервере приложения
API-ключам, паролям базы и токенам не место в репозитории. Где они должны быть и почему это различие — не занудство.
Чаще всего учётные данные утекают не из-за атаки. Репозиторий был приватным, когда туда попал ключ, и стал публичным, когда его форкнули, — и к этому моменту ключ уже в истории, а не в файле.
Переменные окружения, а не файлы в репозитории
Вкладка Startup хранит переменные окружения: они задаются на контейнере и никогда не попадают в код. Ваше приложение читает их так же, как читает сейчас — process.env, os.environ, getenv, — а значение живёт на сервере, а не в том, что вы пушите.
- Пароли базы, которые панель и так генерирует на каждую базу.
- API-ключи и URL вебхуков. URL вебхука — это учётные данные: у кого он есть, тот пишет от вашего имени.
- Токены ботов — самый часто утекающий секрет в этой индустрии.
- Всё, что вы не написали бы на билборде.
Если уже закоммичено
Меняйте. Удалить строку и запушить снова не помогает: в старом коммите она осталась, и у всех, кто клонировал репозиторий, тоже. Ротация — единственное решение, и она дешевле, чем узнать это на практике.
Секрет, пролежавший в публичном репозитории пять минут, — публичный секрет. Скраперы быстрее вас.