TGViewer
Артем Лещев | ИТ Артем Лещев | ИТ @asleshchev · 70 subscribers
Post #127 109
🔪 SQL-инъекции. Часть 2. Как защититься от инъекций?

В прошлом техническом посте мы:
➡️ посмотрели какие бывают инъекции
➡️ попробовали сами их по-эксплуатировать.

Возникает закономерный вопрос: и как же от них защититься?

Бремя ответственности лежит на разработчике. Но! ИМХО, это тот самый случай, когда и аналитик может заглянуть в код и оценить уровень бардака в нем. Потому что отличить нормальный запрос в базу от уязвимого, не так уж и сложно.

✔️ Самое главное правило: использовать подготовленные выражения (prepared statements) в базе данных или параметризированные запросы (parameterized queries) в коде бэкенда.

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

Пример ХОРОШЕЙ практики: в этом коде параметры представлены знаками вопроса:

cur.execute('INSERT INTO users(id, name, surname) VALUES(?, ?, ?)', (id, name, surname))

cur.execute('SELECT * FROM users WHERE login = ? AND password = ?', (login, password))


В общем случае, всегда помним:
❌ не склеиваем строки конкатенацией (+ в Python, Java или || в SQL);
❌ не подставляем в SQL-запрос имена таблиц и полей, либо сами значения с помощью интерполяции/f-строками.

Пример ПЛОХОЙ практики:

cur.execute(f'INSERT INTO cars(car_id, model) VALUES({car_id}, {model})')


✔️ Использовать библиотеки объектно-реляционного маппинга (ORM). Они позволяют взаимодействовать с БД через объекты и классы языка программирования, а не через SQL. ORM уже имеют встроенные механизмы параметризации.
Для Python это, например, SQLAlchemy.
Для Java, например, Hibernate.

✔️ Предусмотрите валидацию данных. Системный аналитик может предоставить данные для валидации пользовательского ввода.
Самые простые вещи, это, например, вводимый возраст:
>= 18 and <=120

✔️ Соблюдайте принцип наименьших привилегий.
Почти каждая система имеет ролевую модель. Учётки должны иметь права только на те таблицы, которые реально нужны для выполнения бизнес-операций, а не на всю базу целиком.

🐧 Понравился пост? Подписывайся, чтобы не пропустить следующий.

Артем Лещев
More from @asleshchev
  1. Aug 31, 2026Post #146
  2. Aug 9, 2026🛡 XSS-атака и аспекты безопасного API. Когда я 3-4 года назад работал менеджером ИТ-проек…
  3. Aug 1, 2026Есть у меня пара знакомых программистов, которые работают с железом. На мой вопрос — кто и…
  4. Jul 26, 2026🛡 CSRF-атака и аспекты безопасного API. CSRF произносится как sea-surf. Cross-Site Reques…
  5. Jul 17, 2026Post #142
  6. Jul 9, 2026На работе была проблема: сессия быстро протухала в Text-To-Speech-сервисе. Частые залогины…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →