К prevent CSRF вам нужно значение, которое отправляется с запросом, который не может быть отправлен вредоносным сайтом. Файлы cookie подлинности не подходят, потому что если злоумышленник может заставить браузер отправить запрос на сайт жертвы, файлы cookie будут автоматически отправлены.
Например, путем подачи формы с помощью JavaScript, содержащуюся на www.evil.com
атаковать сеанс пользователя на www.example.com
:
<form method="post" action="https://www.example.com/executeAction">
<input type="hidden" name="action" value="deleteAllUsers">
</form>
<script>document.forms[0].submit()</script>
Сохранение анти маркер CRSF в пределах страницы является OWASP рекомендуемым решением для предотвращения другого веб-сайта от представления форма, так как случайный токен в сеансе пользователя не может быть прочитан www.evil.com
из-за Same Origin Policy, предотвращающий JavaScript на www.evil.com
, считывая содержимое страницы www.example.com
.
Эти жетоны можно хранить в любом месте страницы. Чаще всего он будет находиться в скрытых формах, но они также могут быть сохранены в пределах HTML 5 data- attributes. Похоже, использование тегов meta
- это просто другой способ, которым он может быть сохранен, где JavaScript может включать его в любые формы, предоставляемые страницей.
'www.evil.com', вы не сможете получить точный токен пользователя из 'www.example.com', даже если SOP ** отключен ** (т. е. запрос от' www.evil.com' является отдельной сессией, поэтому должен быть создан новый токен). – rakeen
Это тот же сеанс, если используется тот же экземпляр браузера (конечно, использование инкогнито или частного режима просмотра). – SilverlightFox
Как «www.example.com» знает, если это тот же сеанс? Запрос от 'www.evil.com' не имеет никакого токена. – rakeen