CSRF — почему это всё ещё боль и как с этим прижиться
Пока копаешься в веб-приложениях, CSRF — классика жанра, которую многие недооценивают. Короче, это когда под твоей сессией делают нежданные действия на сайте, ты вроде и залогинен, а твоя форма или запрос внезапно подставляет что-то чужое.
Смотрел недавно, как многие просто не добавляют CSRF-токены в формы — а это самый базовый, но прям рабочий способ защиты. Токен уникален для каждой сессии, и без него сервер не пропускает изменения. Можно быстро проверить руками: открыть сайт в двух вкладках, попытаться отправить форму из чужой сессии и увидеть, что токен не совпадает.
Есть еще заголовки Origin и Referer, их иногда юзают для защиты — но у них есть косяки и ложные срабатывания, так что лучше не надеяться только на них.
Интересно, что многие CMS вроде WordPress или Joomla уже имеют встроенную защиту по CSRF, но если вы пишете свой движок или используете легковесные фреймворки, стоит не забывать об этом самому.
Если делать быстро и просто — добавляй в формы hidden-поле с токеном, проверяй его на сервере и обновляй при каждой сессии. Не забудь про AJAX-запросы — там тоже надо вставлять этот токен в заголовок или тело запроса.
У кого как с защитой от CSRF на проектах? Кто что юзает или просто забивает?