Где хранить токен CSRF - ViewState или Session? - PullRequest
0 голосов
/ 30 марта 2020

Я изучал уязвимость CSRF и способы ее устранения в приложении. NET.

На основе моих исследований приведен псевдоалгоритм, который мне нужно сделать:

  1. Проверьте запрос на токен CSRF в запросе cook ie, если его нет, создайте его на сервере.
  2. После того, как токен создан, добавьте токен к ответу cook ie, чтобы отправить его обратно клиенту. Клиент отправляет этот токен CSRF для всех будущих запросов cook ie.
  3. Когда сервер получает запрос и видит готовящий CSRF ie, сервер проверяет его сохраненное значение токена CSRF.
  4. Когда это совпадает, тогда все как обычно, если значения не совпадают, остановите запрос.

Мой вопрос на шаге № 3, я использую ASP. NET веб-форма; Я могу хранить этот токен CSRF либо в Session, либо в ViewState.

Я не хочу использовать ViewState, потому что все страницы в нашем приложении должны поддерживать EnableViewState = "true". Если нет, содержимое ViewState уничтожается при каждом обратном вызове.

Могу ли я использовать Session в этой ситуации? Не компрометирует ли это исправление, если я использую Session вместо ViewState?

1 Ответ

1 голос
/ 30 марта 2020

Итак, вы идете по методу Token Pattern (STP) , используя один токен на сеанс пользователя.

Нет проблем в использовании ASP. NET хранилище сессий для сохранения токенов CSRF, основанное на тривиальном допущении, что злоумышленник не имеет к нему доступа, это никак не скомпрометирует ваше решение. Тем не менее, как указано в комментарии Габора Ленгье , использование файлов cookie для отправки токена CSRF на сервер некорректно, вместо этого вставьте токен в форму HTML или используйте Cook ie * to to-header token * Техника .

Тем не менее, я предлагаю вам взглянуть на AntiForgery Class , который имеет встроенную генерацию токенов, HTML методы встраивания и проверки , С точки зрения безопасности никогда не будет хорошей идеей реализовать собственное решение, вместо этого go для установленных, надежных решений.

Также убедитесь, что вы используете HTTPS для предотвращения взлома ваших токенов при атаке Sniffing

...