На приведённом фрагменте SQL-инъекции: "query = \"SELECT * FROM users WHERE login = '\" + user + \"'\";" — объясните уязвимость, предложите исправление и опишите динамические и статические методы обнаружения подобных ошибок

26 Янв в 12:33
32 +1
0
Ответы
1
Уязвимость
- В строке "query = \"SELECT * FROM users WHERE login = '\" + user + \"'\";" значение переменной `user` вставляется напрямую в SQL. Это позволяет злоумышленнику подставить специальную строку и изменить семантику запроса (SQL‑инъекция).
- Примеры атак:
- Если `user = "admin' --"`, итоговый запрос станет `SELECT * FROM users WHERE login = 'admin' --'` — часть после `--` превратится в комментарий и кавычки будут нейтрализованы.
- Тривиальная «таутология»: `user = "' OR '1'='1"` даст условие, всегда истинное (`' OR ' 111 '=' 111`), что позволяет обойти аутентификацию.
Исправление (рекомендация)
- Использовать параметризованные запросы / подготовленные выражения (prepared statements). Пример для Java (JDBC):
- "PreparedStatement ps = conn.prepareStatement(\"SELECT * FROM users WHERE login = ?\"); ps.setString(1, user); ResultSet rs = ps.executeQuery();"
- Примеры для других языков:
- Python (psycopg2 / MySQLdb): cursor.execute("SELECT * FROM users WHERE login = %s", (user,))
- C#: using var cmd = new SqlCommand("SELECT * FROM users WHERE login = @login", conn); cmd.Parameters.AddWithValue("@login", user);
- Дополнительно: применять белый список допустимых значений/формата где возможно, принцип наименьших привилегий для БД, логирование и отказ от динамической конкатенации SQL.
Динамические методы обнаружения (рантайм)
- DAST / пен‑тесты: автоматические сканеры и ручное тестирование веб‑форм инъекционными полезными нагрузками (например, payloads для проверки инъекций, ошибки, задержки). Часто используют sqlmap, OWASP ZAP.
- Фаззинг и инъекционные payload‑наборы для поиска ошибок и побочных эффектов (ошибки сервера, изменения в поведении).
- Мониторинг ошибок БД и логов приложений (ошибки парсинга SQL, исключения) и поведенческий анализ (необычные запросы, медленные запросы).
- Преимущества: обнаруживает уязвимости в работающем приложении, учитывает реальные зависимости и конфигурацию; недостаток — может не покрыть все ветки кода, нужны права/доступ.
Статические методы обнаружения (анализ кода)
- SAST / статические анализаторы: инструменты, выполняющие тикет‑/таинтовый анализ, ищут конкатенацию строк для SQL, отсутствие параметризации, использование небезопасных API. Инструменты: Semgrep, SonarQube, CodeQL, Checkmarx.
- Правила/шаблоны: поиск паттернов вроде string + variable в SQL‑конструировании, вызовов `execute` с ненадежными аргументами.
- Ручной ревью кода и code‑reviews с чек‑листом (все места формирования SQL).
- Преимущества: находит проблемы до деплоя, покрывает все ветки кода; недостаток — возможны ложные срабатывания и требуется контекст (runtime параметры).
Рекомендация
- Первичная мера: везде заменить конкатенацию на параметризацию. Комбинировать SAST в CI для раннего обнаружения и периодический DAST/пен‑тест для проверки развернутого приложения.
26 Янв в 13:21
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир