2014-12-10 5 views
1

Веб-приложение, над которым я работаю, не уничтожает сеансы должным образом, что означает, что он очень подвержен захватам. Я могу выйти из системы, снова ввести файлы cookie .EpiserverLogin и .ASPXRoles и im внутри приложения. Мой текущий код разрушающих сессии выглядит следующим образом:Как уничтожить сеансы ASP.NET/Episerver

HttpContext.Current.Session.Clear(); 
HttpContext.Current.Session.Abandon(); 
HttpContext.Current.Session.RemoveAll(); 
HttpContext.Current.User = null; 
System.Web.Security.FormsAuthentication.SignOut(); 

Любая помощь, как к тому, что я делаю неправильно сильно appriciated!

EDIT: Вот моя проверка подлинности в моем web.config

<authentication mode="Forms"> 
    <forms name=".EPiServerLogin" loginUrl="CustomLogin.aspx" timeout="50" /> 
</authentication> 

И это, как я проверить пользователей входа в систему:

var validated = Membership.ValidateUser(username, password); 
if (validated) 
{ 
    FormsAuthentication.SetAuthCookie(username, true); 
    Response.Redirect("/"); 
} 
+0

Пожалуйста, разместите разделы и вашего web.config. –

+0

Я обновил логин-код и режим аутентификации – Jinxen

+0

Можете ли вы поддержать свое заявление «очень склонно к захватам»? О каком тинге вы говорите? Захват сеанса или перехват входа в систему (FormsAuth-cookie)? – sisve

ответ

1

Сессии и куки аутентификации на самом деле не связаны между собой. Куки-файл аутентификации сообщает веб-серверу, к какому пользователю пришел запрос, если пользователь вошел в систему. Если сеанс имеет тайм-аут из-за неактивности (по умолчанию через 20 минут, если он не изменен), новый сеанс для пользователя создается на следующий запрос.

Если вы хотите связать cookie аутентификации с определенным сеансом, вы можете решить это, создав собственный FormsAuthenticationTicket и установив userData для идентификатора сеанса. Затем зашифруйте билет и создайте файл cookie и отправьте его клиенту. Затем, по каждому запросу, расшифруйте билет и убедитесь, что значение userData совпадает с идентификатором сеанса. Если нет, выполните Session.Abandon(), а затем FormsAuthentication.SignOut(). Даже если файл cookie будет восстановлен, идентификатор сеанса будет изменен при создании нового сеанса.

Это решение не будет работать, если вы находитесь на сбалансированном по нагрузке решении и используете состояние сеанса InProc.