Создание файла cookie для безопасного входа - PullRequest
3 голосов
/ 05 марта 2011

Я недавно прочитал одну из статей Джеффа о XSS , и это заставило меня задуматься о том, как лучше защитить файлы cookie для входа в систему в моей домашней системе аутентификации.

В основном то, что я делаю сейчас, это (обратите внимание, что все настраивается и в настоящее время установлено на true):

     protected static string ComputeLoginHash(string passwordhash){
        StringBuilder sb=new StringBuilder();
        sb.Append(passwordhash);
        if(CookieUseIP){
            sb.Append(HttpContext.Current.Request.UserHostAddress);
        }
        if(CookieUseBase){
            sb.Append(HttpContext.Current.Request.MapPath("/"));
        }
        if(CookieUseBrowserInfo){
            sb.Append(HttpContext.Current.Request.UserAgent);
        }
        sb.Append(SiteName);
        return ComputeHash(sb.ToString());
    }

(обратите внимание, что хеш-пароль создается из пароля, уникальной солии имя пользователя).

Хорошо, поэтому я ставлю под сомнение строку UserAgent.Есть ли вред в этом?Или браузеры, которые изменят свою строку UserAgent при нормальной работе (например, без обновления)?Моя цель в основном состоит в том, чтобы злоумышленник получил файл cookie для входа в систему, чтобы он ничего не мог с ним сделать.Поможет ли это достичь моей цели или это будет слишком громоздким для пользователя?На данный момент единственная информация, которую я храню в текстовом файле cookie, - это имя пользователя.

1 Ответ

6 голосов
/ 05 марта 2011

Прежде всего, вы никогда не должны писать свой собственный обработчик сеанса.Вы заново изобретаете колесо, и оно станет менее безопасным.

Если ComputeLoginHash() создает значение cookie, то у вас большая проблема в ваших руках.Злоумышленник может получить хэш имени пользователя / пароля из базы данных, а затем создать значение cookie, передав его хеш-функции.Это позволит злоумышленнику войти в систему без взлома пароля.Фактически вы полностью удаляете защиту, обеспечиваемую хэшированием паролей.

Значение cookie всегда должно быть , криптографический одноразовый номер , это значение должно истечь (меньше суток - это хорошо.).Для обеспечения дополнительной безопасности включите куки-файлы только для http , которые помогают предотвратить xss.Также установите sts-header для принудительного применения https и, в свою очередь, позаботьтесь о OWASP A9.Кроме того, не забывайте о сессиях .Также нет абсолютно никакого смысла проверять пользовательский агент, потому что это контролируемая злоумышленником переменная.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...