Авторизация, сессии (php, mysql)?

Дорогой Хабр, помоги! $)


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


Я делаю так: у меня 2 таблицы в базе, одна users, вторая session. Для пользователей и для сессий соответственно. В таблице session хранятся session_id, user_id, и прочая лабуда. Как только юзер логинится, ему пишется сессия, и так-же она пишется в базу. Собственно по этой сессии мы и узнаём юзера, а благодаря таблице sessions не храним в куках пароль.


Но чую я что-то упускаю. Ведь сессию могут подменить. Как быть? Что делать? Посоветуй.
  • Вопрос задан
  • 22603 просмотра
Пригласить эксперта
Ответы на вопрос 12
Alter_Ego
@Alter_Ego
Всё можно подменить, если вы ЭЦП не используете. Если боитесь подбора чужого session ID — то нужно этот самый ID сделать длинным, 64 байта например. Если основные опасения — что у пользователя уведут куки с его session ID, то проверяйте user-agent, разрешение экрана, версию flash.
Ответ написан
Вот кое что нашел, возможно пригодится:
habrahabr.ru/blogs/php/13726/
php.ru/forum/viewtopic.php?t=15658
Ответ написан
Комментировать
@shagguboy
>а благодаря таблице sessions не храним в куках пароль.
рыдалЪ
Ответ написан
Assorium
@Assorium
Все что угодно можно подменить. Советую не быть крайне параноиком в этом плане.
Товарищи выше дают крайне полезный совет. Браузер + IP. В другом браузере все равно заново логиниться, а чтобы проще это распознавать, то используйте хэш. md5([browser].[IP])
Ответ написан
Комментировать
@edogs
Почему бы не посмотреть как сделано в vbulletin, invision или просто какой-нибудь хорошей CMS? Задача авторизации это реально такой баянистый велосипед… заодно подсмотрите всякие интересные штуки типа индивидуальной соли паролей, логин с запоминанием или без, серверную авторизацию как опцию и http only печеньки и прочее и прочее.
Ответ написан
AlexanderPHP
@AlexanderPHP
Привязка по ип, а также сверять, что в базе, и что в самих куках
Ответ написан
no1
@no1
Делать сессию с привязкой по данным, снимаемым с пользователя, самое популярное — ip адрес, браузер, куки.
Ответ написан
Комментировать
@werdender
Можно привязать ее IP.
Вообще, примеров по этому поводу в гуле вагон и маленькая тележка :)
Ответ написан
reffy
@reffy Автор вопроса
Я молодец.
По ip привязывать как-то не хочется. А вдруг динамичный ip.

Единственное, сверять user agent браузера. Больше ничего в голову не лезит )
Ответ написан
Это я упускаю, или вы изобретаете велосипед?
Ответ написан
Комментировать
@egorinsk
Лучше всего вам разобраться как например сделаны сессии в том же PHP по умолчанию. Касательно вопроса (session_id хранится в куках, его можно подменить) — а вы делайте этоот session_id из 32-64 букв, знаков и цифр. Подменить-то такой ид можно, но сначала надо его подобрать, а это годы работу суперкомпьюетров.
Ответ написан
Arris
@Arris
Сапиенсы учатся, играя.
Имхо, стоит сначала определиться:
1) будут ли подменять сессию 90% пользователей?
2) будут ли подделывать useragent те же самые 90%?

Если нет — не стоит задачу усложнять ;-) ИМХО.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы