Ответ вслух Senior Сессии и безопасность спрашивают часто обновлено

Безопасность PHP-приложения

Вопрос

Как вы защищаете PHP-приложение от основных атак?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

От SQL-инъекций: только подготовленные запросы или ORM, никакой склейки строк. То, что нельзя передать параметром, например колонку сортировки, проверяю по белому списку.

Что должно прозвучать в ответе

  • SQL-инъекции: подготовленные запросы и ORM, белые списки для имён колонок

  • XSS: экранирование при выводе, автоэкранирование шаблонизатора, CSP

  • CSRF: токены и SameSite cookie

  • Пароли через password_hash, сессии с HttpOnly, Secure, regenerate_id после входа

  • Контроль доступа на каждом действии: политики, проверка владельца

  • Загрузка файлов, unserialize, секреты вне репозитория, composer audit

Что могут спросить следом

  • Чем опасен $request->all() в create?
  • Как защититься от SSRF при загрузке картинки по URL?

Разбор

От SQL-инъекций: только подготовленные запросы или ORM, никакой склейки строк. То, что нельзя передать параметром, например колонку сортировки, проверяю по белому списку. От XSS: экранирование при выводе, в Blade и Twig оно автоматическое, а сырой вывод {!! !!} использую только для очищенного HTML. Сверху Content-Security-Policy.

От CSRF защищают токены в формах, во фреймворках они включены по умолчанию, и cookie с SameSite=Lax. Пароли храню через password_hash, сессионная cookie с HttpOnly и Secure, после входа session_regenerate_id, а на вход стоит ограничение частоты попыток.

Самая частая реальная дыра это контроль доступа: проверяю права на каждом действии через политики, особенно «это заказ текущего пользователя». Плюс массовое присваивание закрываю $fillable и валидированными данными, загруженные файлы храню вне корня сайта, не вызываю unserialize на внешних данных, секреты держу в переменных окружения, а зависимости проверяю composer audit.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.