(1) SQL-инъекция.
1. Как понять SQL-инъекцию?
Внедрение SQL — это метод атаки, при котором код SQL добавляется к входным параметрам и передается на сервер SQL для анализа и выполнения.
2. Как происходит внедрение SQL?
Веб-разработчик не может гарантировать, что все входные данные были отфильтрованы.
Злоумышленник создает исполняемый код SQL из входных данных, отправленных на сервер SQL.
База данных неправильно настроена для обеспечения безопасности.
3. Как найти уязвимости SQL-инъекций?
С помощью логических рассуждений:
Определите все точки ввода в веб-приложении.
Узнайте, какие типы запросов вызывают исключения. (получить специальный символ '")
Обнаружение исключений в ответах сервера.
4. Как выполнить атаку SQL-инъекцией?
Цифровой впрыск.
(1) выберите * из имени, где id = -1 ИЛИ 1 = 1; Это запросит всю таблицу.
Струнная инъекция.
(1) SQL, # будет закомментирован после
select * from name= 'llsydn'#' and password = "123456";
(2) SQL, -- будет закомментирован позже
select * from name= 'llsydn'--' and password = "123456";
5. Как предотвратить внедрение SQL?
Строго проверяйте тип и формат входных переменных.
Фильтровать и экранировать специальные символы.
Используйте механизм прекомпиляции MySQL.
(2) Уровень изоляции MySQL
1. Уровень изоляции транзакций MySQL.
SERIALIZABLE; REPEATABLE READ; READ COMITTED; READ UNCOMMITTED
Сериализация; Повторяемое чтение; Чтение с фиксацией; Чтение без фиксации
(1) Serializable, самый высокий уровень, не может работать с базой данных, если другие операции не представлены.
(2) Повторяемое чтение, повторяемое чтение. (уровень изоляции по умолчанию)
В случае фантомного чтения транзакция A вставляет данные и отправляет фиксацию. Когда транзакция B запрашивает select, обновляет данные обновления и отправляет фиксацию, запрос B будет иметь фантомное чтение, то есть будут отображаться данные, вставленные транзакцией A.
(3) чтение зафиксировано, совершено чтение. Транзакция обновляет данные обновления и отправляет фиксацию. Обновленные данные можно прочитать в транзакции B. (то есть есть неповторяемое чтение)
(4) чтение незафиксированного, незафиксированное чтение. Транзакция обновляет данные обновления и не фиксируется. Обновленные данные можно прочитать в транзакции B. (Транзакция, откат, откат, будут грязные чтения)
2. Производительность MySQL и блокировка таблиц для нетранзакционных таблиц.
Транзакционные базы данных более сложны, чем нетранзакционные базы данных, поскольку они изолируют разных пользователей друг от друга, что естественно.
отражается на производительности системы.
Некоторые способы повышения производительности при использовании транзакционных таблиц:
(1) Используйте небольшие транзакции.
(2) Выберите соответствующий уровень изоляции.
(3) Перед началом транзакции убедитесь, что все возможно.
(4) Избегайте взаимоблокировки.