Существует ли способ предотвратить кражу файлов cookie?

в приложениях Web 2.0 многие пользователи обычно хотят оставаться в системе (флаг «запомнить меня»), а с другой стороны, их куки-файлы могут предоставлять доступ к очень личным данным. Есть ли способ предотвратить то, что кто-то, ворующий cookie-файл - непосредственно с компьютера или путем сниффинга, - может использовать cookie-файл для получения доступа к данным пользователя? Всегда HTTPS не вариант.

Спасибо, Бернд

[Edit] Подключить IP-адрес к cookie тоже не вариант.

SQL Injection: Атаки в реальной жизни и как это вредит бизнесу
SQL Injection: Атаки в реальной жизни и как это вредит бизнесу
Один-единственный вредоносный запрос может нанести ущерб вашему бизнесу. Уязвимости вашего кода могут привести к:
8
0
10 668
7

Ответы 7

Сохраните файл cookie с непонятным идентификатором в базе данных локального сервера. Выполните поиск в БД на стороне сервера на основе идентификатора, указанного в файле cookie. Обязательно сделайте идентификатор достаточно сложным, чтобы его нельзя было легко угадать. Сопоставьте идентификатор с IP-адресом пользователя. Если их IP изменится, заставьте их снова войти в систему и создайте новый ID.

При втором чтении кажется, что вам нужен высокий уровень безопасности со связанными руками. Пользователь должен иметь возможность оставаться в системе и, таким образом, увеличивать свой риск. Вы можете реализовать все меры безопасности в мире с точки зрения приложения и сервера, но если пользователь забудет свой ноутбук на столе в Tim Horton's (канадский Starbucks), то ничего из этого не принесет вам никакой пользы.

Оставьте выбор за пользователем относительно того, оставаться ли он в системе или нет, и предупредите его о том, что его информация находится под угрозой.

Привет, Киевели, это звучит не очень удобно для пользователя. Существует множество сред, в которых IP-адреса меняются очень часто, и пользователь не хочет входить в систему снова и снова, поэтому он / она выбрал «запомнить меня».

Kevin Dente 21.11.2008 04:26

Файлы cookie доступны только для определенного домена. Подумайте об этом: если кто-то может украсть cookie, это означает, что вор имеет доступ к компьютеру, если он это делает, он может открыть браузер и в любом случае перейти на сайт. Но да, некоторые атаки могут быть выполнены. Я бы порекомендовал вам сделать это так, как описано выше.

Loki 21.11.2008 04:37

Локи - это неверно. Файлы cookie отправляются в виде открытого текста через Интернет; их обнюхивание довольно тривиально, особенно если вы используете беспроводную связь.

SquareCog 21.11.2008 04:40

Закройте банку с печеньем крышкой.

Шутки в сторону, лучший вариант уже был заявлен - сделать cookie неясным идентификатором и привязать его к поиску IP-адреса на стороне сервера. Поскольку вы отредактировали, чтобы сказать, что вы не можете привязать его к IP-адресу, остается неясная часть идентификатора. Ваши возможности ограничены файлами cookie - как только вы размещаете что-либо на клиенте, это становится риском.

Бернд: проблема со стандартным HTTP заключается в том, что это открытый текст; любой может подделать что угодно. Спуфинг IP немного сложнее, чем просто кража файлов cookie, поэтому привязка к IP - это, как правило, то, что люди делают. Как вы сказали, это не очень хорошо работает с высокодинамичной средой.

Единственный наиболее безопасный способ, который я могу придумать, - это использовать HTTPS для размещения и проверки «постоянного» файла cookie, а затем разместить (в том же сеансе HTTPS) краткосрочный файл cookie сеанса. Остальная часть обмена данными может осуществляться по обычному протоколу HTTP с использованием файла cookie сеанса для аутентификации.

Таким образом, для поддержки шифрования используется меньше ресурсов (только рукопожатие), постоянный файл cookie не отображается - он передается только с шифрованием, а кража файла cookie сеанса открывает лишь ограниченный риск, поскольку срок действия этого файла cookie быстро истекает.

При этом не позволяйте пользователям нажимать «запомнить меня» на сайте, который содержит действительно конфиденциальные данные! Вот почему банки этого не делают.

Надеюсь это поможет.

Как этот вариант использования можно применить к F5 LB? Скажем, SSL завершается на BigIP. Трафик к внутренним серверам осуществляется в виде открытого текста через HTTP. Скажем, F5 LB настроен с сохранением файлов cookie. Я так понимаю, вам придется использовать Cookie Hash / iRules, чтобы имитировать одноразовый токен, который, как я полагаю, вы здесь описываете. Если злоумышленник сломал HTTPS (то есть MITM), то, вероятно, вы в любом случае мало что можете сделать, кроме как обойти атаки на HTTPS-соединение.

user3621633 16.02.2017 20:03

Как поможет подмена IP-адреса? Не приведет ли это к тому, что ответы будут отправлены на неправильный IP-адрес, чтобы вредоносный запрос не был возвращен отправителю этого запроса?

ErikE 19.02.2019 22:42

О хранении сложных идентификаторов файлов cookie и связанных IP-адресов в базе данных - вам действительно не нужно этого делать. Если у вас есть секретный ключ K, достаточно зашифровать IP-адрес пользователя вашим K и поместить результат {IP} K в файл cookie. Пока ваш ключ безопасен (и криптовалюта не была взломана - но если это произойдет, у нас возникнут более серьезные проблемы), это безопасно.

Бернд - вы говорите, что подключение IP-адреса к cookie не является вариантом, я предполагаю, что b / c пользователь может быть подключен через DHCP и, таким образом, может каждый раз входить под другим IP-адресом. Рассматривали ли вы возможность привязки файла cookie к имени хоста DNS? Вы можете зашифровать файл cookie с помощью закрытого ключа и сохранить его в ящике пользователя. Затем всякий раз, когда они входят, проверяйте файл cookie, расшифровывайте его, а затем сравнивайте текущее имя хоста DNS пользователя с именем в файле cookie. Если он совпадает, вы разрешаете им войти. Если нет, вы не разрешаете автоматический вход.

К вашему сведению - в ASP.Net, чтобы получить имя хоста DNS для пользовательского ящика, просто посмотрите на

Page.Request.UserHostName

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

В этом случае злоумышленник должен будет выполнить следующие три действия:

  1. Украсть куки жертвы
  2. Подделать правильный IP-адрес
  3. Подделать правильный пользовательский агент

Это также помогает убедиться, что злоумышленник еще не знает всего, что ему / ей придется сделать, чтобы правильно захватить сеанс жертвы. IE: Они могут предположить, что нужен только файл cookie, а затем потерпят неудачу ... и им придется выяснить все остальное путем очень долгих проб и ошибок. Таким образом, вы получаете безопасность через неизвестность и трудности, в зависимости от навыков злоумышленника и его / ее существующих знаний о системе.

Это не кажется очень безопасным. Кто-то может получить все эти параметры программно, либо путем внедрения кода в браузер пользователя, либо путем перехвата открытого текста HTTP.

Lawrence Weru 05.08.2018 23:19

Я думаю, что этот метод не работает, если пользователи используют мобильный телефон для просмотра сайта, например,. сеть 4G, которая постоянно меняет IP ..

Mohamad Hamouday 26.03.2020 17:28

Возможно, использование идентификатора сеанса и токена (хэш на основе IP-адреса, соли и идентификатора сеанса), который регенерируется при каждом запросе (используйте алгоритм быстрого хеширования), будет хорошим подходом? Я храню данные сеанса в базе данных (в настоящее время), а это означает, что у меня накладные расходы на два запроса на каждый запрос. Это работает так:

  1. Выберите, где совпадают SID и TOK.
  2. Убедитесь, что токен, созданный на основе текущего клиента, соответствует токену в базе данных.
  3. десериализовать данные в свойство.
  4. Сценарии и т. д. Происходят.
  5. Сериализуйте обновленные данные, повторно сгенерируйте SID / TOK и обновите DB, где SID / TOK = старый sid и tok, обновленные данные и новые sid и tok. Установите cookie на новый SID и TOK.

Таким образом, сначала файлы cookie связаны с тем, на чем я основываю токен (в данном случае с удаленным адресом), и если это украдено и данные клиента подделаны, cookie в любом случае будет полезен только для одного запроса - к тому времени, когда cookie будет перехвачено, бесполезно.

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

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

ErikE 19.02.2019 22:44

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