Даже если мы прячем токен в хранилище, шифруем базу и ограничиваем доступ к проду, всё равно остаётся предчувствие, что какой-нибудь SDK в проекте вдруг вернёт объект ошибки с содержимым конфига. Затем его целиком сохранит какой-нибудь логгер, и токен окажется в системе мониторинга.
Если секрет где-то превратится в обычную строку, по её типу уже не понять, что её нельзя логировать. Подход: оборачивать строку секрета так, чтобы по-умолчанию скрывать его при выводе в логи.
И несколько принципов, которых стоит придерживаться:
* проверять данные на входе в логгер и удалять чувствительные значения до записи
* настроить taint-анализ в статическом анализаторе, чтобы отслеживать, откуда секрет приходит, куда передаётся и в какие вызовы логирования может попасть
* ловить утечки в тестах. Если значение секрета оказалось в логах, тест должен упасть.
И не логировать всё подряд на случай «вдруг пригодится».
@makrushin