Распространенные атаки на уязвимости SQL-инъекций и решения для них

Распространенные атаки с использованием SQL-инъекций на интерфейсы и решения проектов
1. Уязвимости слабых паролей

Решение: Используйте в качестве пароля не менее 6 цифр, букв и специальных символов. В базе данных должны храниться не открытые пароли, а зашифрованные зашифрованные тексты.

2. Если вы не входите в фоновый режим с именем пользователя и паролем, вы можете напрямую ввести фоновый URL-адрес для входа в систему.

Решение. Отфильтруйте недопустимые запросы пользователей на подключение, настроив перехватчики.

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

Решение. Настройте исключение, оберните информацию об исключении и не выбрасывайте ее на страницу.

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

4.1 Ввод числа Ввод
    в адресную строку браузера: web/findData.do?id=1, это интерфейс получения, отправка этого запроса эквивалентна вызову оператора запроса: 
    sql="SELECT FROM table WHERE id="+id
    При нормальных обстоятельствах должно быть возвращено сообщение с id=1. Затем, если вы введете: web/findData.do?id=-1 ИЛИ 1 =1 в адресной строке браузера, это будет атака с внедрением SQL, и вся соответствующая информация может быть возвращена. Почему это так?

    Это связано с тем, что id = -1 всегда ложно, 1 = 1 всегда истинно, а все операторы where всегда истинны, поэтому условие where эквивалентно отсутствию добавления условия where, тогда результат запроса эквивалентен содержимому весь стол.

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

Это почтовый запрос.При входе в систему вызовите интерфейс web/login.do, сначала подключитесь к базе данных, а затем выполните проверку параметров имени пользователя и пароля, переносимых в параметрах почтового запроса в фоновом режиме, то есть процесс sql-запроса. Предполагая, что правильными именем пользователя и паролем являются admin и pwd12345678, введите правильные имя пользователя и пароль и отправьте запрос, что эквивалентно вызову следующего оператора SQL: SELECT *
FROM SYS_ADMIN WHERE NAME = 'admin' ADN password = 'pwd12345678'
Поскольку имя пользователя и пароль являются строками, и метод внедрения SQL преобразует данные, содержащиеся в параметре, в строку, закомментированную в mysql. В mysql есть 2 метода аннотации:

1. '#': все строки после '#' будут считаться комментариями.

Ввод имени пользователя: admin'# (одинарная кавычка закрывает одинарную кавычку слева от admin), пароль можно ввести произвольно, например: 111, а затем нажать кнопку отправки. Эквивалент инструкции SQL:
SELECT * FROM SYS_ADMIN WHERE NAME = 'admin'#' AND password = '111'

Все '#' закомментированы, что эквивалентно:
SELECT * FROM SYS_ADMIN WHERE NAME = 'admin'

Ввод имени пользователя: admin' OR NAME LIKE 'a%'# (одинарная кавычка закрывает одинарную кавычку слева от a%), пароль можно ввести свободно, например: abcd, а затем нажать кнопку отправки. Эквивалент оператора SQL:

ВЫБЕРИТЕ * ОТ SYS_ADMIN 
, ГДЕ ИМЯ = 'admin' ИЛИ ​​ИМЯ, КАК 'a%'#' И пароль = 'abcd'

Все '#' закомментированы, что эквивалентно:
SELECT * FROM SYS_ADMIN WHERE NAME = 'admin' OR NAME LIKE 'a%'

2. '--' (после -- есть пробел): строка после '--' будет считаться комментарием.

Введите имя пользователя: admin'-- (обратите внимание -- за ним пробел, а одинарная кавычка закрывает одинарную кавычку слева от пользователя), и введите пароль по желанию, например: 111, и затем нажмите кнопку отправки. Эквивалент оператора SQL:

ВЫБЕРИТЕ * ИЗ SYS_ADMIN, ГДЕ ИМЯ = 'admin'-- ' И пароль = '111'
ВЫБЕРИТЕ * ИЗ SYS_ADMIN, ГДЕ ИМЯ = 'admin'-- ' И пароль = '1111'

'--' закомментировано, что эквивалентно:
SELECT * FROM SYS_ADMIN WHERE NAME = 'admin'

Таким образом, в двух вышеприведенных случаях возможен ввод неправильного пароля или вход в учетную запись с именем пользователя «admin» без ввода пароля, что очень опасно.


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

1) Неподходящая обработка типов;
2) Небезопасная конфигурация базы данных;
3) Неподходящая обработка набора запросов;
4) Неподходящая обработка ошибок;
5) Неподходящая обработка escape-символов;
6) Неподходящая обработка нескольких коммитов.

Защита:

1) Строго проверяйте тип и формат входных переменных.Для целочисленных параметров добавьте условие суждения: не может быть пустым, а тип параметра должен быть числом.Для строковых параметров можно использовать регулярные выражения для фильтрации: например: must быть [0-9a -zA-Z] диапазоном строк.

2) Никогда не используйте динамически собранный sql, вы можете использовать параметризованный sql или напрямую использовать хранимые процедуры для запроса данных и доступа.

3) Фильтровать и экранировать специальные символы, экранировать перед переменными и экранировать специальные символы, такие как ', ", \.

4) Не храните конфиденциальную информацию напрямую, не шифруйте и не хэшируйте пароли и конфиденциальную информацию.

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

6) Используйте механизм предварительной компиляции mysql для отправки шаблона оператора sql (переменные используют заполнители) на сервер mysql.Сервер mysql компилирует шаблон оператора sql, и после компиляции соответствующий индекс компилируется в соответствии с анализ оптимизации оператора Для оптимизации, когда параметры окончательно связаны, соответствующие параметры отправляются на сервер mysql для прямого выполнения, что экономит время запроса sql и ресурсы сервера mysql и достигает цели одной компиляции. и многократное выполнение.Кроме того, это также может предотвратить внедрение SQL. В частности, как предотвратить внедрение SQL? Фактически, когда связанные параметры передаются серверу mysql, сервер mysql компилирует параметры, то есть заполняет их соответствующими заполнителями и выполняет операцию побега.


 

Supongo que te gusta

Origin blog.csdn.net/u010174217/article/details/118145072
Recomendado
Clasificación