Arhn - архитектура программирования

ASP.NET MVC3 — Анти-CSRF и тайм-аут сеанса

Я реализую структуру Anti-Forgery, как описано здесь:

http://weblogs.asp.net/srkirkland/archive/2010/04/14/guarding-against-csrf-attacks-in-asp-net-mvc2.aspx

Кроме того, чтобы свести к минимуму усилия по написанию кода, я выполнил часть вставки токена на стороне клиента, обрабатывая события form.onsumit и ajaxsend. Все работает нормально — пока не истечет сессия.

В моем приложении я отображаю всплывающее окно, когда время сеанса пользователя истекает, когда пользователь может повторно войти в систему и продолжить работу без обновления текущей страницы, чтобы незавершенная работа была безопасной. Но это не согласуется с логикой Anti-CSRF. Когда пользователь пытается повторно войти в систему после сеанса с истекшим временем ожидания, это вызывает исключение CSRF, поскольку срок действия файла cookie (__RequestVerificationToken_Lw__) уже истек, и все будущие POST-запросы будут недействительны до следующего обновления страницы.

Есть ли способ установить время окончания файла cookie на будущую дату, а не на «сеанс»? Я попытался изменить Response.Cookie, но это сделало файл cookie недействительным.

Любая помощь будет оценена по достоинству. Спасибо

03.10.2012

  • Вы можете использовать jQuery и $.cookie(RequestVerificationToken_Lw, 1, {expires: 10}); срок действия файла cookie истекает через 1 день (который вы можете настроить на другой период времени) 03.10.2012
  • Спасибо @DarrenDavies за ответ. но эти файлы cookie предназначены только для http и не могут получить доступ с помощью javascript. 03.10.2012

Ответы:


1

Во время сеанса пользователя (при отображении всплывающего окна) вы можете установить httpcookie с истечением срока действия на стороне сервера.

Я извлек некоторый код из реализации токена защиты от подделки Microsoft.

internal static string GetAntiForgeryTokenName(string appPath)
        {
            if (string.IsNullOrEmpty(appPath))
            {
                return "__RequestVerificationToken";
            }
            return "__RequestVerificationToken_" + Base64EncodeForCookieName(appPath);
        }

    private static string Base64EncodeForCookieName(string s)
    {
        byte[] bytes = Encoding.UTF8.GetBytes(s);
        string text = Convert.ToBase64String(bytes);
        return text.Replace('+', '.').Replace('/', '-').Replace('=', '_');
    }

Ниже код, который устанавливает файл cookie на стороне сервера.

string antiForgeryTokenName = GetAntiForgeryTokenName(HttpContext.Request.ApplicationPath);
            HttpCookie httpCookie = HttpContext.Request.Cookies[antiForgeryTokenName];

            HttpCookie httpCookie2 = new HttpCookie(antiForgeryTokenName, httpCookie.Value)
            {
                HttpOnly = true
                //// your domain Domain = , 
                //// path Path = , 
                //// set path Expires = 
            };

            HttpContext.Response.Cookies.Set(httpCookie2);

Обратите внимание, что я не тестировал этот код, просто попробуйте, если у вас нет других вариантов.

05.10.2012
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..