Безопасность PHP-приложения
Вопрос
Как вы защищаете PHP-приложение от основных атак?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
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 ошибок.