Авторизация и сессия

vlav

Новичок
Здравствуйте
Юзер проходит авторизацию, введенное им в форму имя и пароль ищется в базе и, в случае успеха, присваивается переменным сессии.
Далее при загрузке страницы делается запрос к базе с именем и паролем из сессии и, если найдено, авторизация подтверждается.
Например я сейчас авторизован на некотором форуме. Как может получиться так, что зайдя сразу после меня на тот же форум с совершенно другого компьютера, из другого города, человек автоматически логинится в системе, под моим именем? Как может сессия существовать одинаковой на обеих машинах и что я не понимаю?
 

AnrDaemon

Продвинутый новичок
1. С какого перепугу у тебя пароль хранится в сессии?
2. Это может быть от кардинального непонимания механизма сессий.
 

vlav

Новичок
1. С какого перепугу у тебя пароль хранится в сессии?
2. Это может быть от кардинального непонимания механизма сессий.
Если быть точным, то хранится не пароль, а мд5 пароля. И в базе и в сессии. Вы бы что то подсказали или дали наводку где почитать...
 

Фанат

oncle terrible
Команда форума
Сессия на двух компьютерах существовать не может.
сессия и авторизация - это разные вещи.
судя по кривой реализации (парль в сессии, хотя нфига он там нужен?), причина проблемы в твоем коде
в чем конкретно заключается кривизна твоего кода, мы не знаем.
 

vlav

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

Фанат

oncle terrible
Команда форума
Я бы просто писал в сессию ид пользователя.
Если надо проверять, забанен ли пользователь, то запрашивать из БД каждый раз по ид.
А если не надо, то зачем вообще базу дергать?

Вообще вариантов масса, но этот самый простой
 

vlav

Новичок
Спасибо.
У меня тут просто есть некоторые планы, и я понимаю, что отстал во многих вопросах. Хочу убедиться, что в ключевых точках не делаю ошибок.
 

vlav

Новичок
Я бы просто писал в сессию ид пользователя.
Если надо проверять, забанен ли пользователь, то запрашивать из БД каждый раз по ид.
А если не надо, то зачем вообще базу дергать?

Вообще вариантов масса, но этот самый простой
Извините, хочу еще раз уточнить - вы считаете, что достаточно при первом заходе, если имя пароль корректны, создать _SESSION['uid'] а затем просто проверять - если isset($_SESSION['uid']) - то авторизация подтверждена? И этого достаточно ?
 

vlav

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

AnrDaemon

Продвинутый новичок
Переменные можно посмотреть только на сервере, ведь они существуют только во время выполнения скрипта.
Когда результат отослан клиенту, скрипт уже завершил работу.

Есть программы-отладчики, позволяющие контролировать выполнение скрипта.
Например, XDebug.
 

vlav

Новичок
Здесь
http://phpfaq.ru/sessions
написано про безопасность сессий:
Самый хрестоматийный - не передавать идентификатор через адресную строку. Об этом написано даже в php.ini, но это ограничивает функциональность сессий. Если вы решите последовать этому совету, то кроме session.use_trans_sid = 0 не забудьте session.use_only_cookies = 1
Желательно привязывать сессию к IP адресу: таким образом, если идентификатор будет украден, то злодей все равно не сможет им воспользоваться в большинстве случаев.
а как в принципе можно воспользоваться идентификатором сессии, украв его? Если он выдается один раз при старте у клиента и уникален каждый раз? Его в общем то несложно посмотреть в куках...
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
@vlav, украв идентификатор можно стать тем, у кого был этот id, то есть получить его права
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
@vlav, как - вот так, по содержимому этой куки, а не по ее идентификатору онли.
Надо понимать и ограничения, связанные с временем жизни куки.

Но многие делают еще и привязку к браузеру, ip адресу клиента и прочее, просто так упереть куку на нормальном сайте - даст мало чего.
 

vlav

Новичок
Можно еще один глупый вопрос? С сессиями более менее разобрался. Где хранятся глобальные переменные PHP, которые присутствуют в GLOBALS (например были созданы как var XXXX в классе)? Собственно волнует вопрос безопасности. Может ли хакер на клиентском компьютере как то их считать?
 
Сверху