Я изучал уязвимость CSRF и способы ее устранения в приложении. NET.
На основе моих исследований приведен псевдоалгоритм, который мне нужно сделать:
- Проверьте запрос на токен CSRF в запросе cook ie, если его нет, создайте его на сервере.
- После того, как токен создан, добавьте токен к ответу cook ie, чтобы отправить его обратно клиенту. Клиент отправляет этот токен CSRF для всех будущих запросов cook ie.
- Когда сервер получает запрос и видит готовящий CSRF ie, сервер проверяет его сохраненное значение токена CSRF.
- Когда это совпадает, тогда все как обычно, если значения не совпадают, остановите запрос.
Мой вопрос на шаге № 3, я использую ASP. NET веб-форма; Я могу хранить этот токен CSRF либо в Session, либо в ViewState.
Я не хочу использовать ViewState, потому что все страницы в нашем приложении должны поддерживать EnableViewState = "true". Если нет, содержимое ViewState уничтожается при каждом обратном вызове.
Могу ли я использовать Session в этой ситуации? Не компрометирует ли это исправление, если я использую Session вместо ViewState?