Автоматическая авторизация пользователей с помощью cookies

JohnSparrow

Новичок
Автоматическая авторизация пользователей с помощью cookies

Преамбула:
1) Пользователь ввел логин и пароль, включил опцию "сохранять логин и пароль" (или "автоматичский вход", неважно) и нажал кнопку "Войти".
2) Сервер выяснил, что такой пользователь существует и теперь надо обеспечить автоматический вход.
3) Сервер записал в cookie, например, ID пользователя (предположим, зашифровал его с помощью функции обратного шифрования).
4) В следующий раз при входе сервер проверил наличие такого cookie и загрузил данные пользователя автоматически.

Амбула:
1) Плохой дядя зарегистрировался на сервере и выяснил имя cookie с ID пользователя.
2) Плохой дядя создал свой сайт с похожим названием (например, phpklub.ru, :) ).
3) После входа пользователя на поддельный сайт сервер сайта считал cookie, принадлежащее оригинальному сайту и сохранил его.
4) Плохой дядя методом прямого редактирования сделал на своем компьютере cookie с указанным выше именем и данными другого пользователя.
5) Плохой дядя автоматом загрузился на оригинальный сайт и что-то сделал.

Я в PHP новичок, потому не судите строго.

У меня была следующая идея: записывать в cookie не просто зашифрованный ID пользователя, а строку вида "ID-IP", потом при разборе расшифрованной строки сравнивать IP-адреса. В интернете IP пользователя скорее всего выделяется динамически, поэтому идея отпала, а других нет. Отсюда вопрос: как это делают те, у кого прямые руки и прочие несомненные достоинства?
 

hermit_refined

Отшельник
3) После входа пользователя на поддельный сайт сервер сайта считал cookie, принадлежащее оригинальному сайту и сохранил его.
это невозможно, потому вся ваша "Амбула" бессмысленна.
однако, пользователь может принять чужой сайт за ваш, и ввести сдуру свой пароль, но это уже его проблемы.

если "автоматический вход" - значит, проверку по ip делать нельзя. предохраняйтесь от XSS, и используйте либо достаточно надёжное шифрование, либо храните в бд таблицу соответствий кука<--->пользователь.
я же ведь правильно понимаю, что вы не с кредитными карточками там работаете?..
 

ukostin

Новичок
Едвали шаг №3 в амбуле возможен. Недаром же куки в браузере имеют поле domain.
 

Лысый

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

единственный способ - хранить какую либо идентификационную информацию на сервере (например ИП), а у клиента только идентификатор этой записи

автоматически надо авторизовывать только того, чей ИП совпал с записью по данному идентификатору
 

dron4ik

Новичок
Лысый
ну IP не трудно подделать, раз человек смог "найти" чужую куку с ID, то IP для него совсем не проблема.

В куках я храню Blowfish зашифрованный массив состоящий из:
ип
логина
юзер агента
md5(пароля)
при заходе на любую страницу админки этот массив проверяется на валидность.
 

Лысый

Новичок
Автор оригинала: dron4ik
Лысый
ну IP не трудно подделать, раз человек смог "найти" чужую куку с ID, то IP для него совсем не проблема.

В куках я храню Blowfish зашифрованный массив состоящий из:
ип
логина
юзер агента
md5(пароля)
при заходе на любую страницу админки этот массив проверяется на валидность.
1) как раз таки куки спереть не сложно - банальный XSS
2) если ты умеешь подделывать ИП, то я удивлён, что ты ещё не озолотился на контекстной рекламе
3) конечно есть смысл кроме ИП хранить ещё что-нить про пользователся, типа юзер агента,
а зачем Blowfish от md5(пароля) ?
если спёрли так уже спёрли всё. незачем уложнять
и главное
почему в куках авторизации? чтоб люди с динамическим ИП надёжнее обламывались?
другого смысла не вижу, так как ты не можешь гарантировать что данные из кук не подменили

а храня данные на сервере - можешь
 

crezd

Новичок
Записуй мак адрес,есть пхп скрипты под линукс которые определяют мак(ИД сетевой карты юзера)
но там прикол в том что ты получишь мак юзера если он идет напрямую от своего модема до твоего сайта,если он проходит через раутеры,свитчи то ты получишь мак последнего раутера\свитча

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

phprus

Moderator
Команда форума
crezd
Бредс несем, так как определен будет мак-адрес последнего маршрутизатора, а в он в 100% случаев находится в том-же датацентре что и сервер и следовательно через него будут проходить все 100% запросов пользователей и соответственно все определенные мак-адреса будут одинаковыми.
 

crezd

Новичок
phprus
причем тут сервер, определение мака по ip юзера через arp
 

dron4ik

Новичок
Лысый
даже если сопрут такую куку (зашифрованную Blowfish)

Для подделки её, надо знать:
или
ип, логин, юзерагент, пароль, или хотя-бы его хеш
и всё это подделать

или знать каким паролем на сервере эта шифрованная кука получилась, + ПОСЛЕДОВАТЕЛЬНОСТЬ ип, логина, пароля + сальт.

p.s. у себя я убрал галочку "сохранить пароль", а лимит по времени куки установило на 24 часа, если не нажать "выход".

Вообще галочка "сохранить пароль", это большая дыра. Надо слишком много расчитать и всего проверять, чтобы "чужой" не зашёл под кукой "валидного пользователя". Ну раз есть такая необходимость, то надо обязательно ввести дополнительное радио: привязать к ИП, или нет.

насчёт подделки ИП, я не занимаюсь контекстной рекламой:)
 

Фанат

oncle terrible
Команда форума
редкий по тупизне топик.
crezd
не заставляй меня удалять свои сообщения. не пиши сюда больше.
засорять чужой топик объяснениями основ сетевых протоколов я не дам.
 
Сверху