Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
 Аватар для Laroux
172 / 167 / 75
Регистрация: 21.11.2014
Сообщений: 1,490

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

09.09.2016, 12:57. Показов 1143. Ответов 28
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ребяты, подскажите, пожалуйста идеологию авторизации на сессиях (без кук).

Есть БД юзверей. В ней id, логин и пароль в md5 и или иже с ним (соль там и все такое).

Стартуем сессию, проверяем, задан ли $_SESSION['id']. Если нет, то отправляем на страницу авторизации.
Если задан, то лезем в БД и проверяем, есть ли юзверь с таким id. Если есть, пускаем на страницу, если нет - отправляем опять же на страничку авторизации.

Такого подхода достаточно? Или необходимо более надежно защититься?

К примеру, кроме $_SESSION['id'] задавать еще какой-нить уникальный для данной сессии $_SESSION['session_hash'], который генерится при авторизации и записывается в БД, а затем проверяется вместе с id?
Я вот этот момент не очень понимаю... ну если он нужен, конечно. По мне, так это только для кук надо делать...

Можете в двух словах описать безопасный принцип авторизации на сессиях?

А то примеров в инете куча, но никто не описывает идеологии: тупо "сделайте так", "сделайте так" и "как видите все просто".
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.09.2016, 12:57
Ответы с готовыми решениями:

Безопасная авторизация на разных устройствах: что хранить в сессиях и куках?
Здравствуйте! Возник вопрос безопасной авторизации на разных устройствах. Вопрос состоит в том, что не могу определится что хранить...

Безопасность в сессиях
Здравствуйте. У меня такой может быть ламерский вопрос. Есть скрипт самописного сайта где есть авторизация и админка. Так вот - при...

Работа в сессиях
Здравствуйте! Буду организовывать личный кабинет пользователей на сессиях. Есть реализация представленная ниже: открываем сессию,...

28
Фрилансер
Эксперт PythonЭксперт JSЭксперт PHP
 Аватар для Azdeman
1871 / 1362 / 604
Регистрация: 12.01.2011
Сообщений: 5,470
09.09.2016, 13:04
Цитата Сообщение от Laroux Посмотреть сообщение
Стартуем сессию, проверяем, задан ли $_SESSION['id']. Если нет, то отправляем на страницу авторизации.
Если задан, то лезем в БД и проверяем, есть ли юзверь с таким id. Если есть, пускаем на страницу, если нет - отправляем опять же на страничку авторизации.
правильно.
Цитата Сообщение от Laroux Посмотреть сообщение
К примеру, кроме $_SESSION['id'] задавать еще какой-нить уникальный для данной сессии $_SESSION['session_hash'], который генерится при авторизации и записывается в БД, а затем проверяется вместе с id?
Он и так создаётся, ваш session_id (уникальный)
Вот напиши в файле
PHP
1
echo session_id();
получишь что то типо v2hbsobp11p9jsua528prtgfv5
Выйди из браузера, снова войди, он изменится.
1
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
09.09.2016, 13:04
Цитата Сообщение от Laroux Посмотреть сообщение
К примеру, кроме $_SESSION['id'] задавать еще какой-нить уникальный для данной сессии $_SESSION['session_hash']
Он уже есть, это id сессии
1
 Аватар для Laroux
172 / 167 / 75
Регистрация: 21.11.2014
Сообщений: 1,490
09.09.2016, 13:54  [ТС]
Хорошо, сто он есть, этот идентификатор сессии.. я должен с ним что-то делать?
Например, запоминать в БД, чтобы моего юзера не ломанули?

Или вот банально $_SESSION['id'] будет достаточно?
0
930 / 846 / 190
Регистрация: 28.11.2013
Сообщений: 3,621
09.09.2016, 14:04
Laroux, чтоб «не ломанули», не используйте сессии без кук
0
 Аватар для Laroux
172 / 167 / 75
Регистрация: 21.11.2014
Сообщений: 1,490
09.09.2016, 14:35  [ТС]
miketomlin, не люблю я клиентские штуки.. почему чисты PHP великолепен? Да потому, что он все далает на серваке и отдает только html.
Как только дело касается чего-то на компе пользователя и что нужно как-то юзать....
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,904
09.09.2016, 14:39
Laroux, сессии используют куки (хотя есть другой способ, без кук, но о безопасности можно забыть). Так что не избежать вам "клиентских штук".
0
 Аватар для maruo
133 / 133 / 48
Регистрация: 26.04.2013
Сообщений: 1,356
09.09.2016, 14:45
Laroux, не любишь клиентские штуки, делай двухфакторную аудентификацию, думаю объяснять не стоит что придется использовать
0
 Аватар для Laroux
172 / 167 / 75
Регистрация: 21.11.2014
Сообщений: 1,490
09.09.2016, 14:50  [ТС]
Jodah, ну и все-таки сесии и куки немного разные вещи, согласитесь.

Не, куки не буду юзать принципиально.

А если сделать так, к примеру: запомнить в сессию id пользователя, а также getallheaders() в sha256 с какой-нить солью и в каждое обращение кроме id проверять еще и эти заголовки? Спасет?
0
 Аватар для maruo
133 / 133 / 48
Регистрация: 26.04.2013
Сообщений: 1,356
09.09.2016, 14:52
Цитата Сообщение от Laroux Посмотреть сообщение
почему чисты PHP великолепен? Да потому, что он все далает на серваке и отдает только html.
Как только дело касается чего-то на компе пользователя и что нужно как-то юзать....
И это тебе не дает 100% уверенности что тебя не ломанут

Добавлено через 1 минуту
Цитата Сообщение от Laroux Посмотреть сообщение
Не, куки не буду юзать принципиально.
А это ты зря, я тоже так думал, но куки решают ситуацию, отбрось эти принципы жизнь проще станет
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,904
09.09.2016, 15:01
Цитата Сообщение от Laroux Посмотреть сообщение
ну и все-таки сесии и куки немного разные вещи, согласитесь.
Конечно разные. Но повторюсь, сессии используют куки (session_start отправляет куку с именем PHPSESSID и использует её для идентификации).

Цитата Сообщение от Laroux Посмотреть сообщение
Не, куки не буду юзать принципиально.
Зря.
0
 Аватар для Laroux
172 / 167 / 75
Регистрация: 21.11.2014
Сообщений: 1,490
09.09.2016, 15:07  [ТС]
балин.. чо ж так все сложно-то?

Ок, черт с ним.. как организовать корректно и безопасно авторизацию на куко-сессиях? В двух словах. Особенно интересует, что где должно храниться и в каком виде.

Заранее благодарен
0
930 / 846 / 190
Регистрация: 28.11.2013
Сообщений: 3,621
09.09.2016, 15:18
Все элементарно. Просто нужно отделять слой PHP-абстракций от реального положения дел/протокола.

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

Скинул в личку ссылку на статью, где описывается сама суть.
1
 Аватар для Laroux
172 / 167 / 75
Регистрация: 21.11.2014
Сообщений: 1,490
09.09.2016, 16:13  [ТС]
miketomlin, посмотрел. Т.е. Вы хотите сказать, что авторизация должна реализовываться только на куках, а для данных пользователя, которые будут использован на странице, юзать уже сессии. Сессии никакого отношения к авторизации не имеют?
0
930 / 846 / 190
Регистрация: 28.11.2013
Сообщений: 3,621
09.09.2016, 16:55
Я хочу сказать, что сессии – это лишь прослойка для удобства тех, кому лень пару лишних строк самому написать. Плюс по дефолту сессии хранятся в файлах – некоторые считают, что так быстрее. Лично мне сессии только мешают. Чем настраивать их под себя, проще вовсе без них обойтись. sid – это по сути ключ авторизации предопределенного формата, зависящего не от меня. Опять-таки, чем что-то настраивать, мне проще использовать свой аналог, не задумываясь о том, как подогнать сессии под себя.

Добавлено через 12 минут
Данные авторизованного пользователя не храню в файле, хотя воссоздать при необходимости дефолтный сессионный механизм хранения данных, как вы понимаете, не составляет особого труда.
1
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,904
09.09.2016, 17:07
Цитата Сообщение от miketomlin Посмотреть сообщение
Лично мне сессии только мешают.
+1, никогда не ощущал от них профита. Хотя нет, пару раз был профит, когда помогал делать курсовые. Когда гораздо проще обращаться к $_SESSION, чем описывать человеку, как работают куки (в частности setcookie).
1
930 / 846 / 190
Регистрация: 28.11.2013
Сообщений: 3,621
09.09.2016, 17:09
Laroux, сессии совсем без кук (это когда вы пихаете sid в адреса страниц), как я вам выше намекнул и написал Jodah, в целях безопасности лучше совсем не использовать. Сам механизм, конечно, может быть полезен в каких-то частных случаях. Например, можете запихнуть ключ авторизации в ссылку активации акка пользователя, только сразу после однократного перехода по ней делайте ссылку недействительной – смените ключ авторизации. В редких случаях возможность входа по одноразовой ссылке может быть полезна, только не нужно всю авторизацию подобным образом строить.
0
 Аватар для Laroux
172 / 167 / 75
Регистрация: 21.11.2014
Сообщений: 1,490
09.09.2016, 17:16  [ТС]
miketomlin, да я же не против.
Давайте еще раз, ребят. Потому что много тут уже переписки, а воз (мой, правда ) и ныне там.

Исходные данные: 1) предполагаем, что к моей БД с данными пользователей никто не доберется; 2) сессии у меня хранятся на сервере в месте недоступном извне. Из соседнего аккаунта хостинга тоже каталог с фалами сессий недоступен.

Что мы делаем:
Есть база, в которой хранятся данные пользователя (4 поля): UserID, Login, Password в каком-нить ужасно зашифрованном формате с солями, SessionID.

Для проверки "авторизован ли пользователь?" Я использую следующий механизм: стартую сессию, проверяю, существует ли $_SESSION['UserID'].
Если нет - редирект на страницу авторизации, а на ней я (при правильном вводе имени и пароля) записываю session_id() этому пользователю в базу в поле SessionID.
Если $_SESSION['UserID'] определен, то идем в БД, делаем запрос по `UserID`= $_SESSION['UserID'] и `SessionID` = session_id(). Запрос вернул строку? - велкам! Если же нет - отправляем на страницу авторизации.

Можете мне указать на потенциальные уязвимости такого подхода?
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
09.09.2016, 17:25
Цитата Сообщение от Laroux Посмотреть сообщение
Можете мне указать на потенциальные уязвимости такого подхода?
Компроментация id сессии (то же может быть и с кукуми)
Цитата Сообщение от Laroux Посмотреть сообщение
Если $_SESSION['UserID'] определен, то идем в БД, делаем запрос по `UserID`= $_SESSION['UserID'] и `SessionID` = session_id(). Запрос вернул строку? - велкам! Если же нет - отправляем на страницу авторизации.
Человек не сможет с 2 устройств быть залогинен на 1 аккаунт. Может быть как плюсом, так и минусом. Да и смысла особого нет. Ид юзера изменить можно только на сервере.
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,904
09.09.2016, 17:26
Laroux, а зачем session_id в БД сохранять?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.09.2016, 17:26
Помогаю со студенческими работами здесь

фильтр на сессиях
Привет! У меня есть список объявлений. Решил поставить фильтр на этот список - по Городам, по ценам. Мне нужно чтобы при нажатии на...

Корзина на сессиях
Добрый день, сделал вывод товаров посредством перехода на конкретный php файл, например товар1.php, и вывожу туда таблицу с товарами......

ошибка в сессиях((
Warning: session_start() : Cannot send session cache limiter - headers already sent (output started at...

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

Пропадают переменные в сессиях
здраствуйте уважаемые форумчане! имеется 3 связанных страницы <? session_start();?> <form action="secure.php"...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru