Я завершил работу над приложением ASP.NET MVC, и в конце мы проходим тест безопасности. Я прошел все тесты, кроме двух. Один из них - CSRF. В моем приложении я поместил @Html.AntiForgeryToken()
в каждую форму, которая должна быть отправлена на сервер, и соответствующий метод действия украшен атрибутом ValidateAntiForgeryToken
. После упражнения я думаю, что я прав, поскольку большая часть Интернета предлагает делать то, что я на самом деле делаю, но команда тестирования говорит, что CSRF не удалось. Теперь они делают замечание, что значение в файле cookie не изменяется при каждом запросе, а изменяется на странице формы.
Я не уверен, почему значение меняется на странице, а не в файле cookie?
Они предоставили мне снимок созданного HTML, и он публикуется только тогда, когда пользователь аутентифицирован. Они просят меня этот токен запроса в cookie, который одинаков для всего сеанса, но токен на странице изменяется при каждом запросе. Концептуально, если я прав, оба они должны быть одинаковыми, поэтому я также скептически отношусь к этому вопросу.
AntiForgeryToken / ValidateAntiForgeryToken действительно является правильным способом защиты от CSRF. То, что значение cookie не меняется, не означает, что приложение уязвимо для CSRF. Представили ли тестировщики безопасности подтверждение правильности концепции? У вас есть дополнительная информация?