C3: Обеспечение безопасного доступа к базам данных

Описание

Данный раздел посвящен обеспечению безопасного доступа ко всем хранилищам данных, включая реляционные базы данных и базы данных NoSQL. Рассматриваются следующие вопросы:

  1. Безопасность запросов
  2. Безопасность конфигурации
  3. Безопасность аутентификации
  4. Безопасность соединений

Безопасность запросов

SQL-код может быть внедрен, если недоверенные входные данные динамически добавляются в SQL-запросы, обычно путем присоединения к основной строке. Внедрение SQL-кода представляет одну из наиболее серьезных угроз безопасности приложения. Внедрение SQL-кода легко осуществить; эксплуатация данной уязвимости может привести к краже, удалению или изменению баз данных. Приложение также может быть использовано для выполнения вредоносных команд в системе, содержащей вашу базу данных, таким образом позволяя злоумышленнику закрепиться в сети.

Для предотвращения SQL-внедрений необходимо избегать интерпретации непроверенных входных данных в составе SQL-команд. Наилучшим решением будет использование метода «параметризации запросов». Этот метод необходимо применять к конструкциям SQL и OQL, а также хранимым процедурам.

Примеры параметризации запросов для ASP, ColdFusion, C#, Delphi, .NET, Go, Java, Perl, PHP, PL/SQL, PostgreSQL, Python, R, Ruby и Scheme можно найти на сайте http://bobby-tables.com и в памятке OWASP по параметризации запросов.

Примечание о параметризации запросов

Некоторые области запросов к базам данных (БД) нельзя параметризировать. Эти области отличаются в зависимости от вендора БД. Внимательно выполняйте проверку точных совпадений или ручную очистку при работе с параметрами запросов к БД, которые не могут быть привязаны к параметризованному запросу. Использование параметризованных запросов обычно положительно сказывается на производительности, однако некоторые запросы в определенных реализациях баз данных могут оказать негативное воздействие на производительность. Обязательно тестируйте влияние запросов на производительность, особенно комплексных запросов с поддержкой развернутых выражений LIKE или текстового поиска.

Безопасность конфигурации

К сожалению, системы управления базами данных (СУБД) не всегда имеют безопасную конфигурацию по умолчанию. Необходимо убедиться в том, что имеющиеся средства обеспечения безопасности СУБД и платформы, на которой она установлена, используются и настроены корректно. Для большинства распространенных СУБД доступны стандарты, руководства и тесты производительности.

Безопасность аутентификации

Любой доступ к базам данных необходимо контролировать должным образом. Аутентификация доступа к СУБД должна выполняться безопасно и только по защищенному каналу. Также необходимо обеспечить безопасность и доступность учетных данных.

Безопасность соединений

Большинство СУБД поддерживают несколько способов связи (например, через службы или API), которые могут быть безопасными (аутентифицированными, зашифрованными) и небезопасными (неаутентифицированными или незашифрованными). Рекомендуется использовать только безопасные методы связи, как это описано в разделе Повсеместная защита данных.