CSRF Межсайтовая подделка запроса -- что это такое (цсрф, МПЗ)

CSRF (Сross Site Request Forgery) -- говорить о межсайтовой подделке запроса (МПЗ) можно всегда, когда в какой-то другой системе (скажем на другом сайте) пользователя заставляют (так или иначе) перейти по ссылке (возможно неявно), переход по которой проведёт на вашем сайте какое-то действие.

Примеры CSRF уязвимостей и их эксплуатации

Самый простой пример -- картника размещённая на чужом сайте, в качестве адреса которой указана ссылка на обработчик, производящий какие-то действия на вашем сайте.

  • В лучшем случае это может быть какое-то безобидное действие --скажем в источник подставят ссылку типа выхода из системы:
    <img src="http://адресвашегосайта.ru/logout">
  • В худшем -- могут попросить что-то посерьёзнее, например, пусть ваш сайт умеет переводить деньги между пользователями, а обработчик действия просто проверяет GET-параметр, тогда злоумышленник может сформировать такую ссылку:
    <img 
    src="http://адрес.ru/give-money?user-id=100500?amount=100">

    -- стоит залогиненному у вас пользователю открыть любой сайт с такой картинкой, как другой пользователь вашего сайта с id = 100500 станет богаче на 100 у.е.

Как бороться с CSRF-атаками

Обычно применяют такой способ (по пунктам):

  1. С каждой сессией пользователя связывают уникальный ключ (разный для разных пользователей). Но тут главное, чтобы это ключ при входе в систему у разных пользователей был разным.
  2. Данные передают не через GET, а через POST (т.е. обработчики ожидают именно POST запрос для критических действий, а именно тех, что меняют состояние сервера)
  3. При приёме POST запроса проверяется -- передано ли поле с секретным ключом, если он верный -- то запускается обработка запроса.

Подробнее: https://ru.wikipedia.org/wiki/%D0%9C%D0%...