#c# #.net #security #asp.net-mvc-5 #owin
#c# #.net #Безопасность #asp.net-mvc-5 #owin
Вопрос:
После недавнего сканирования безопасности команда info sec заявила, что им не нравится тот факт, что они могут сохранить .Значение AspNet.ApplicationCookie и использовать его снова после этого, предоставляя пользователю доступ к сайту.
Прочитав, я понимаю, что это стандартное поведение, но я должен найти способ полностью прекратить сеанс после выхода пользователя из системы.
Мое понимание здесь немного слабое, поэтому мой поиск дает очень мало результатов. Есть ли способ сделать это?
Ответ №1:
Поздний ответ, но для тех, кто сталкивается с этим:
Мы справились с этим, добавив пользовательский атрибут, который проверяет отпечаток пальца. Мы используем атрибут для любой страницы за логином.
Ниже приведен грубый пример того, как это достигается.
Отпечаток создается при входе в систему и добавляется в кэш:
private void OwinSignIn(tblUser user)
{
var thumbPrint = Guid.NewGuid();
var claims = new List<Claim>
{
....
new Claim(ClaimTypes.Thumbprint, thumbPrint.ToString())
};
MemoryCache.Default.Set(thumbPrint.ToString(), true, new CacheItemPolicy() { AbsoluteExpiration = DateTimeOffset.Now.AddMinutes(60) });
}
Затем атрибут ищет этот отпечаток и действует соответствующим образом:
public class ValidateThumbprint : FilterAttribute, IAuthorizationFilter
{
public void OnAuthorization(AuthorizationContext filterContext)
var identity = (ClaimsIdentity)filterContext.HttpContext.User.Identity;
var thumbPrint = identity.Claims?.Where(s => s.Type == ClaimTypes.Thumbprint).First().Value;
if (thumbPrint != null)
{
if (MemoryCache.Default.Contains(thumbPrint))
{
return;
}
}
// handle invalid thumbprint
}
Я не уверен, что это лучший и наиболее безопасный способ, но он предотвращает сохранение и повторное использование cookie после выхода из системы.