Если вы планируете хранить весь код и информацию о конфигурации для запуска производственной системы непосредственно из системы управления версиями и без участия человека, вы облажались. Зачем? Это всего лишь нарушение старой аксиомы безопасности «никогда не записывайте свой пароль». Давайте сделаем доказательство отрицанием.
Во-первых, у вас есть простые текстовые пароли в файлах конфигурации. Это бесполезно, их может прочитать любой, кто видит файлы.
Второй вариант, мы зашифруем пароли! Но теперь код должен знать, как расшифровать пароли, поэтому вам нужно поместить ключ дешифрования где-то в коде. Проблема только что перенесена на уровень.
Как насчет использования открытых / закрытых ключей? Та же проблема, что и для паролей, ключ должен быть в коде.
Использование локального файла конфигурации, не хранящегося в системе управления версиями, по-прежнему помещает пароль и средства для его чтения, если они зашифрованы, на диск и доступны злоумышленнику. Вы можете немного ужесточить ситуацию, убедившись, что права доступа к файлу конфигурации очень ограничены, но если вы укоренились в окне, вы облажались.
Что приводит нас к тому, что размещение паролей на диске - плохая идея. Это нарушает концепцию брандмауэра безопасности. Одна взломанная машина, содержащая информацию для входа, означает, что другие машины будут взломаны. Одна плохо обслуживаемая машина может разрушить всю вашу организацию.
В какой-то момент человеку придется ввести критический секрет, чтобы начать цепочку доверия. Что вы можете сделать, это зашифровать все секреты в коде, а затем, когда система запустится, попросить человека вручную ввести ключ для расшифровки всех паролей. Это похоже на систему мастер-паролей, которую использует Firefox. Он открыт для злоупотреблений, поскольку, если один пароль скомпрометирован, многие системы могут быть скомпрометированы, но это удобно и, вероятно, более безопасно, поскольку пользователи должны запомнить только один пароль и с меньшей вероятностью запишут его.
Последнее, что нужно сделать, - убедиться, что в случае несанкционированного доступа к информации для входа в систему (и вы всегда должны предполагать, что так и будет), что A) злоумышленник не может ничего с этим поделать и B) вы можете быстро закрыть взломанные учетные записи , Первый означает предоставить учетным записям столько доступа, сколько им нужно. Например, если вашей программе требуется только чтение из базы данных, войдите в систему под учетной записью, ограниченной SELECT. В общем, удалите все права доступа, а затем добавляйте их только по мере необходимости. Будьте осторожны с правами на удаление, чтобы вас не посетили столики Бобби .
Последнее означает, что вы предоставляете каждому пользователю / организации / проекту свой собственный логин, даже если они могут иметь одинаковые права и привилегии и иметь доступ к одним и тем же данным. Это немного больше хлопот, но это означает, что если одна система взломана, вы можете быстро закрыть эту учетную запись, не закрывая весь свой бизнес.