Главная » Microsoft SQL Server, Базы данных » Как избежать “инъекций” SQL

0

Инъекцией SQL называют технологию взлома, которая добавляет в параметр код SQL, который впоследствии выполняется как динамический SQL. Эта технология особо опасна тем, что любой, кто имеет доступ к Web-сайту организации и способен вводить данные в текстовые поля, потенциально может стать источником атак с помощью “инъекций” SQL. Существует множество вредоносных приемов, использующих прикрепляемый код и измененные предложения WHERE. Перед тем как приступить к изучению методов защиты, очень важно понять сам принцип работы этой вредоносной технологии. Об этом мы и поговорим в следующих разделах.

Прикрепление вредоносного кода

Добавление терминатора инструкции, другой инструкции SQL и содержимого позволяет взломщику передать программный код в строку выполнения. Например, если передаваемым параметром является 123′; Delete OrderDetail –

то в динамическую строку SQL будет добавлена инструкция DDL DELETE, которая и будет выполнена в пакете с основной:

SELECT *

FROM Customers

WHERE CustomerlD = ‘123’; Delete OrderDetail ‘

Терминатор инструкции завершает заложенную программистом операцию, после чего SQL Server рассматривает продолжающийся текст как следующую инструкцию в пакете. Завершающая кавычка могла бы привести к ошибке выполнения, однако эта проблема просто решается путем добавления маркера комментария. Каков результат? Пустая таблица строк заказов (OrderDetails).

Среди других популярных прикрепляемых кодов можно упомянуть запуск команды xp_commandshell и установку пароля для пользователя sa.

Прикрепление or 1=1

Еще одним методом “инъекций” SQL является модификация предложения WHERE для выборки большего количества строк, чем было изначально предусмотрено.

Если пользователь вводит в текстовое поле строку 1231 or 1=1 –

то условие 1 = 1 (которое всегда истинно) внедряется в предложение WHERE:

SELECT *

FROM Customers

WHERE CustomerlD = 423′ or 1=1

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

Пароль? Какой пароль?

Еще одной распространенной “инъекцией” кода SQL является комментирование остальной части кода, подлежащего выполнению. Если пользователь вводит в Web-форму UserName: Joe’ — Password : who cares

то результирующую инструкцию SQL можно будет прочитать следующим образом:

SELECT USerlD FROM Users

WHERE UserName = ‘Joe’—’ AND Password = ‘who cares’

Включение маркера комментария в поле имени пользователя приводит к тому, что дальнейшая часть предложения WHERE, включая условие для пароля, игнорируется.

Защита от “инъекций” кода SQL

Предотвратить проникновение “инъекций” кода можно несколькими путями.

?               Используйте команды EXECUTE AS и тщательно определяйте роли, чтобы инструкции не имели разрешений на удаление таблиц.

?               Используйте ссылочную целостность DRI во избежание удаления строк первичной таблицы вместе с удалением строк вторичной таблицы.

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

?               Проверяйте и удаляйте параметры, содержащие терминаторы инструкций, комментарии и символы хр_.

?               Остерегайтесь динамического SQL.

?               Тестируйте свою базу данных с использованием методик “инъекций”, описанных выше.

Проблеме инъекций кода SQL следует уделять повышенное внимание. Если ваше приложение предполагает ввод данных из Интернета и вы не предусмотрите действия, направленные против потенциальных инъекций, разрушение базы данных станет только вопросом времени.

Резюме

В нашу эпоху киберпреступлений как никогда ранее важна безопасность Данных. Требование безопасности данных является одним из принципов информационной архитектуры. Несмотря на то что вполне возможно назначить всем пользователям роли системного администратора и игнорировать вопросы безопасности, стоит приложить совсем немного усилий, и функциональность гибкой и мощной системы обеспечения безопасности SQL Server защитит ваши данные во всевозможных ситуациях.

Следующая глава завершает очередную часть книги, посвященную вопросам администрирования SQL Server. В ней мы поговорим об особенностях развертывания и администрирования версии SQL Server Express.

Администрирование SQL Server Express

Редакция SQL Server 2005 Express Edition, также называемая SQL Server Express, или SSE, является упрощенной версией популярной системы управления базами данных SQL Server компании Microsoft. Любая база данных, созданная в этой версии, может непосредственно использоваться любой другой версией SQL Server. Компания Microsoft сделала все для того, чтобы сделать SSE доступной и полезной версией для всех типов разработчиков, от начинающих до опытных. Функциональность и простота использования, заложенные в SSE, сделала эту СУБД довольно привлекательным выбором для программных приложений.

SSE отлично подходит для ограниченных реализаций, таких как организация рабочего места разработчика баз данных. Например, в состав основного пакета установки не входят утилиты управления; они сформированы в отдельный пакет загрузки. К тому же SQL Server Express использует модифицированную версию утилиты SQL Server Management Studio, которую мы также рассмотрим в настоящей главе.

Если вы хотите узнать, над чем компания Micro- В s°ft работает в настоящее время, воспользуй- *^?Ы(сети тесь блогами на сайте Microsoft Developer Net- ‘    work (MSDN).

Источник: Нильсен, Пол. Microsoft SQL Server 2005. Библия пользователя. : Пер. с англ. — М. : ООО “И.Д. Вильямс”, 2008. — 1232 с. : ил. — Парал. тит. англ.

По теме:

  • Комментарии