> Какие угрозы безопасности существуют при работе с данными в SQL (PHP)

Уровень: senior · Роль: backend · Язык: PHP · Категория: Технические вопросы

Компании: vanta

Стек: PHP

> Пример ответа

При работе с SQL в PHP основная угроза - SQL-инъекция. Это происходит, когда пользовательский ввод напрямую конкатенируется в запрос, позволяя злоумышленнику выполнить произвольный SQL. Например:
$query = "SELECT * FROM users WHERE id = " . $_GET['id']; - передача 1; DROP TABLE users; удалит таблицу.

Другие угрозы:

  • Небезопасное хранение паролей (например, в открытом виде или с устаревшими хэшами вроде MD5).
  • Отсутствие экранирования при работе с LIKE, ORDER BY или динамическими именами таблиц.
  • Утечка данных через ошибки (вывод сырых SQL-ошибок в production).
  • Race conditions при конкурентных запросах без транзакций (например, двойное списание средств).

Для защиты используйте подготовленные выражения (PDO) - они разделяют код и данные, исключая инъекции. Пример:

PHP
$stmt = $pdo->prepare('SELECT * FROM users WHERE id = :id');
$stmt->execute(['id' => $_GET['id']]);

Также применяйте:

  • Хэширование паролей через password_hash().
  • Валидацию и фильтрацию ввода (например, filter_var($email, FILTER_VALIDATE_EMAIL)).
  • Ограничение прав БД (отдельный пользователь только для SELECT/INSERT).
  • Логирование и мониторинг подозрительных запросов.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью