Функция аутентификации «запомни - мне», всегда означает «неустойчивый» сайт?

StackOverflow https://stackoverflow.com/questions/2371374

Вопрос

Я рассматриваю, чтобы реализовать классику «Запомнить - я» флажок На моем WebApp, чтобы позволить аутентифицированному пользователю «запомнить», как только он возвращается, чтобы посетить мой сайт.

Гад, Facebook А у других есть такая особенность, но я не слишком уверен, насколько это безопасно.

Java Framework, как Весенняя безопасность использует «подход токена на основе HASH». Токен, который генерируется (используя имя пользователя, пароль, истечение и кладовая и PlankyKey), хранятся в токене файлов cookie клиента = 567 ,whatever567 '. Токен затем используется повторно повторно аутентифицировать пользователя в следующий раз, когда он возвращается.

Я обеспокоен тем, что, даже если процесс входа в систему произошел под подключением HTTPS, на каждом последующем HTTP-запросе файлы cookie будет отправлено незашифрованным в сети.

В принципе все Можно прочитать токен и повторно использовать его для аутентификации.

Я пытаюсь взглянуть на то, как Gmail или Facebook реализуют эту функциональность. Я вижу немного файла cookie, как «присутствие = DJ267619445G09H0L15228675 .....» в FB, другие в Gmail.
Я не слишком уверен, что они используют какой-то другой трюк для защиты от кого-то, кто пытается осистеть другого пользователя.

Я постараюсь подписать себя, используя что-то вроде скручивание Чтобы увидеть, только ли они используют конкретный токен, чтобы помнить пользователя.
Если они это выглядит, как большая проблема безопасности. Может быть, не Facebook (мне все равно), но с Gmail, если вы не установитеИспользуйте всегда HTTPS.«Подключение HTTP будет использоваться и отправит ваши незашифрованные токены через Интернет.
Как вы думаете?

Я также заметил, что поля пользователя / пароля Facebook выставляются под http (не https). В связи с этим я также задаюсь вопросом: все веб-сайты разоблачают поле имена пользователя / пароля по Http Staincury 'по природе ». После того, как запрос отправляется через HTTP, нет «перенаправления к HTTPS», которые могут исправить «учетные данные, видимые в проблему мира».

Спасибо

Редактировать:
Мои заботы были хорошо основаны http://codebutler.com/
Благодаря Firesheep Создатели для выделения проблемы !!!

Это было полезно?

Решение

Это не такая проблема, чтобы реализовать помню - я. То, что вам нужно сделать, это сохранить сеанс в течение длительного времени (и настроить печенье длиться долго). Даже Gmail выведет вас после определенного периода (я думаю, что это две недели или месяц). Тем не менее, вам нужно понять, что сохранение того же сеанса открывается дольше, увеличивает возможность угона в нее. В качестве контрмера необходимо увеличить силу своего идентификатора сеанса. Идентификатор сеанса - это тот, который находится в cookie (или в URI, как обычно видно в некотором программном обеспечении как «file.php? Phpsessid = 1234 ...»).

Ключ состоит в том, чтобы поддерживать сильный идентификатор сеанса. Например, в Gmail у вас есть Cookie GX со значением, аналогичным

DQAAAJoAAAA8mnjaAwgkS7y8Ws5MYCl-PAQLp9ZpMXpGKR47z4L9mlBH-4qEyApAtFbnLkzv1pPqxua1hOWMGiKYpBZr-h7Icyb-NUUg2ZW_nUFIymvw9KjmjSECYTowbCsDerkAxCzSDa83b5YC1mykPv1a9ji4znt6Fsna-AKgNTntvmUxeJ92ctsSlg9iGySEmXnisVyyJiQvI8jzbZqSpE_N2RKZ

Причина, по которой угона сеанса в значительной степени невозможно, потому что идентификатор сеанса настолько силен, и потому что сайт использует https повсюду. Никто не может догадаться или иным образом получить идентификатор вашего сеанса (таким образом, не может уговаривать на вашу сессию). По быстрому взгляду выше, идентификатор сеанса, похоже, имеет несколько ~ 1250 битов прочности, 1 * 10 ^ 376 различных возможностей. Никто не может догадаться.

Очевидно, что будут всегда потенциальные способы по-прежнему уговаривать на сессию. Например, уязвимости XSS открывают дверь, чтобы получить ваши файлы cookie и, следовательно, ваш идентификатор сеанса, но это не каким-либо образом ваша ошибка и не имеет ничего общего и не имеет ничего общего с «запоминающимся - я».

Я обеспокоен тем, что, даже если процесс входа в систему произошел под подключением HTTPS, на каждом последующем HTTP-запросе файлы cookie будет отправлено незашифрованным в сети.

Если вы установите файл Cookie Secure Flag в True, пока в HTTPS файл cookie никогда не будет отправлен при доступе к сайту через http. Это должно сделать для сайтов только для HTTPS.

В целом, люди, кажется, используют только HTTPS для страницы входа в систему, что неверно. Если кто-то действительно заботится, он должен использовать HTTPS по всей странице. В противном случае невозможно предотвратить все попытки угона сессии.

Почему много все еще используют HTTPS только для входа в систему? Вероятно, потому что они не понимают, что на ставках, или потому, что это слишком тяжело использовать HTTPS повсюду. Тем не менее, все же лучше использовать HTTPS для входа в систему, чем не использовать его нигде, потому что он шифрует учетные данные (при этом только идентификатор сеанса может быть украден позже, а не фактическими учетными данными во время входа).

Может быть, не Facebook (мне все равно), но с Gmail, если вы не устанавливаете «Использовать всегда HTTPS» HTTP-соединение, и он отправит ваши незашифрованные токены через Интернет. Как вы думаете?

Я думаю, что значение должно по умолчанию для HTTPS во всех случаях, если это возможно. Единственная реальная причина, почему не использовать HTTPS - это деньги (= производительность / аппаратное обеспечение).

Другие советы

Как правило, это называется атакой воспроизведения. Злоумышленник повторяет запрос, используя те же учетные данные (например, cookie), что он украл от вас, и сможет вытеснить вас. Атака XSS - это просто изменение этого, но предотвратимо (например, использование Httponly).

Единственный способ смягчить большинство повторных атак - это https повсюду. Это должно удержать большинство посторонних глаз.

Есть Много методов профилактики слишком.

Есть также аппаратные устройства, которые делают лучшую работу, чем вы можете взломать в программном обеспечении, замедляя свой сервер в процессе, и вы, вероятно, сделаете это неправильно. Специализированное оборудование может сделать гораздо лучшую работу по отслеживанию запросов в реальном времени и определение того, что тот же токен используется многими разными IP-адресами одновременно и быстрее, чем один человек, который должен быть в состоянии запросить.

В ASP.NET 2.0+, при использовании форм аутентификации вы можете указать requireSSL='true' Чтобы указать, что браузеры должны отправлять только cookie аутентификации при выполнении подключения HTTPS. Видеть Эта статья MSDN Для получения дополнительной информации о защищении форм аутентификации.


Единственная причина не разрешать remember me Если вы банковское или похожее приложение. Если вы не можете, просто следуйте нескольким простым правилам:

  1. Если у тебя есть remember me, Поместите срок действия печенья не более 30 дней в будущем и не сдвиньте значение. Принудительно пользователю войти один раз в месяц не так плохо.
  2. Любые чувствительные операции требовать пароль. При обновлении биллинга, кредитных карт или детали аккаунта всегда Перезапрашивать пароль пользователя. Наиболее вероятной формой злоупотребления обычно является одним и тем же компьютером, что человек использует, но он также гарантирует, что даже украденное печенье аутентификации на его собственном не может сделать слишком много вреда. Вы можете увидеть мой баланс, но вы ничего не можете передавать.

Согласитесь с большинством комментариев, сделанных выше. Если вы беспокоитесь о безопасности, вы должны -

а) Используйте HTTPS по всему. Даже Gmail недавно переключился на использование HTTPS по умолчанию - см. http://gmailblog.blogspot.com/2010/01/default-http-access-for-gmail.html.

b) Установите безопасный флаг в вашем сеансе Cookie для предотвращения отправки браузера на HTTP-соединение.

c) исправить XSS в вашем приложении. Если у вас есть проблемы XSS, ваша реализация «Запомнить меня» всегда будет неуверенно. См. Предотвращение профилактики OwASP XSS.

Включение IP-адреса в идентификаторе сеанса не поможет. Это сделает «вспомнить меня функциональностью» в значительной степени бесполезной, и она не добавляет большой безопасности. Я точно знаю, что Google не помещает IP-адреса в его идентификаторе сеанса.

Единственный способ сделать абсолютно безопасный сайт - включить HTTPS повсюду. Вы правы, печенье можно понюхать и позже использовали для того, чтобы оперить.

Есть пара путей Предотвращение угона за сессией, например, хранение IP-адреса клиента, который открыл сеанс. Дополнительные данные должны храниться на стороне серверов для проверки сеансов, даже без автоматической функции входа в систему. Лучше использовать неисполнительно Для токена (или, по крайней мере, основывать его на не секретных данных), а не хешированное имя пользователя и пароль, в качестве злоумышленника может предположить, что может монтировать атаку на поиск информации о проверке аутентификации.

Если вы посмотрите на источник для Facebook, Gmail и, вероятно, другие формы входа в систему, действие входа в систему, действие использует HTTPS, которые затем перенаправляют на небезопасную страницу после того, как он будет успешен.

1 / Когда пользователь проверяет «Запомнить меня»: вы храните хэш каждую информацию о своем компьютере: IP, браузер, ОС, язык и т. Д. ... И вы пишете это хэш в его печенье со своим ID 2 / когда пользователь назад, вы вычисляете его новое хеш. Вы сравниваете это значение со значением в полученном cookie, а значение в базе данных (для данного идентификатора). Если все они равны, вы можете аутентифицировать пользователя.

Так понятно ?

HTTPS не мог ничего сделать, если у вас есть атака XSS (лучший способ украсть cookie)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top