Учебник по внедрению SQL

Содержание
  1. Введение В настоящее время веб-приложения распространены по всему миру. Почти каждая крупная компания или организация представлена ​​в Интернете. Большинство этих компаний и организаций используют веб-приложения для предоставления пользователям различных услуг. Некоторые из этих веб-приложений используют контент, управляемый базой данных. Внутренняя база данных часто содержит конфиденциальную и конфиденциальную информацию, такую ​​как номера безопасности, номер кредитной карты, финансовые данные, медицинские данные. Обычно веб-пользователь предоставляет информацию, такую ​​как имя пользователя и пароль, а веб-приложения получают запрос пользователя и взаимодействуют с серверной базой данных и возвращают соответствующие данные пользователю. Что такое SQL-инъекция? SQL-инъекция — это метод (как и другие механизмы веб-атак) для атаки приложений, управляемых данными. Эта атака может обойти брандмауэр и затронуть полностью исправленную систему. Злоумышленник использует плохо отфильтрованные или неправильно экранированные символы, встроенные в операторы SQL, для анализа данных переменных из пользовательского ввода. Злоумышленник вводит произвольные данные, чаще всего запрос к базе данных, в строку, которая в конечном итоге выполняется базой данных через веб-приложение (например, форму входа в систему). Через SQL-инъекцию злоумышленник может получить несанкционированный доступ к базе данных и создать, читать, обновлять, изменять или удалять данные, хранящиеся в серверной базе данных. В настоящее время почти все базы данных SQL, такие как Oracle, MySQL, PostgreSQL, MSSQL Server, MS Access, потенциально уязвимы для атак с использованием SQL-инъекций. В наиболее распространенной форме атака с использованием SQL-инъекции дает доступ к конфиденциальной информации, такой как номера социального страхования, номер кредитной карты или другие финансовые данные. Почему SQL-инъекция? — Определить вводимые параметры. — Определить тип и версию базы данных. — Обнаружение схемы базы данных. — Извлечение данных. — Вставка, изменение или удаление данных. — Отказ в обслуживании авторизованных пользователей путем блокировки или удаления таблиц. — Обход аутентификации. — Повышение привилегий. — Выполнять удаленные команды, вызывая сохраненные функции в СУБД, которые зарезервированы для администраторов. SQL метод внедрения Вот несколько методов, с помощью которых операторы SQL вводятся в уязвимые системы — вводятся через ввод данных пользователем. — ввод через поля cookie содержат строки атаки. — Внедрение через серверные переменные. — Внедрение второго порядка, когда скрытые операторы должны выполняться в другое время другой функцией. Уязвимости В компьютерной безопасности уязвимость — это слабое место, которое позволяет злоумышленнику снизить информационную безопасность системы. Веб-формы обеспечивают некоторый доступ к серверной базе данных для ввода данных и ответа, этот вид атаки обходит брандмауэры и защиту конечных точек.. Любая веб-форма, даже простая форма входа в систему или поле поиска (где пользователь может вводить данные), может предоставить доступ к внутренней базе данных с помощью SQL-инъекции. Распространенной причиной уязвимости приложения к SQL-инъекции является неправильная фильтрация и отсутствие проверки для ввода данных пользователем. Формы ввода довольно распространены для сбора данных от пользователя. Таким образом, практически невозможно закрыть все точки входа, чтобы запретить SQL-инъекцию. Для предотвращения атак разработчики должны применять надлежащую фильтрацию/проверку ко всем формам. Уязвимые приложения — Почти все базы данных SQL потенциально уязвимы, такие как MS SQL Server, DB2, Oracle, PostgreSQL, MySQL, MS Access, Sybase, Informix и т. Д. — доступ через приложения, использующие: ASP, JSP, PHP Perl и скрипты CGI, которые обращаются к базам данных XML, XSL и XSQL JavaScript Веб-приложения для конкретных баз данных Многие другие Технологии веб-серверов Веб-серверы — это компьютеры, которые доставляют веб-страницы. Каждый веб-сервер имеет IP-адрес и, возможно, доменное имя. Например, если вы вводите URL-адрес https://www.w3resource.com/index.php в своем браузере, это отправляет запрос на веб-сервер, доменное имя которого — w3resource.com. Затем сервер получает страницу с именем index.php и отправляет ее в ваш браузер. Веб-сервер хранит все файлы, необходимые для отображения веб-страниц на компьютере. При передаче данных на серверную часть из веб-страницы часто используется метод GET для добавления данных, предоставленных пользователем, в конце URL-адреса (например, example.com?q=userid&p=password). Для злоумышленника это открывает возможность получить значения, переданные таким образом, и выполнить некоторые вредоносные действия. Создайте и запустите простую форму входа: Вот это простая форма входа (form.html), которая может аутентифицировать идентификатор пользователя и пароль. form.html Пример ошибки формы SQL-инъекции -> body {margin: 30px}: invalid {border-color: # e88; -webkit-box-shadow: 0 0 5px rgba ( 255, 0, 0, .8); - moz-box-shadow: 0 0 5px rbba (255, 0, 0, .8); - o-box-shadow: 0 0 5px rbba (255, 0, 0, .8); - ms-box-shadow: 0 0 5px rbba (255, 0, 0, .8); box-shadow: 0 0 5px rgba (255, 0, 0, .8);}: требуется {border -цвет: # 88a; -webkit-box-shadow: 0 0 5px rgba (0, 0, 255, .5); - moz-box-shadow: 0 0 5px rgba (0, 0, 255, .5); -o-box-shadow: 0 0 5px rgba (0, 0, 255, .5); - ms-box-shadow: 0 0 5px rgba (0, 0, 255,. 5); box-shadow: 0 0 5px rgba (0, 0, 255, .5);} form {width: 300px; margin: 20px auto;} input {font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; border: 1px solid #ccc; font-size: 20px; width: 300px; min-height: 30px; display: block; margin-bottom: 15px; margin-top: 5px; outline: none; -webkit- border-radius: 5px; -moz-border-radius: 5px; -o-border-radius: 5px; -ms-border-radius: 5px; border-radius: 5px;} input [type = submit] {background: # 066923; padding: 10px; color: #fff;}

    При отправке этой формы имя пользователя и пароль передаются в скрипт action.php . Пользователь будет аутентифицирован путем предоставления правильного идентификатора пользователя и пароля. Процесс входа в систему осуществляется путем создания SQL-запроса и сравнения идентификатора пользователя и пароля с записями входа в систему в базе данных.

           Пример ошибки формы внедрения SQL      
    php $ host = "localhost"; $ username = "root"; $ password = ""; $ db_name = "hr"; $ con = mySQL_connect ("$ host", "$ username", "$ password") или die ("не удается подключиться"); mySQL_select_db ("$ db_name") или die ("невозможно выбрать БД"); $ uid = $ _POST ['uid']; $ pid = $ _POST ['passid']; $ SQL = "select * from user_details, где userid = '$ uid' and password = '$ pid' "; $ result = mySQL_query ($ SQL); if (mySQL_num_rows ($ result)> 0) {echo"

    "." - Личная информация - ". $ row [3]. "

    ", ""; while ($ row = mySQL_fetch_row ($ result)) {echo "

    ". "Идентификатор пользователя:". $ row [0]. "

    "; echo "

    ". "Пароль:". $ row [1]. "

    "; echo "

    ". "Имя:". $ row [2] . "Фамилия:". $ Row [3]. "

    "; echo "

    ". "Пол:". $ Row [4]. "Дата рождения:". $ Row [5] . "

    "; echo "

    ". "Country:". $ row [6]. "Рейтинг пользователя:". $ Row [7]. "

    "; echo "

    ". "Идентификатор электронной почты:". $ Row [8]. "

    "; echo "--- ----------------------------------------- ";}} elseecho" Неверный идентификатор пользователя. или пароль ";?>
    Структура таблицы: user_details Записи таблицы: user_details Если идентификатор пользователя и пароль совпадают с записью в базе данных , отобразится личная информация пользователя. В противном случае отобразится «Недействительный идентификатор пользователя или пароль». Теперь введите действительный идентификатор пользователя и пароль в form.html и проверьте результат: Вывод: - Личная информация - ID пользователя: scott123 Пароль: [электронная почта защищена] Имя: Скотт Фамилия: Rayy Пол: M Дата рождения: 15.05.1990 Страна: США Рейтинг пользователя: 100 Идентификатор электронной почты: [email защищенный] -------------------------------------------- Позвольте ввести действительный идентификатор пользователя и недопустимый пароль в form.html и проверьте результат: Вывод: Недействительное имя пользователя или пароль Когда настоящий пользователь отправляет свои данные (идентификатор пользователя и пароль), на основе этих данных создается запрос SQL, который отправляется в базу данных для проверки. Если оба идентификатора пользователя и комбинация пароля действительны, пользователю разрешен доступ. После проверки подлинному пользователю предоставляется соответствующий доступ и отображается его или ее данные, в противном случае создается сообщение об ошибке. Пример атаки с использованием SQL-инъекции: Давайте посмотрим в коде (action.php) приведенного выше примера: $ uid = $ _POST ['uid']; $ pid = $ _POST ['passid']; $ SQL = "выберите * из user_details, где userid = '$ uid' и пароль = '$ pid'"; $ result = mySQL_query ($ SQL); В приведенном выше коде данные идентификатора пользователя и пароля, полученные от пользователя, хранятся в $ uid и $ pid. Интерпретатор выполнит команду (которая будет сохранена в $ result) на основе входных данных. Теперь, если злоумышленник предоставляет abcd в качестве идентификатора пользователя и something 'или' x '=' x в качестве пароля, тогда запрос будет построен как $ SQL = "select * from user_details, где userid = 'abcd' и password = 'something' или 'x' = 'x'"; В зависимости от приоритета оператора Предложение WHERE истинно для каждой строки, поэтому запрос вернет все записи. Таким образом злоумышленник сможет просмотреть всю личную информацию пользователей.. См. Следующую форму входа и вывод. Вывод : - Личная информация - Идентификатор пользователя: scott123 Пароль: [ электронная почта защищена] Имя: Скотт Фамилия: Рэй Пол: M Дата рождения: 15.05.1990 Страна: США Рейтинг пользователя: 100 Идентификатор электронной почты: [адрес электронной почты защищен] ----------------------- --------------------- Идентификатор пользователя: ferp6734 Пароль: [электронная почта защищена] & 3 Имя: Palash Фамилия: Ghosh Пол: M Дата рождения: 1987-07-05 Страна: ИНДИЯ Рейтинг пользователя: 75 Идентификатор электронной почты: [электронная почта защищена] ------------------------------ -------------- ID пользователя: diana094 Пароль: [электронная почта защищена] Имя: Диана Фамилия: Lorentz Пол: F Дата рождения: 1988-09-22 Страна: Германия Рейтинг пользователя: 88 Идентификатор электронной почты: [электронная почта защищена] --------------------------------- ----------- Типы SQL-инъекций - SQL-инъекций на основе тавтологий - с поддержкой Piggy Запросы/внедрение инструкций - Объединенный запрос - Недопустимые/логически неверные запросы - Вывод - Внедрение хранимых процедур Тавтологии Цель: Определить вводимые параметры Обойти аутентификацию Извлечь данные В логике тавтология (от греч. слово ταυτολογία) - это формула, которая верна во всех возможных интерпретациях. При атаке на основе тавтологии код вводится с использованием оператора условного ИЛИ, так что запрос всегда оценивается как ИСТИНА. Атаки с использованием SQL-инъекций на основе тавтологий обычно обходят аутентификацию пользователя и извлекают данные, вставляя тавтологию в предложение WHERE SQL-запроса. Запрос преобразует исходное условие в тавтологию, в результате чего все строки в таблице базы данных открыты для неавторизованного пользователя. Типичная тавтология SQL имеет форму «или », где выражение сравнения использует один или несколько операторов отношения для сравнения операндов и генерации всегда истинного условия. Если неавторизованный пользователь ввел идентификатор пользователя как abcd и пароль как something 'или' x '=' x, то в результате будет получен следующий запрос: select * from user_details, где userid = 'abcd' и password = 'something' или 'x' = 'x' Пример уже объяснен в разделе «Пример SQL-инъекции. атака". Запросы/внедрение инструкций с поддержкой Piggy Цель: Извлечь данные Изменить набор данных Выполнить удаленные команды Отказ в обслуживании Этот тип атаки отличается от других, поскольку хакер вводит дополнительные запросы к исходному запросу, в результате чего база данных получает несколько запросов SQL.. Первый запрос действителен и выполняется нормально, последующие запросы - это внедренные запросы, которые выполняются в дополнение к первому. Из-за неправильной конфигурации система уязвима для дополнительных запросов и позволяет использовать несколько операторов в одном запросе. Пусть злоумышленник вводит abcd как usrerid и '; drop table xyz - как пароль в форме входа: Затем приложение сгенерирует следующий запрос: select * from user_details, где userid = 'abcd' and password = ''; drop table xyz - ' После завершения первого запроса (возвращенного пустого набора результатов (т. е. нулевых строк)) база данных распознает разделитель запроса (";") и выполнит введенный второй запрос. Результатом выполнения второго запроса будет удаление таблицы xyz, что приведет к уничтожению ценной информации. Union Query Цель. : Обход аутентификации Извлечь данные Этот тип атаки может быть выполнен путем вставки запрос UNION в уязвимый параметр, который возвращает набор данных, который представляет собой объединение результата исходного первого запроса и результатов внедренного запроса. Оператор SQL UNION объединяет результаты двух или больше запросов и создает набор результатов, который включает выбранные строки из участвующих запросов в UNION. Основные правила объединения двух или более запросов с помощью UNION: 1) Количество столбцов и порядок столбцов во всех запросах должны быть одинаковыми. 2) Типы данных столбцов при включении таблицы в каждый запрос должны быть одинаковыми или совместимыми. 3) Обычно возвращаемые имена столбцов берутся из первого запроса. По умолчанию UNION ведет себя как UNION [DISTINCT], т.е. удаляет повторяющиеся строки; однако использование ключевого слова ALL с UNION возвращает все строки, включая дубликаты. Злоумышленник, который пытается использовать этот метод, должен хорошо знать схему БД. Давайте попробуем описанный выше метод с двумя таблицами user_details, emp_details и нашей первой формой входа: Структура таблицы: user_details Записи таблицы: user_details Структура таблицы: emp_details Записи таблицы: emp_details Предположим, злоумышленник вводит 'UNION SELECT * FROM emp_details - в поле User ID и abcd в Пароль сохранен как идентификатор пользователя и пароль, который генерирует следующий запрос: SELECT * FROM user_details WHERE userid = '' UNION SELECT * FROM EMP_DETAILS - 'and password =' ​​abcd ' Два дефиса (-) комментируют остальную часть запроса, т.е. 'и password =' ​​abcd '. Таким образом, запрос становится объединение двух запросов SELECT. Первый запрос SELECT возвращает нулевой набор, поскольку в таблице user_details нет соответствующей записи. Второй запрос возвращает все данные из таблицы emp_details. Давайте попробуем это с помощью нашей формы входа. Вывод: - Личная информация - Идентификатор пользователя: 100 Пароль: Стивен Имя: Король Фамилия: SKING Пол: 515.123.4567 Дата рождения: 17.06.1987 Страна: AD_PRES Рейтинг пользователя: 24000.00 Электронный адрес: 0.00 -------------------------------------------- ID пользователя: 101 Пароль: Neena Имя: Кочхар Фамилия: NKOCHHAR Пол: 515.123.4568 Дата рождения : 1987-06-18 Страна: AD_VP Рейтинг пользователя: 17000.00 Электронный адрес: 0.00 ----------- --------------------------------- Идентификатор пользователя: 102 Пароль: Lex Имя: De Haan Фамилия: LDEHAAN Пол: 515.123.4569 Дата рождения: 19.06.1987 Страна: AD_VP Рейтинг пользователя: 17000.00 Электронный адрес: 0.00 ---------------------- ---------------------- ID пользователя: 103 Пароль: Александр Имя: Hunold Фамилия: AHUNOLD Пол: 590.423.4567 Дата рождения: 1987-06-20 Страна: IT_PROG Рейтинг пользователя: 9000.00 Идентификатор электронной почты: 0.00 ---------------------------------- ---------- Идентификатор пользователя: 104 Пароль: Брюс Имя: Эрнст Фамилия: BERNST Пол: 590.423.4568 Дата рождения: 21.06.1987 Страна: IT_PROG Рейтинг пользователя: 6000.00 Идентификатор электронной почты: 0.00 --------------------- ----------------------- ID пользователя: 105 Пароль: David Имя: Остин Фамилия: DAUSTIN Пол: 590.423.4569 Дата рождения: 1987-06-22 Страна: IT_PROG Рейтинг пользователя: 4800.00 Идентификатор электронной почты: 0.00 --------------------------------- ----------- Заголовки (например, User ID:, First Name: ect) ранее были объявлены в action.php, но вывод показывает, что результат содержит employee_id, first_name, last_name, email, phone_number, найм_дату, job_id, salary, commision_pct из таблицы emp_details. Незаконные/логически неверные запросы Цель: Определить инъекционные параметры Идентифицировать базу данных Извлечь данные В этом типе инъекции злоумышленник пытается собрать информацию о типе и структура внутренней базы данных веб-приложения. Атака рассматривается как предварительный шаг для дальнейших атак. Если в базу данных отправляется неверный запрос, некоторые серверы приложений возвращают сообщение об ошибке по умолчанию, и злоумышленник пользуется этой уязвимостью. Они вводят код в уязвимые или вводимые параметры, что создает синтаксис, преобразование типа или логическую ошибку. По ошибке типа можно определить типы данных определенных столбцов. Логическая ошибка часто выявляет имена таблиц и столбцов. Вывод Цель: Определить вводимые параметры Идентифицировать схему Извлечь данные В этом типе внедрения атака применяется к хорошо защищенным базам данных, которые не возвращать любые полезные отзывы или описательные сообщения об ошибках. Атака обычно создается в стиле истинно ложного утверждения. Обнаружив уязвимый параметр, злоумышленник вводит различные условия (которые он хочет знать, истинны они или ложны) через запрос и внимательно следит за ситуацией. Если выражение истинно, страница продолжает нормально функционировать. Если false, страница ведет себя значительно иначе, чем обычно. Этот тип инъекции называется слепой инъекцией. Есть еще один тип атаки логическим выводом, который называется атакой на время. В этом методе злоумышленник создает условный оператор и вводит через уязвимый параметр и собирает информацию на основе временных задержек в ответе базы данных. См. Следующий код: http://www.example.com/product.php?product_id=100 И ЕСЛИ (version () как '5%', sleep (15), 'false ')) - Здесь злоумышленник проверяет, использует ли система версию MySQL 5.x или нет, заставляя сервер задерживать ответ на 15 секунд (злоумышленник может увеличить время задержки ). Хранимые процедуры Цель: Повышение привилегий Отказ в обслуживании Выполнение удаленных команд Хранимая процедура - это подпрограмма, доступная для приложений, которые обращаются к реляционной базе данных система. Хранимая процедура фактически хранится в словаре данных базы данных. Типичное использование хранимых процедур включает механизмы проверки данных или контроля доступа. Кроме того, хранимые процедуры могут консолидировать и централизовать логику, изначально реализованную в приложениях. Обширная или сложная обработка, требующая выполнения нескольких операторов SQL, переносится в хранимые процедуры, и все приложения вызывают эти процедуры. Можно использовать вложенные хранимые процедуры, выполняя одну хранимую процедуру из другой.. Тип хранимых процедур SQL-инъекция пытается выполнить хранимые процедуры, присутствующие в базе данных. Большая часть базы данных имеет стандартный набор процедур (помимо процедур, определяемых пользователем), которые расширяют функциональные возможности базы данных и позволяют взаимодействовать с операционной системой. Изначально злоумышленник пытается найти тип базы данных с помощью другого метода внедрения, например, незаконных/логически неверных запросов. Как только злоумышленник определяет, какие базы данных используются в серверной части, он пытается выполнить различные процедуры с помощью внедренного кода. Поскольку хранимые процедуры написаны разработчиками, эти процедуры не делают базу данных уязвимой для атак с использованием SQL-инъекций. Хранимые процедуры могут быть уязвимы для выполнения удаленных команд, повышения привилегий, переполнения буфера и даже предоставления административного доступа к операционной системе. Если злоумышленник вводит '; SHUTDOWN; - в поля User ID или Password, тогда будет сгенерирован следующий код SQL: select * from user_details, где userid = 'abcd' and password = ''; НЕИСПРАВНОСТЬ; - ' Приведенная выше команда вызывает завершение работы базы данных. Альтернативные кодировки Цель: Обнаружение уклонения В этом случае злоумышленник ввел закодированный текст, чтобы обойти методы защитного кодирования. Злоумышленники используют альтернативные методы кодирования с помощью введенных строк, такие как использование шестнадцатеричного кода, ASCII, и кодировки символов Unicode. Методы сканирования и обнаружения не полностью эффективны против альтернативных кодировок. См. Следующий пример: SELECT * FROM users WHERE login = '' AND pass = ''; exec (char (Ox73687574646j776e)) ' В приведенном выше коде использовалась функция char () и шестнадцатеричная кодировка ASCII. Функция char () возвращает фактический символ (символы) шестнадцатеричной кодировки символа (ов). Эта закодированная строка преобразуется базой данных в команду выключения при ее выполнении. Защита от SQL-инъекций Исследователи и менеджеры по безопасности предложили различные защитные методы для борьбы с SQL-инъекциями. Основная причина почти каждой SQL-инъекции - недопустимая проверка ввода. Вот список методов предотвращения: Проверка ввода Функции проверки ввода Проверка источников ввода Права доступа Настроить отчет об ошибках базы данных Проверка ввода - Простая проверка ввода может предотвратить множество атак. - Всегда проверяйте вводимые пользователем данные, проверяя тип, размер, длину, формат и диапазон. - Проверить содержимое строковых переменных и принять только ожидаемые значения. - отклонять записи, содержащие двоичные данные, escape-последовательности и т. д. Это может помочь предотвратить внедрение сценария и может защитить от некоторых эксплойтов, связанных с переполнением буфера.. - Когда вы работаете с XML-документами, проверяйте все данные на соответствие его схеме при вводе. Функции проверки ввода - Определенные символы и последовательности символов, такие как; , -, select, insert и xp_ могут использоваться для выполнения атаки с использованием SQL-инъекции. - Удалите эти символы и последовательности символов из пользовательского ввода, что снижает вероятность атаки путем инъекции. - Сканировать строку запроса на предмет нежелательных слов, таких как "вставить", "обновить", "удалить", " drop "и т. д. проверьте, представляет ли он оператор или действительный ввод пользователя. - Напишите функцию, которая справится со всем этим. Список символов, которые используются для выполнения атаки с использованием SQL-инъекции: Входной символ Значение в SQL ; Разделитель запроса. ' Разделитель строки символьных данных. - Разделитель комментариев. /* ... */ Разделители комментариев. Текст между/* и */не обрабатывается сервером. xp_ Используется в начале имени хранимых процедур, расширенных каталогом, таких как xp_cmdshell. Проверить источники ввода - Есть так много способов для атаки на базу данных, поэтому разработчик должен проверить и аутентифицировать все источники ввода и запретить неопознанным или ненадежным пользователям/веб-сайтам. Права доступа/Разрешения пользователей - Создать " учетные записи с низким уровнем привилегий для использования приложениями. - Никогда не предоставляйте привилегии уровня экземпляра учетным записям базы данных. - Никогда не предоставляйте права владельца базы данных или владельца схемы для учетных записей базы данных. - Помните о разрешении схему вашей базы данных. Настроить отчет об ошибках базы данных - Некоторые отчеты об ошибках сервера приложений по умолчанию часто выдают ценную для злоумышленников информацию (имя таблицы, имя поля, и т. д.). - Разработчик должен правильно настроить систему, поэтому эта информация никогда не будет открыта неавторизованному пользователю. Помимо вышеперечисленного, существует несколько методов, которые могут предотвратить SQL-инъекцию. Ссылка: http://en.wikipedia. org/wiki/SQL_injection Практические упражнения по SQL SQL Упражнения, практика, решение SQL Получение данных из таблиц [33 упражнения] Логические операторы SQL и реляционные операторы [12 упражнений] Подстановочные знаки SQL и специальные операторы [22 упражнения] Агрегатные функции SQL [25 упражнений] Вывод запроса форматирования SQL [10 упражнений] SQL-запросы к нескольким таблицам [7 упражнений] ФИЛЬТРАЦИЯ и СОРТИРОВКА в базе данных HR [38 упражнений] SQL JOINS SQL JOINS [29 упражнений] SQL JOINS в базе данных HR [27 упражнений] SQL SUBQUERIES ПОДзапросы SQL [39 упражнений] ПОДПРОСЫ SQL в базе данных HR [55 упражнений] SQL Union [9 упражнений] Просмотр SQL [16 упражнений] Управление учетными записями пользователей SQL [16 упражнений] База данных фильмов БАЗОВЫЕ запросы к базе данных фильмов [10 упражнений] ЗАПРОСЫ в базе данных фильмов [16 упражнений] ПОДКЛЮЧАЕТСЯ к базе данных фильмов [24 упражнения] Soccer Database Введение БАЗОВЫЕ запросы к базе данных футбола [29 упражнений] ПОДзапросы к базе данных футбола [33 упражнения] ПОДКЛЮЧАЕТ запросы к базе данных футбола [61 упражнения] База данных больниц Введение BASIC, SUBQUERIES и JOINS [39 упражнений] База данных сотрудников BASIC запросы в базе данных сотрудников [115 упражнений] ПОДПРОСЫ в базе данных сотрудников [77 упражнений] Еще больше! Хотите улучшить статью выше? Публикуйте свои заметки/комментарии/примеры через Disqus.
  2. Что такое SQL-инъекция?
  3. Почему SQL-инъекция?
  4. SQL метод внедрения
  5. Уязвимости
  6. Уязвимые приложения
  7. Технологии веб-серверов
  8. Создайте и запустите простую форму входа:
  9. - Личная информация -
  10. Пример атаки с использованием SQL-инъекции:
  11. - Личная информация -
  12. Типы SQL-инъекций
  13. Тавтологии
  14. Запросы/внедрение инструкций с поддержкой Piggy
  15. Union Query
  16. - Личная информация -
  17. Незаконные/логически неверные запросы
  18. Вывод
  19. Хранимые процедуры
  20. Альтернативные кодировки
  21. Защита от SQL-инъекций
  22. Проверка ввода
  23. Функции проверки ввода
  24. Проверить источники ввода
  25. Права доступа/Разрешения пользователей
  26. Настроить отчет об ошибках базы данных

Введение

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

Что такое SQL-инъекция?

SQL-инъекция — это метод (как и другие механизмы веб-атак) для атаки приложений, управляемых данными. Эта атака может обойти брандмауэр и затронуть полностью исправленную систему. Злоумышленник использует плохо отфильтрованные или неправильно экранированные символы, встроенные в операторы SQL, для анализа данных переменных из пользовательского ввода. Злоумышленник вводит произвольные данные, чаще всего запрос к базе данных, в строку, которая в конечном итоге выполняется базой данных через веб-приложение (например, форму входа в систему).

Через SQL-инъекцию злоумышленник может получить несанкционированный доступ к базе данных и создать, читать, обновлять, изменять или удалять данные, хранящиеся в серверной базе данных. В настоящее время почти все базы данных SQL, такие как Oracle, MySQL, PostgreSQL, MSSQL Server, MS Access, потенциально уязвимы для атак с использованием SQL-инъекций. В наиболее распространенной форме атака с использованием SQL-инъекции дает доступ к конфиденциальной информации, такой как номера социального страхования, номер кредитной карты или другие финансовые данные.

Почему SQL-инъекция?

— Определить вводимые параметры.
— Определить тип и версию базы данных.
— Обнаружение схемы базы данных.
— Извлечение данных.
— Вставка, изменение или удаление данных.
— Отказ в обслуживании авторизованных пользователей путем блокировки или удаления таблиц.
— Обход аутентификации.
— Повышение привилегий.
— Выполнять удаленные команды, вызывая сохраненные функции в СУБД, которые зарезервированы для администраторов.

SQL метод внедрения

Вот несколько методов, с помощью которых операторы SQL вводятся в уязвимые системы
— вводятся через ввод данных пользователем.
— ввод через поля cookie содержат строки атаки.
— Внедрение через серверные переменные.
— Внедрение второго порядка, когда скрытые операторы должны выполняться в другое время другой функцией.

Уязвимости

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

Распространенной причиной уязвимости приложения к SQL-инъекции является неправильная фильтрация и отсутствие проверки для ввода данных пользователем. Формы ввода довольно распространены для сбора данных от пользователя. Таким образом, практически невозможно закрыть все точки входа, чтобы запретить SQL-инъекцию. Для предотвращения атак разработчики должны применять надлежащую фильтрацию/проверку ко всем формам.

Уязвимые приложения

— Почти все базы данных SQL потенциально уязвимы, такие как MS SQL Server, DB2, Oracle, PostgreSQL, MySQL, MS Access, Sybase, Informix и т. Д.
— доступ через приложения, использующие:
ASP, JSP, PHP
Perl и скрипты CGI, которые обращаются к базам данных
XML, XSL и XSQL
JavaScript
Веб-приложения для конкретных баз данных
Многие другие

Технологии веб-серверов

Веб-серверы — это компьютеры, которые доставляют веб-страницы. Каждый веб-сервер имеет IP-адрес и, возможно, доменное имя. Например, если вы вводите URL-адрес https://www.w3resource.com/index.php в своем браузере, это отправляет запрос на веб-сервер, доменное имя которого — w3resource.com. Затем сервер получает страницу с именем index.php и отправляет ее в ваш браузер. Веб-сервер хранит все файлы, необходимые для отображения веб-страниц на компьютере.

При передаче данных на серверную часть из веб-страницы часто используется метод GET для добавления данных, предоставленных пользователем, в конце URL-адреса (например, example.com?q=userid&p=password). Для злоумышленника это открывает возможность получить значения, переданные таким образом, и выполнить некоторые вредоносные действия.

Создайте и запустите простую форму входа:

Вот это простая форма входа (form.html ), которая может аутентифицировать идентификатор пользователя и пароль.

form.html

       Пример ошибки формы SQL-инъекции    ->  body {margin: 30px}: invalid {border-color: # e88; -webkit-box-shadow: 0 0 5px rgba (  255, 0, 0, .8); - moz-box-shadow: 0 0 5px rbba (255, 0, 0, .8); - o-box-shadow: 0 0 5px rbba (255, 0, 0,  .8); - ms-box-shadow: 0 0 5px rbba (255, 0, 0, .8); box-shadow: 0 0 5px rgba (255, 0, 0, .8);}: требуется {border  -цвет: # 88a; -webkit-box-shadow: 0 0 5px rgba (0, 0, 255, .5); - moz-box-shadow: 0 0 5px rgba (0, 0, 255, .5);  -o-box-shadow: 0 0 5px rgba (0, 0, 255, .5); - ms-box-shadow: 0 0 5px rgba (0, 0, 255,. 5); box-shadow: 0 0 5px rgba (0, 0, 255, .5);} form {width: 300px; margin: 20px auto;} input {font-family: "Helvetica Neue", Helvetica, Arial,  sans-serif; border: 1px solid #ccc; font-size: 20px; width: 300px; min-height: 30px; display: block; margin-bottom: 15px; margin-top: 5px; outline: none; -webkit-  border-radius: 5px; -moz-border-radius: 5px; -o-border-radius: 5px; -ms-border-radius: 5px; border-radius: 5px;} input [type = submit] {background: #  066923; padding: 10px; color: #fff;}               

При отправке этой формы имя пользователя и пароль передаются в скрипт action.php . Пользователь будет аутентифицирован путем предоставления правильного идентификатора пользователя и пароля. Процесс входа в систему осуществляется путем создания SQL-запроса и сравнения идентификатора пользователя и пароля с записями входа в систему в базе данных.

       Пример ошибки формы внедрения SQL      
php $ host = "localhost"; $ username = "root"; $ password = ""; $ db_name = "hr"; $ con = mySQL_connect ("$ host", "$ username", "$ password") или die ("не удается подключиться"); mySQL_select_db ("$ db_name") или die ("невозможно выбрать БД"); $ uid = $ _POST ['uid']; $ pid = $ _POST ['passid']; $ SQL = "select * from user_details, где userid = '$ uid' and password = '$ pid' "; $ result = mySQL_query ($ SQL); if (mySQL_num_rows ($ result)> 0) {echo"

"." - Личная информация - ". $ row [3]. "

", ""; while ($ row = mySQL_fetch_row ($ result)) {echo "

". "Идентификатор пользователя:". $ row [0]. "

"; echo "

". "Пароль:". $ row [1]. "

"; echo "

". "Имя:". $ row [2] . "Фамилия:". $ Row [3]. "

"; echo "

". "Пол:". $ Row [4]. "Дата рождения:". $ Row [5] . "

"; echo "

". "Country:". $ row [6]. "Рейтинг пользователя:". $ Row [7]. "

"; echo "

". "Идентификатор электронной почты:". $ Row [8]. "

"; echo "--- ----------------------------------------- ";}} elseecho" Неверный идентификатор пользователя. или пароль ";?>

Структура таблицы: user_details

Записи таблицы: user_details

Если идентификатор пользователя и пароль совпадают с записью в базе данных , отобразится личная информация пользователя. В противном случае отобразится «Недействительный идентификатор пользователя или пароль».

Теперь введите действительный идентификатор пользователя и пароль в form.html и проверьте результат:

Вывод:

- Личная информация -

ID пользователя: scott123

Пароль: [электронная почта защищена]

Имя: Скотт Фамилия: Rayy

Пол: M Дата рождения: 15.05.1990

Страна: США Рейтинг пользователя: 100

Идентификатор электронной почты: [email защищенный]

--------------------------------------------

Позвольте ввести действительный идентификатор пользователя и недопустимый пароль в form.html и проверьте результат:

Вывод :

Недействительное имя пользователя или пароль

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

Пример атаки с использованием SQL-инъекции:

Давайте посмотрим в коде ( action.php ) приведенного выше примера:

  $ uid = $ _POST ['uid']; $ pid =  $ _POST ['passid']; $ SQL = "выберите * из user_details, где userid = '$ uid' и пароль = '$ pid'";  $ result = mySQL_query ($ SQL);   

В приведенном выше коде данные идентификатора пользователя и пароля, полученные от пользователя, хранятся в $ uid и $ pid. Интерпретатор выполнит команду (которая будет сохранена в $ result) на основе входных данных. Теперь, если злоумышленник предоставляет abcd в качестве идентификатора пользователя и something 'или' x '=' x в качестве пароля, тогда запрос будет построен как

$ SQL = "select * from user_details, где userid = 'abcd' и password = 'something' или 'x' = 'x'";

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

Вывод :

- Личная информация -

Идентификатор пользователя: scott123

Пароль: [ электронная почта защищена]

Имя: Скотт Фамилия: Рэй

Пол: M Дата рождения: 15.05.1990

Страна: США Рейтинг пользователя: 100

Идентификатор электронной почты: [адрес электронной почты защищен]

----------------------- ---------------------

Идентификатор пользователя: ferp6734

Пароль: [электронная почта защищена] & 3

Имя: Palash Фамилия: Ghosh

Пол: M Дата рождения: 1987-07-05

Страна: ИНДИЯ Рейтинг пользователя: 75

Идентификатор электронной почты: [электронная почта защищена]

------------------------------ --------------

ID пользователя: diana094

Пароль: [электронная почта защищена]

Имя: Диана Фамилия: Lorentz

Пол: F Дата рождения: 1988-09-22

Страна: Германия Рейтинг пользователя: 88

Идентификатор электронной почты: [электронная почта защищена]

--------------------------------- -----------

Типы SQL-инъекций

- SQL-инъекций на основе тавтологий

- с поддержкой Piggy Запросы/внедрение инструкций

- Объединенный запрос

- Недопустимые/логически неверные запросы

- Вывод

- Внедрение хранимых процедур

Тавтологии

Цель :

  • Определить вводимые параметры
  • Обойти аутентификацию
  • Извлечь данные

В логике тавтология (от греч. слово ταυτολογία) - это формула, которая верна во всех возможных интерпретациях. При атаке на основе тавтологии код вводится с использованием оператора условного ИЛИ, так что запрос всегда оценивается как ИСТИНА. Атаки с использованием SQL-инъекций на основе тавтологий обычно обходят аутентификацию пользователя и извлекают данные, вставляя тавтологию в предложение WHERE SQL-запроса. Запрос преобразует исходное условие в тавтологию, в результате чего все строки в таблице базы данных открыты для неавторизованного пользователя. Типичная тавтология SQL имеет форму «или », где выражение сравнения использует один или несколько операторов отношения для сравнения операндов и генерации всегда истинного условия. Если неавторизованный пользователь ввел идентификатор пользователя как abcd и пароль как something 'или' x '=' x , то в результате будет получен следующий запрос:

 select * from user_details, где userid = 'abcd' и password = 'something' или 'x' = 'x' 

Пример уже объяснен в разделе «Пример SQL-инъекции. атака".

Запросы/внедрение инструкций с поддержкой Piggy

Цель :

  • Извлечь данные
  • Изменить набор данных
  • Выполнить удаленные команды
  • Отказ в обслуживании

Этот тип атаки отличается от других, поскольку хакер вводит дополнительные запросы к исходному запросу, в результате чего база данных получает несколько запросов SQL.. Первый запрос действителен и выполняется нормально, последующие запросы - это внедренные запросы, которые выполняются в дополнение к первому. Из-за неправильной конфигурации система уязвима для дополнительных запросов и позволяет использовать несколько операторов в одном запросе. Пусть злоумышленник вводит abcd как usrerid и '; drop table xyz - как пароль в форме входа:

Затем приложение сгенерирует следующий запрос:

 select * from user_details, где userid = 'abcd' and password = '';  drop table xyz - '

После завершения первого запроса (возвращенного пустого набора результатов (т. е. нулевых строк)) база данных распознает разделитель запроса (";") и выполнит введенный второй запрос. Результатом выполнения второго запроса будет удаление таблицы xyz, что приведет к уничтожению ценной информации.

Union Query

Цель . :

  • Обход аутентификации
  • Извлечь данные

Этот тип атаки может быть выполнен путем вставки запрос UNION в уязвимый параметр, который возвращает набор данных, который представляет собой объединение результата исходного первого запроса и результатов внедренного запроса.

Оператор SQL UNION объединяет результаты двух или больше запросов и создает набор результатов, который включает выбранные строки из участвующих запросов в UNION.

Основные правила объединения двух или более запросов с помощью UNION:

1) Количество столбцов и порядок столбцов во всех запросах должны быть одинаковыми.

2) Типы данных столбцов при включении таблицы в каждый запрос должны быть одинаковыми или совместимыми.

3) Обычно возвращаемые имена столбцов берутся из первого запроса.

По умолчанию UNION ведет себя как UNION [DISTINCT], т.е. удаляет повторяющиеся строки; однако использование ключевого слова ALL с UNION возвращает все строки, включая дубликаты.

Злоумышленник, который пытается использовать этот метод, должен хорошо знать схему БД. Давайте попробуем описанный выше метод с двумя таблицами user_details , emp_details и нашей первой формой входа:

Структура таблицы: user_details

Записи таблицы: user_details

Структура таблицы: emp_details

Записи таблицы: emp_details

Предположим, злоумышленник вводит ' UNION SELECT * FROM emp_details - в поле User ID и abcd в Пароль сохранен как идентификатор пользователя и пароль, который генерирует следующий запрос:

  SELECT * FROM user_details WHERE userid = '' UNION SELECT * FROM EMP_DETAILS - 'and password =' ​​abcd ' 

Два дефиса (-) комментируют остальную часть запроса, т.е. 'и password =' ​​abcd '. Таким образом, запрос становится объединение двух запросов SELECT. Первый запрос SELECT возвращает нулевой набор, поскольку в таблице user_details нет соответствующей записи. Второй запрос возвращает все данные из таблицы emp_details . Давайте попробуем это с помощью нашей формы входа.

Вывод:

- Личная информация -

Идентификатор пользователя: 100

Пароль: Стивен

Имя: Король Фамилия: SKING

Пол: 515.123.4567 Дата рождения: 17.06.1987

Страна: AD_PRES Рейтинг пользователя: 24000.00

Электронный адрес: 0.00

--------------------------------------------

ID пользователя: 101

Пароль: Neena

Имя: Кочхар Фамилия: NKOCHHAR

Пол: 515.123.4568 Дата рождения : 1987-06-18

Страна: AD_VP Рейтинг пользователя: 17000.00

Электронный адрес: 0.00

----------- ---------------------------------

Идентификатор пользователя: 102

Пароль: Lex

Имя: De Haan Фамилия: LDEHAAN

Пол: 515.123.4569 Дата рождения: 19.06.1987

Страна: AD_VP Рейтинг пользователя: 17000.00

Электронный адрес: 0.00

---------------------- ----------------------

ID пользователя: 103

Пароль: Александр

Имя: Hunold Фамилия: AHUNOLD

Пол: 590.423.4567 Дата рождения: 1987-06-20

Страна: IT_PROG Рейтинг пользователя: 9000.00

Идентификатор электронной почты: 0.00

---------------------------------- ----------

Идентификатор пользователя: 104

Пароль: Брюс

Имя: Эрнст Фамилия: BERNST

Пол: 590.423.4568 Дата рождения: 21.06.1987

Страна: IT_PROG Рейтинг пользователя: 6000.00

Идентификатор электронной почты: 0.00

--------------------- -----------------------

ID пользователя: 105

Пароль: David

Имя: Остин Фамилия: DAUSTIN

Пол: 590.423.4569 Дата рождения: 1987-06-22

Страна: IT_PROG Рейтинг пользователя: 4800.00

Идентификатор электронной почты: 0.00

--------------------------------- -----------

Заголовки (например, User ID:, First Name: ect) ранее были объявлены в action.php , но вывод показывает, что результат содержит employee_id, first_name, last_name, email, phone_number, найм_дату, job_id, salary, commision_pct из таблицы emp_details .

Незаконные/логически неверные запросы

Цель :

  • Определить инъекционные параметры
  • Идентифицировать базу данных
  • Извлечь данные

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

Вывод

Цель :

  • Определить вводимые параметры
  • Идентифицировать схему
  • Извлечь данные

В этом типе внедрения атака применяется к хорошо защищенным базам данных, которые не возвращать любые полезные отзывы или описательные сообщения об ошибках. Атака обычно создается в стиле истинно ложного утверждения. Обнаружив уязвимый параметр, злоумышленник вводит различные условия (которые он хочет знать, истинны они или ложны) через запрос и внимательно следит за ситуацией. Если выражение истинно, страница продолжает нормально функционировать. Если false, страница ведет себя значительно иначе, чем обычно. Этот тип инъекции называется слепой инъекцией. Есть еще один тип атаки логическим выводом, который называется атакой на время. В этом методе злоумышленник создает условный оператор и вводит через уязвимый параметр и собирает информацию на основе временных задержек в ответе базы данных. См. Следующий код:

 http://www.example.com/product.php?product_id=100 И ЕСЛИ (version () как '5%', sleep (15), 'false  ')) - 

Здесь злоумышленник проверяет, использует ли система версию MySQL 5.x или нет, заставляя сервер задерживать ответ на 15 секунд (злоумышленник может увеличить время задержки ).

Хранимые процедуры

Цель :

  • Повышение привилегий
  • Отказ в обслуживании
  • Выполнение удаленных команд

Хранимая процедура - это подпрограмма, доступная для приложений, которые обращаются к реляционной базе данных система. Хранимая процедура фактически хранится в словаре данных базы данных. Типичное использование хранимых процедур включает механизмы проверки данных или контроля доступа. Кроме того, хранимые процедуры могут консолидировать и централизовать логику, изначально реализованную в приложениях. Обширная или сложная обработка, требующая выполнения нескольких операторов SQL, переносится в хранимые процедуры, и все приложения вызывают эти процедуры. Можно использовать вложенные хранимые процедуры, выполняя одну хранимую процедуру из другой..
Тип хранимых процедур SQL-инъекция пытается выполнить хранимые процедуры, присутствующие в базе данных. Большая часть базы данных имеет стандартный набор процедур (помимо процедур, определяемых пользователем), которые расширяют функциональные возможности базы данных и позволяют взаимодействовать с операционной системой. Изначально злоумышленник пытается найти тип базы данных с помощью другого метода внедрения, например, незаконных/логически неверных запросов. Как только злоумышленник определяет, какие базы данных используются в серверной части, он пытается выполнить различные процедуры с помощью внедренного кода. Поскольку хранимые процедуры написаны разработчиками, эти процедуры не делают базу данных уязвимой для атак с использованием SQL-инъекций. Хранимые процедуры могут быть уязвимы для выполнения удаленных команд, повышения привилегий, переполнения буфера и даже предоставления административного доступа к операционной системе.
Если злоумышленник вводит '; SHUTDOWN; - в поля User ID или Password, тогда будет сгенерирован следующий код SQL:

 select * from user_details, где userid = 'abcd' and password = '';  НЕИСПРАВНОСТЬ;  - '

Приведенная выше команда вызывает завершение работы базы данных.

Альтернативные кодировки

Цель :

  • Обнаружение уклонения

В этом случае злоумышленник ввел закодированный текст, чтобы обойти методы защитного кодирования. Злоумышленники используют альтернативные методы кодирования с помощью введенных строк, такие как использование шестнадцатеричного кода, ASCII,
и кодировки символов Unicode. Методы сканирования и обнаружения не полностью эффективны против альтернативных кодировок. См. Следующий пример:

 SELECT * FROM users WHERE login = '' AND pass = ''; exec (char (Ox73687574646j776e)) '

В приведенном выше коде использовалась функция char () и шестнадцатеричная кодировка ASCII. Функция char () возвращает фактический символ (символы) шестнадцатеричной кодировки символа (ов). Эта закодированная строка преобразуется базой данных в команду выключения при ее выполнении.

Защита от SQL-инъекций

Исследователи и менеджеры по безопасности предложили различные защитные методы для борьбы с SQL-инъекциями. Основная причина почти каждой SQL-инъекции - недопустимая проверка ввода. Вот список методов предотвращения:

  • Проверка ввода
  • Функции проверки ввода
  • Проверка источников ввода
  • Права доступа
  • Настроить отчет об ошибках базы данных

Проверка ввода

- Простая проверка ввода может предотвратить множество атак.
- Всегда проверяйте вводимые пользователем данные, проверяя тип, размер, длину, формат и диапазон.
- Проверить содержимое строковых переменных и принять только ожидаемые значения.
- отклонять записи, содержащие двоичные данные, escape-последовательности и т. д. Это может помочь предотвратить внедрение сценария и может защитить от некоторых эксплойтов, связанных с переполнением буфера..
- Когда вы работаете с XML-документами, проверяйте все данные на соответствие его схеме при вводе.

Функции проверки ввода

- Определенные символы и последовательности символов, такие как; , -, select, insert и xp_ могут использоваться для выполнения атаки с использованием SQL-инъекции.
- Удалите эти символы и последовательности символов из пользовательского ввода, что снижает вероятность атаки путем инъекции.
- Сканировать строку запроса на предмет нежелательных слов, таких как "вставить", "обновить", "удалить", " drop "и т. д. проверьте, представляет ли он оператор или действительный ввод пользователя.
- Напишите функцию, которая справится со всем этим.

Список символов, которые используются для выполнения атаки с использованием SQL-инъекции:

Входной символ Значение в SQL
; Разделитель запроса.
' Разделитель строки символьных данных.
- Разделитель комментариев.
/* ... */ Разделители комментариев. Текст между/* и */не обрабатывается сервером.
xp_ Используется в начале имени хранимых процедур, расширенных каталогом, таких как xp_cmdshell.

Проверить источники ввода

- Есть так много способов для атаки на базу данных, поэтому разработчик должен проверить и аутентифицировать все источники ввода и запретить неопознанным или ненадежным пользователям/веб-сайтам.

Права доступа/Разрешения пользователей

- Создать " учетные записи с низким уровнем привилегий для использования приложениями.
- Никогда не предоставляйте привилегии уровня экземпляра учетным записям базы данных.
- Никогда не предоставляйте права владельца базы данных или владельца схемы для учетных записей базы данных.
- Помните о разрешении схему вашей базы данных.

Настроить отчет об ошибках базы данных

- Некоторые отчеты об ошибках сервера приложений по умолчанию часто выдают ценную для злоумышленников информацию (имя таблицы, имя поля, и т. д.).
- Разработчик должен правильно настроить систему, поэтому эта информация никогда не будет открыта неавторизованному пользователю.

Помимо вышеперечисленного, существует несколько методов, которые могут предотвратить SQL-инъекцию.

Ссылка: http://en.wikipedia. org/wiki/SQL_injection

Практические упражнения по SQL

  • SQL Упражнения, практика, решение
  • SQL Получение данных из таблиц [33 упражнения]
  • Логические операторы SQL и реляционные операторы [12 упражнений]
  • Подстановочные знаки SQL и специальные операторы [22 упражнения]
  • Агрегатные функции SQL [25 упражнений]
  • Вывод запроса форматирования SQL [10 упражнений]
  • SQL-запросы к нескольким таблицам [7 упражнений]
  • ФИЛЬТРАЦИЯ и СОРТИРОВКА в базе данных HR [38 упражнений]
  • SQL JOINS
    • SQL JOINS [29 упражнений]
    • SQL JOINS в базе данных HR [27 упражнений]
  • SQL SUBQUERIES
    • ПОДзапросы SQL [39 упражнений]
    • ПОДПРОСЫ SQL в базе данных HR [55 упражнений]
  • SQL Union [9 упражнений]
  • Просмотр SQL [16 упражнений]
  • Управление учетными записями пользователей SQL [16 упражнений]
  • База данных фильмов
    • БАЗОВЫЕ запросы к базе данных фильмов [10 упражнений]
    • ЗАПРОСЫ в базе данных фильмов [16 упражнений]
    • ПОДКЛЮЧАЕТСЯ к базе данных фильмов [24 упражнения]
  • Soccer Database
    • Введение
    • БАЗОВЫЕ запросы к базе данных футбола [29 упражнений]
    • ПОДзапросы к базе данных футбола [33 упражнения]
    • ПОДКЛЮЧАЕТ запросы к базе данных футбола [61 упражнения]
  • База данных больниц
    • Введение
    • BASIC, SUBQUERIES и JOINS [39 упражнений]
  • База данных сотрудников
    • BASIC запросы в базе данных сотрудников [115 упражнений]
    • ПОДПРОСЫ в базе данных сотрудников [77 упражнений]
  • Еще больше!

Хотите улучшить статью выше? Публикуйте свои заметки/комментарии/примеры через Disqus.

Оцените статью
nanomode.ru
Добавить комментарий