Уже можно сделать:
Referer
заголовок
Это более слабая форма защиты. Некоторые пользователи могут отключить referer
в целях конфиденциальности, что означает, что они не смогут отправлять такие формы на вашем сайте. Также это может быть сложно реализовать в коде. Некоторые системы позволяют URL-адресу, например http://example.com?q=example.org
, проходить проверку реферера для example.org
. Наконец, любые уязвимости открытого перенаправления на вашем сайте могут позволить злоумышленнику отправить свою CSRF-атаку через открытое перенаправление, чтобы получить правильный заголовок referer
.
Origin
заголовок
Это новый заголовок. К сожалению, вы получите несоответствия между браузерами, которые его поддерживают и не поддерживают. См. Этот ответ .
Другие заголовки
Только для запросов AJAX, добавление заголовка, который не разрешен для междоменной области, например X-Requested-With
, может использоваться в качестве метода предотвращения CSRF. Старые браузеры не будут отправлять междоменный домен XHR, а новые браузеры будут вместо этого отправлять предварительную проверку CORS, а затем отказываться делать основной запрос, если он явно не разрешен целевым доменом. Код на стороне сервера должен гарантировать, что заголовок все еще присутствует при получении запроса. Поскольку в формы HTML нельзя добавлять пользовательские заголовки, этот метод несовместим с ними. Однако это также означает, что он защищает от злоумышленников, использующих форму HTML в своей CSRF-атаке.
Браузеры
Браузеры, такие как Chrome , позволяют блокировать сторонние файлы cookie . Несмотря на то, что в объяснении говорится, что он будет препятствовать установке файлов cookie сторонним доменом, он также предотвращает отправку любых существующих файлов cookie для запроса. Это заблокирует «фоновые» CSRF-атаки. Тем не менее, те, которые открывают полную страницу или всплывающее окно, будут успешными, но будут более видимыми для пользователя.