C10: Обязательная обработка всех ошибок и исключений

Описание

Обработка исключений позволяет приложению реагировать на различные ошибки (например, сбой сети или подключения к базе данных) различными способами. Корректная обработка исключений и ошибок просто необходима для обеспечения надежности и безопасности вашего кода.

Ошибки и исключения обрабатываются на всех уровнях приложения, включая критическую бизнес-логику, функции безопасности и фреймворки.

Обработка ошибок также важна с точки зрения обнаружения атак. Некоторые атаки на приложения могут вызывать ошибки, позволяющие обнаружить атаку в процессе ее проведения.

Некорректная обработка ошибок

Исследователи из Университета Торонто выяснили, что даже небольшая оплошность при обработке ошибок или их игнорирование может привести к критическим сбоям в работе распределенных систем.

Некорректная обработка ошибок может стать причиной различных уязвимостей.

  • Утечка данных: разглашение конфиденциальной информации в сообщениях об ошибках может непреднамеренно помочь злоумышленникам. Например, сообщение, содержащее трассировку стека или подробности внутренней ошибки, может предоставить злоумышленнику данные о вашем окружении. Даже небольшие различия в обработке ошибок (например, сообщение о вводе некорректного имени пользователя или некорректного пароля при ошибке аутентификации) могут стать для атакующего источником важной информации. Как описывалось выше, необходимо обеспечить подробное журналирование ошибок для проведения расследований и отладки, но избегать разглашения этих данных, особенно внешним клиентам.
  • Обход защиты TLS: уязвимость Apple «goto fail» была следствием ошибки управления в коде обработки ошибок, которая приводила к полной компрометации TLS-соединений систем Apple.
  • Отказ в обслуживании: отсутствие базовой обработки ошибок может привести к неработоспособности системы. Обычно это относительно простая в эксплуатации уязвимость. Другие проблемы с обработкой ошибок могут привести к повышенному использованию ресурсов ЦП или диска и таким образом ухудшить производительность системы.

Полезные советы

  • Управляйте исключениями централизованно, чтобы избежать дублирования блокировок try/catch в коде. Убедитесь в корректной обработке непредвиденных режимов работы внутри приложения.
  • Убедитесь в том, что выводимые сообщения об ошибках не содержат критичных данных, но при этом содержат достаточно информации для соответствующего реагирования на них.
  • Обеспечьте журналирование исключений таким образом, чтобы специалисты из команды технической поддержки, контроля качества, расследования инцидентов или реагирования на атаки имели достаточно данных для решения проблемы.
  • Тщательно протестируйте и проверьте код обработки ошибок.

Инструменты

  • Error Prone — инструмент от Google для статического анализа и поиска стандартных недостатков в обработке ошибок для Java-разработчиков.
  • Chaos Monkey от Netflix — один из наиболее известных автоматических инструментов для поиска ошибок в запущенном приложении, который намеренно отключает компоненты системы, чтобы подтвердить корректность восстановления работоспособности всей службы.