JakeFront Ответов: 5

Удалить куки из браузеров


Я пытаюсь удалить файлы cookie из браузера при выходе из системы, но при тестировании со старым идентификатором сеанса .AspNet.ApplicationCookie. Он все еще остается.
Код, который я добавил к выходу из системы, таков:

if (System.Web.HttpContext.Current != null)
            {
                HttpCookie aCookie;
                string cookieName;
                int limit = Request.Cookies.Count;
                for (int i = 0; i < limit; i++)
                {
                    cookieName = Request.Cookies[i].Name;
                    aCookie = new HttpCookie(cookieName);
                    aCookie.Expires = DateTime.Now.AddDays(-1d);
                    Response.Cookies.Add(aCookie);
                }
            }
            System.Web.HttpContext.Current.Session.Abandon();
            Response.Cookies.Clear();
            System.Web.HttpContext.Current.Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));


Что я уже пробовал:

Я попытался установить имя в null
<pre>cookieName = Request.Cookies[i].Name = null;


и установив значение равным нулю
<pre>aCookie.Value = null;

5 Ответов

Рейтинг:
2

F-ES Sitecore

Вы указываете новые файлы cookie с их настройками, а затем вызываете Response.Cookies.Ясно() так что все ваши исправления отменены.

ASP.net если это проблема, потому что вы используете идентификатор сеанса где-то в своем коде, то решение состоит в том, чтобы изменить свой код, чтобы не использовать идентификатор сеанса, а использовать что-то другое.


Рейтинг:
2

Dave Kreskowiak

Это не сработает. Этот код работает полностью на стороне сервера. Таким образом, если пользователь действительно нажимает кнопку "Выход", у вас есть шанс перезаписать файлы cookie.

Гораздо большая проблема заключается в том, что пользователи редко нажимают кнопку "Выход". Они просто закрывают браузер. Ваш код никогда не будет вызван, а файлы cookie не будут очищены или заменены.

Итак, что произойдет завтра, когда пользователь снова войдет в систему? У них будет совершенно новый сеанс с другим идентификатором сеанса, но идентификатор сеанса cookie не будет совпадать. Теперь у тебя огромная проблема.

Никогда не сохраняйте идентификатор сеанса в файле cookie на стороне клиента.


Рейтинг:
1

JakeFront

Неважно, если я позвоню.

Response.Cookies.Clear()
в начале или в конце. Это не имеет никакого эффекта.
if (System.Web.HttpContext.Current != null)
{
    System.Web.HttpContext.Current.Session.Clear();
    System.Web.HttpContext.Current.Session.Abandon();
    System.Web.HttpContext.Current.Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));
    HttpCookie aCookie;
    string cookieName;
    int limit = Request.Cookies.Count;
    for (int i = 0; i < limit; i++)
    {
        cookieName = Request.Cookies[i].Name;
        aCookie = new HttpCookie(cookieName);
        aCookie.Expires = DateTime.Now.AddDays(-1);
        Response.Cookies.Add(aCookie);
    }
}


И по идентификатору сеанса я догадываюсь о котором вы говорите
ASP.NET_SessionId


I am trying to delete the <pre>.AspNet.ApplicationCookie


F-ES Sitecore

Cookies.Clear не очищает файлы cookie, хранящиеся в браузере, он очищает содержимое коллекции файлов cookie в вашем коде. Таким образом, вы добавляете кучу файлов cookie в коллекцию, а затем очищаете ее, поэтому, когда ответ будет отправлен клиенту, он не будет включать ваши обновления истечения срока действия. Не звони .Ясно вообще

Рейтинг:
1

JakeFront

Я уже пробовал оставить это тоже. Происходит то же самое. То

AspNet.ApplicationCookie
сессия все еще действительна после установки срока действия на 1 день раньше и вообще не вызывает Клир.


Рейтинг:
1

JakeFront

Файл cookie доступен только для сеанса. Закрытие браузера приведет к закрытию сеанса и, следовательно, истечению срока действия файлов cookie. Если они войдут в систему завтра, им придется войти обратно
Так что же это за резолюция с точки зрения безопасности? Если они выйдут из системы или закроют браузер, то им придется снова войти в систему, а не атаковать высокий уровень взлома сеанса.


Dave Kreskowiak

Во-первых, вы опубликовали это как ответ на свой собственный вопрос.

Далее, закрытие браузера не закрывает сеанс. Сеанс должен истечь на сервере до его закрытия. Сеанс "оставшееся время жить" сбрасывается при каждом доступе из веб-браузера.

Браузер также не убивает файлы cookie при закрытии по умолчанию. Вы должны включить эту опцию в настройках браузера. Обычно это не делается.

JakeFront

Да, извини. я нажал не на ту кнопку.
Что касается печенья. Это все новое для меня в отношении файлов cookie и сеансов. Аудит безопасности говорит, что нам нужно уменьшить вероятность повторного использования старого идентификатора сеанса с истекшим сроком действия в новом запросе. Я осмотрелся и нашел приведенный выше код на нескольких сайтах, но когда он помещается в firefox с помощью менеджера файлов cookie со старым идентификатором сеанса, он не перенаправляется на страницу входа в систему при обновлении.
Я надеялся, что кто-то, возможно, столкнулся с такой же проблемой.