|
Навигация
|
Главная » Windows Базовые sql-инъекции в приложениях, использующих язык SQL. Руководство для чайниковИсточник: habrahabr rgen3 Примечание переводчикаДанная работа является переводом части работы Chris Anley Advanced SQL Injection In SQL Server Applications. (прямая ссылка для скачивания) В последующих статьях, при наличии свободного времени, данный перевод будет доведен до конца. P.S. Перевод будет интересен более в образовательных и исторических целях. Оригинальное название статьи: Продвинутые SQL-инъекции в приложениях, использующих язык SQL. АннотацияВ данной статье подробно рассматриваются общие способы "SQL-инъекции", для известной платформы Microsoft Internet Information Server/Active Server Pages/SQL Server. В ней обсуждаются различные варианты использования инъекции SQL в приложениях и объясняются методы проверки данных, а также защита баз данных, в которых могут быть использованы инъекции.ВведениеStructured Query Language (SQL) - это структурированный язык, используемый для взаимодействия с базами данных. Существует множетсво "диалектов" языка SQL, но сегодня, в основном, все они построены на основе стандарта SQL-92, один из ранних ANSI стандартов. Основной операционный блок SQL - запрос (query), который является совокупностью выражений, которые обычно возвращают совокупность результатов (result set). SQL выражения могут изменять структуру баз данных (используя выражения языков определения данных - DLL) и управлять их содержанием (используя выражения языков манипулирования данными - DML). В данной работе, мы рассмотрим transact-SQL, использующийся в Microsoft SQL Server. SQL-инъекции возможны в том случае, когда злоумышленник может вставить свой SQL-код в запрос (query), для управления данными, которые отправляются в приложение. Обычное SQL выражение выглядит следующим образом: Это выражение берет "id", "forename" и "surname" из колонок таблицы "authors" и возвращает все строки в таблице. Выборка может быть ограниченна, определенным "автором", например: Необходимо отметить, что в данном запросе строковые литералы разделены одинарной кавычкой. Предполагается, что "forename" и "surrname" являются данными, которые вводятся пользователем. В данном случае злоумышленник будет способен внести собственный SQL-запрос, путем добавления собственных значений в приложение. Например: Тогда выражение примет следующий вид: После того, как база данных попытается обработать подобный запрос будет возвращена следующая ошибка: Причина ошибки будет заключаться в том, что введенная одиночная кавычка испортит структуру разделителей в запросе. Таким образом, база данных безуспешно попытается выполнить команду "hn", которая приведет к ошибке. В итоге, если злоумышленник введет в форму следующую информацию: Таблица "authors" будет удалена, почему это произойдет мы рассмотрим позже. Вам может показаться, что если мы будем удалять одиночные кавычки из формы ввода, а также "заменять" их, это может решить нашу проблему. И вы будете правы, однако существуют некоторые проблемы с использованием этого способа, в качестве решения данной задачи. Во-первых, не вся вводимая пользователем информация является "строками" (strings). Если пользовательская форма будет содержать "id" автора, который обычно является числом. Например, наш запрос может выглядеть следующим образом: В данном случае взломщик беспрепятственно сможет добавить любое SQL-выражение в после численных данных. В других разновидностях SQL-запросов, используются различные разграничители. Например, в Microsoft Jet DBMS разграничителем будет символ "#". Во-вторых, "избегание" ("escaping") одиночных кавычек вовсе не самый простой способ защиты, как это может показаться сперва. Подробнее об этом мы поговорим далее. Приведем пример на основе страницы входа на основе Active Server Pages (ASP), которая при помощи SQL получает доступ к базе данных, чтобы авторизовать пользователя в каком-либо приложении. Приведем код страницы, содержащей форму входа, в которую вводятся имя пользователя и пароль. Ниже код (process_login.asp), определяющий корректность введенных данных.
|
© 2024 Team.Furia.Ru.
Частичное копирование материалов разрешено. |