Перейти к содержанию

SQL в приложениях: параметризованные запросы и SQL-инъекции

Начало урока

SQL в приложениях: параметризованные запросы и SQL-инъекции

Как настоящие программы безопасно отправляют SQL -- и как злоумышленники ломают те, что делают это неправильно

Главная идея: Приложение почти никогда не пишет SQL вручную -- оно собирает строки запросов из данных, пришедших от пользователей. Если эти данные вклеиваются прямо в текст запроса, злоумышленник может протащить туда свой собственный SQL. Важнейшая защита -- это параметризованный запрос (его также называют подготовленным выражением): вы отправляете шаблон запроса и значения по разным каналам, поэтому пользовательский ввод никогда не сможет изменить смысл запроса.
К концу вы сможете:
  • описать, как приложение подключается к базе данных и отправляет SQL,
  • объяснить, почему построение запросов через конкатенацию строк опасно,
  • разобрать анатомию атаки SQL-инъекции (обход входа и кража данных через UNION),
  • написать параметризованный запрос / подготовленное выражение, нейтрализующее атаку,
  • применить принцип наименьших привилегий, чтобы взломанный запрос нанёс как можно меньше вреда.

1. Как приложение отправляет SQL

Раньше вы выполняли SQL вручную в клиенте. Веб- или мобильное приложение делает то же самое, только программно. Оно открывает соединение с базой через драйвер (библиотеку вроде mysql2 для Node.js, JDBC для Java или psycopg для Python), отправляет запрос как текст и читает строки обратно.

База данных вообще не знает, что существует какой-то "пользователь". Она получает строку, разбирает её в запрос, выполняет и возвращает набор строк. В этом суть всей темы: база доверяет любому SQL-тексту, который ей передали. Если ваш код позволяет постороннему влиять на этот текст, посторонний фактически пишет SQL на вашем сервере.

Всё, что ниже, использует одну маленькую базу магазина. Создадим её один раз.

Продолжите этот урок на YourAIZone

В полном уроке — объяснение целиком, разобранные примеры, частые ошибки, тесты с мгновенной проверкой и ИИ-репетитор. Начните сразу как гость или создайте аккаунт, чтобы сохранять прогресс.

В полном уроке

  • Объяснение целиком
  • Разобранные примеры
  • Частые ошибки и как их избежать
  • Тестовые вопросы: 15
  • ИИ-репетитор, который отвечает на вопросы по теме
  • Отслеживание прогресса для ученика, родителей и учителя