Может ли какой-нибудь хакер украсть куки у пользователя и войти под этим именем на веб-сайте?
Читая этот вопрос
разные пользователи получают одинаковое значение cookie в aspxanonymous
и искать решение, я начинаю думать, если кто-то действительно сможет каким-то образом украсть куки, а затем поместить его в свой браузер и войти, скажем, в качестве администратора.
Знаете ли вы, как проверка подлинности с помощью формы может гарантировать, что даже если файл cookie будет украден, хакер не будет входить в систему, используя его?
Или вы знаете какой-нибудь другой механизм автоматической защиты?
Заранее благодарю.
6 ответов
Можно ли украсть куки и пройти аутентификацию от имени администратора?
Да, это возможно, если cookie-файл Forms Auth не зашифрован, кто-то может взломать его cookie, чтобы предоставить ему повышенные привилегии, или, если SSL не требуется, скопировать чужой cookie-файл другого лица. Тем не менее, есть шаги, которые вы можете предпринять, чтобы уменьшить эти риски:
В элементе system.web/authentication/forms:
- RequireSSL= верно. Это требует, чтобы куки передавались только по SSL
- slidingExpiration = ложь. Если это правда, просроченный билет может быть повторно активирован.
- Cookieless= ложь. Не используйте сеансы без файлов cookie в среде, где вы пытаетесь обеспечить безопасность.
- enableCrossAppRedirects= ложь. При значении false обработка файлов cookie в разных приложениях запрещена.
- защита = все. Зашифровывает и хэширует файл cookie проверки подлинности с помощью ключа компьютера, указанного в machine.config или web.config. Эта функция помешает кому-либо взломать свой собственный файл cookie, так как этот параметр указывает системе генерировать подпись файла cookie и при каждом запросе аутентификации сравнивать подпись с переданным файлом cookie.
Если вы этого хотите, вы можете добавить небольшую защиту, поместив в сеанс некоторую информацию для аутентификации, такую как хеш имени пользователя (никогда не вводите имя пользователя в виде обычного текста или его пароль). Это потребует от злоумышленника кражи и cookie-файла Session, и cookie-файла Forms Auth.
Сценарий, когда cookie может быть украден, происходит в общедоступной беспроводной среде. Хотя вы или я никогда бы не работали в такой конфигурации, может быть невозможно помешать вашим клиентам сделать это.
Если злоумышленник знает, к какому безопасному сайту вы подключены, идея заключается в том, что ваш браузер может быть обманным путем размещен на незащищенной версии того же URL-адреса. В этот момент ваш файл cookie скомпрометирован.
Вот почему в дополнение к httpOnlyCookies
вы хотите указать requireSSL="true"
<httpCookies httpOnlyCookies="true" requireSSL="true" />
Я не согласен с комментарием The Rook, так как считаю его несправедливым;
@ Аристос, я обновил свой ответ. Но, честно говоря, если вы используете платформу разработки Microsoft, ваше приложение будет небезопасным. - Ладья 22 минуты назад
Безопасность не происходит случайно, и это не происходит "прямо из коробки", по крайней мере, по моему опыту. Ничто не является безопасным, пока оно не разработано, независимо от платформы или инструментов.
В большинстве случаев файлы cookie, используемые для проверки подлинности, сопоставляются с сеансом на сервере, поэтому невозможно просто взять файл cookie и войти в систему, однако вы можете прочитать о подделках межсайтовых запросов., которые позволяют злонамеренно использовать механизм для этого куки:
Существует много способов, которыми идентификатор сеанса может быть передан злоумышленнику. XSS является наиболее часто используемой атакой для взлома идентификатора сеанса, и вы должны проверить наличие уязвимостей XSS в вашем приложении., Распространенным методом повышения прочности сеанса является проверка IP-адреса. Когда пользователь входит в систему, запишите IP-адрес. Проверяйте IP-адрес для каждого запроса, если IP-адрес изменяется, это, вероятно, перехваченный сеанс. Эта серьезная мера может предотвратить законные запросы, но это очень маловероятно.
Не проверяйте X-Forwarded-For или User-Agent, это тривиально для злоумышленника, чтобы изменить эти значения.
Я также рекомендую включить httpOnlyCookies в вашем файле web.config:
<httpCookies httpOnlyCookies="true"/>
Это затрудняет взломщику захват сеанса с помощью javascript, но это все еще возможно.
Я не знаю специфики рассматриваемого файла cookie, но, как правило, неправильно хранить имя пользователя и пароль в файле cookie пользователя. Как правило, вы хотите сохранить имя пользователя в файле cookie вместе с другой не конфиденциальной информацией. Таким образом, пользователю предлагается ввести свой пароль только при входе в систему.
Я работаю над этим, и у меня возникает идея, что я не уверен, насколько это безопасно на 100%, но это идея.
Моя идея заключается в том, что каждый пользователь должен перейти со страницы входа в систему.
Если кто-то украл cookie, то не пропускает страницу входа, а идет прямо внутрь к остальным страницам. Он не может пройти страницу входа в систему, потому что действительно не знал пароль, поэтому, если он пройдет, он все равно потерпит неудачу.
Поэтому я добавляю дополнительное значение сеанса, чтобы пользователь успешно прошел страницу входа.Теперь внутри каждой критической страницы я проверяю это дополнительное значение сеанса и, если оно найдено нулевым, я выхожу из системы и снова спрашиваю пароль.
Теперь я не знаю, может быть, все, что сделано все готово от Microsoft, нужно проверить это больше.
Чтобы проверить эту идею, я использую эту функцию, которая заставляет пользователя войти в систему.
FormsAuthentication.SetAuthCookie("UserName", false);
Мой второй способ защиты, который я полностью готов исправить и использовать, заключается в том, что я проверяю разные ips и / или разные cookie от одного и того же вошедшего в систему пользователя. Я много об этом думал, много проверок (если за прокси, если из разных стран, что искать, сколько раз я его видел и тд...), но это общая идея.
Это видео показывает именно то, что я пытаюсь предотвратить. Используя трюк, который я описал здесь, вы не можете просто установить cookie для входа в систему.
Просто делюсь своими идеями...