Обзор кода GO №1: Жестко закодированные учетные данные чувствительны к безопасности

Обзор
Рецензенты оценивали качество кода, ремонтопригодность и соответствие лучшим практикам. Меня особенно беспокоило обнаружение возможных дыр в системе безопасности и мест, нуждающихся в ремонте. Что касается жестко запрограммированных учетных данных, в этом отчете подчеркивается одна важная проблема безопасности.
Пример конфиденциального кода
func connect() {
user := "root"
password:= "supersecret" // Sensitive
url := "login=" + user + "&passwd=" + password
}
Предоставленный фрагмент кода, по-видимому, представляет собой функцию с именем connect() , которая отвечает за установление соединения, возможно, со службой или системой. Вот подробный анализ кода:
func connect() {
user := "root"
password := "supersecret" // Sensitive
url := "login=" + user + "&passwd=" + password
}
- Конфиденциальный пароль: поскольку он непосредственно виден в исходном коде, жестко запрограммированное значение пароля «supersecret» считается конфиденциальным. Из соображений безопасности не рекомендуется жестко записывать учетные данные, такие как пароли, в исходный код. Любой, у кого есть доступ к кодовой базе, может легко проверить пароль.
- Создание URL-адреса: переменные пользователя и пароля объединяются с дополнительными входными данными для создания строки URL-адреса. Кажется, создается URL-адрес для запроса на вход с параметрами запроса для значений пользователя и пароля.
- Угроза безопасности : существует серьезная угроза безопасности, когда конфиденциальные данные, такие как пароли, хранятся в исходном коде в виде обычного текста. Конфиденциальные данные могут быть легко украдены и использованы не по назначению, если кодовая база просматривается неавторизованными людьми или репозиторий взломан.
2. Управление учетными данными: при необходимости сложно менять или чередовать пароли, если они хранятся непосредственно в коде. Потенциальные недостатки безопасности могут возникнуть из-за жестко запрограммированных учетных данных, которые могут сохраняться в кодовой базе даже после смены пароля.
Рекомендация: Используйте инструмент управления секретами или безопасное решение для управления учетными данными для безопасного хранения конфиденциальных учетных данных и управления ими. Эти решения включают в себя такие возможности, как автоматическое чередование секретов, а также безопасное хранение, управление доступом и другие функции.
3. Проверка ввода. Любые вводимые пользователем данные должны быть проверены и обработаны, особенно при создании URL-адресов или выполнении запросов к базе данных. Отсутствие проверки ввода и очистки в предоставленном коде оставляет систему открытой для недостатков безопасности, таких как SQL-инъекция и атаки с манипулированием URL-адресами.
Рекомендация. Чтобы предотвратить такие атаки, используйте соответствующие стратегии проверки и очистки ввода. Например, используйте параметризованные запросы или подготовленные операторы и убедитесь, что все введенные пользователем значения в URL-адресах правильно закодированы.
4. Безопасное хранение паролей. Крайне важно помнить, что хранение паролей в виде простого текста небезопасно, если эта функция является компонентом более крупной схемы аутентификации. Перед сохранением пароли в идеале должны быть надежно хешированы и «солены», чтобы предотвратить несанкционированный доступ в случае утечки данных.
Рекомендация: Используйте мощные методы хеширования паролей для безопасного хранения и проверки паролей, такие как bcrypt или Argon2.
Совместимое решение:
func connect() {
user := getEncryptedUser()
password:= getEncryptedPass() // Compliant
url := "login=" + user + "&passwd=" + password
}
- Сохраните учетные данные в файле конфигурации, который не передается в репозиторий кода.
- Храните учетные данные в базе данных.
- Используйте службу вашего облачного провайдера для управления секретами.
- Если пароль был раскрыт через исходный код: измените его.
Хранение конфиденциальной информации, такой как пароли, непосредственно в исходном коде подвергает систему несанкционированному доступу и потенциальным эксплойтам.
Твиттер