Наряду с шифрованием cookie вы также должны внедрить вращающийся токен для предотвращения атак воспроизведения.
Идея состоит в том, что зашифрованный cookie содержит некоторое значение, которое можно сравнить с известным значением на сервере.Если данные совпадают, то запрос выполняется успешно.Если данные не совпадают, то вы испытываете атаку воспроизведения и вам необходимо прекратить сеанс.
ОБНОВЛЕНИЕ
В одном из комментариев был задан вопрос, хочу ли я сохранить значение впеченье.Ответ - да.ВЕСЬ файл cookie должен быть зашифрован, что может быть сделано автоматически с использованием HttpModule.В зашифрованном cookie-файле находится любая ваша обычная информация + токен для изменения.
На каждом посте обратно проверяйте токен.Если она действительна, разрешите транзакцию, создайте новый случайный токен, сохраните его в файле cookie и отправьте его обратно в браузер.Опять же, в зашифрованном виде.
В результате ваш cookie-файл безопасен (вы используете 3DES?), И у любого злоумышленника будет крайне ограниченное окно даже для попытки воспроизведенияатака.Если токен не прошел проверку, вы можете просто подать сигнал тревоги и принять соответствующие меры.
Все, что нужно на стороне сервера, - это отслеживать пользователя и его текущий токен.Как правило, это гораздо меньше, чем попадание в дб, по сравнению с необходимостью искать такие мелочи, как имя пользователя на каждой странице загрузки.
ОБНОВЛЕНИЕ 2
Я пытался выяснить,это лучше или хуже, чем хранить измененное значение в сеансе.Я пришел к выводу, что хранение вращающегося значения в сеансе на веб-сервере абсолютно ничего не делает для предотвращения атак воспроизведения и поэтому менее безопасно, чем помещение этого значения в cookie.
Рассмотрим этот сценарий.Браузер делает запрос.Сервер просматривает идентификатор сеанса и извлекает объекты сеанса, затем выполняется работа и ответ отправляется обратно в браузер.Тем временем BlackHat Bob записал транзакцию.
Bob затем отправляет точно такой же запрос (включая идентификатор сеанса) на сервер.На этом этапе у сервера абсолютно нет возможности узнать, что это запрос от злоумышленника.Вы не можете использовать IP, так как они могут измениться из-за использования прокси, вы не можете использовать дактилоскопию в браузере, так как вся эта информация была бы записана при первоначальном обмене.Кроме того, учитывая, что сессии обычно хороши в течение как минимум 30 минут, а иногда и намного дольше, у злоумышленника есть достаточно большое окно для работы.
Так что, несмотря ни на что, для предотвращения повторного воспроизведения вы должны отправитьменяя токен в браузере после каждого запроса.
Теперь у нас возникает вопрос о том, также сохранять значения, такие как идентификатор пользователя, в зашифрованном cookie или сохранять его на стороне сервера впеременная сеанса.В сеансе у вас есть проблемы, такие как более высокая загрузка памяти и процессора, а также потенциальные проблемы с балансировкой нагрузки и т. Д. С файлами cookie у вас есть некоторый объем данных, который составляет менее 4 КБ, и, при правильном выполнении, в диапазоне 1 КБ или меньше, который добавляетсяна каждый запрос.Я полагаю, что все сводится к тому, хотите ли вы добавить больше / больше серверов и внутреннего сетевого оборудования для обработки запросов (сеанс) или заплатить за немного больший интернет-канал (cookie).