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

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

09.09.2016, 12:57. Показов 1150. Ответов 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
 Аватар для Laroux
172 / 167 / 75
Регистрация: 21.11.2014
Сообщений: 1,490
09.09.2016, 17:38  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Jewbacabra Посмотреть сообщение
Компроментация id сессии
каким образом?

Добавлено через 36 секунд
Цитата Сообщение от Jodah Посмотреть сообщение
зачем session_id в БД сохранять?
чтобы было понятно, что с этой сессией сейчас работает именно этот пользователь.
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
09.09.2016, 17:41
Цитата Сообщение от Laroux Посмотреть сообщение
каким образом?
Прослушивание трафика, зловредное ПО на стороне клиента
1
 Аватар для maruo
133 / 133 / 48
Регистрация: 26.04.2013
Сообщений: 1,356
09.09.2016, 17:49
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
/**
    *--Проверка авторизован ли пользователь
    *--Проверяет существует ли сессия с $argument
    *--Если сессия существует то возвращает true
    *--Если сессия не существует, проверяем есть ли в куках Логин и Пароль
    *--Если куки есть то вызываем функцию авторизации | если нету вернем false
    *--Если данные в куках валидны и функция loginInSite возвращает true , авторизуем пользователя
    */
    public function is_auth($argument){
        if(isset($_SESSION[$argument])){
            return true;
        }else{
            if(self::$cookie->exists('US_login') && self::$cookie->exists('US_password')){
                if($this->loginInSite(self::$cookie->get('US_login'),self::$cookie->get('US_password'),true)){
                    return true;
                }else{
                    return false;
                }
            }else{
                return false;   
            }
        }
    }
 
    /**
    *--Авторизация на сайте Для пользователей
    *--Принимает Логин, Пароль, и если отмечено записать в куки
    *--Возвращает true в случае удачной авторизации|false неудаче
    */
    public function loginInSite($login,$password,$remember = false){
        if(!empty($login) && !empty($password)){
 
            $users = $this->tbl($this->users);
 
            $sql = "SELECT * FROM {$users} WHERE prg_login = ?";
            $result = self::$PDO->Query($sql,$login);
            if($result === false){
                return false;
            }else{
                if($result['prg_password'] == md5($password)){
                    $_SESSION['userAuth'] = array('userID' => $result['prg_user_id']);
                    if($remember !== false){
                        self::$cookie->set('US_login'   ,$login,   self::$cookie::SevenDays,'/',$_SERVER['SERVER_NAME']);
                        self::$cookie->set('US_password',$password,self::$cookie::SevenDays,'/',$_SERVER['SERVER_NAME']);   
                    }
                    return true;
                }else{
                    return false;
                }
            }
        }else{
            return false;
        }
    }
Вот дефолтная моя авторизация , и я не мучаюсь, и все работает как надо.

Для API у меня другая история, но она тут не нужна

Добавлено через 7 минут
А все эти сессии и id сессиий в бд, чепуха не предсталяю какую она тебе защиту даст.
Если куки украли то пиши пропало
Сессию стащили, тоже пиши пропало
1
930 / 846 / 190
Регистрация: 28.11.2013
Сообщений: 3,621
09.09.2016, 18:19
Цитата Сообщение от Laroux Посмотреть сообщение
чтобы было понятно, что с этой сессией сейчас работает именно этот пользователь.
Какой этот? Вы просто проверяете, установлены ли сессионные переменные и все. Сохранение sid'а в базе может потребоваться для работы на нескольких устройствах, чтобы для каждого устройства не создавалась отдельная сессия.
0
 Аватар для Laroux
172 / 167 / 75
Регистрация: 21.11.2014
Сообщений: 1,490
09.09.2016, 23:28  [ТС]
miketomlin, ну вот же! Вот оно!
Я и хочу понять, что и как не так. Прослушивание трафика и вредоносные программы - это все понятно. Но мы же сейчас не о банковской системе какой-то говорим. Тогда уже давайте об инсайдерах не забывать, что чаще дешевле...

У меня не сайт, раз уж такая пьянка. У меня некий ресурс типа CRM. Нет у меня необходимости: а) ходить в систему из разных браузеров; 2) ходить в систему с разных IP в рамках сессии, ибо народ работает на рабочих местах.. а я пароль введу себе уж как-нить.

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

Что касается записи идентификатора сессии в базу - а чем вам не дополнительная защита-то? Если вас постоянно выкидывает из системы - идите к админу (разрабу): то ли он криворукий, то ли какие-то проблемы у нас, Хьюстон.

Я, ко всему прочему, хочу сделать лог авторизаций: время, IP. И, поверьте, я его буду смотреть.. ибо я с Астериском уже встрял, было дело (а надо было всего навсего хотя бы иногда смотреть логи).

В общем я из всего нашего топика+гугление вынес для себя единственное приемлемое решение: кук не будет, ибо это достояние пользователя (мошенника) и при этом в БД для проверки будет записываться implode http-запроса в виде sha какого-нить + проверка IP сесии.
0
930 / 846 / 190
Регистрация: 28.11.2013
Сообщений: 3,621
10.09.2016, 00:16
Цитата Сообщение от Laroux Посмотреть сообщение
Я и хочу понять, что и как не так. Прослушивание трафика и вредоносные программы - это все понятно. Но мы же сейчас не о банковской системе какой-то говорим. Тогда уже давайте об инсайдерах не забывать, что чаще дешевле...
У меня не сайт, раз уж такая пьянка. У меня некий ресурс типа CRM. Нет у меня необходимости: а) ходить в систему из разных браузеров; 2) ходить в систему с разных IP в рамках сессии, ибо народ работает на рабочих местах.. а я пароль введу себе уж как-нить.

И я хочу адекватный баланс между удобством и безопасностью, чтобы у меня не "стибрили" мои годами наработанные данные.
Это понятно. Вы спросили – вам ответили. Доп. проверки делаются сверх того, о чем сейчас идет, если нужно защититься, «как в банке». По IP сейчас уже не так актуально, куча народа практически постоянно работает с мобильных устройств.

Цитата Сообщение от Laroux Посмотреть сообщение
Что касается записи идентификатора сессии в базу - а чем вам не дополнительная защита-то? Если вас постоянно выкидывает из системы - идите к админу (разрабу): то ли он криворукий, то ли какие-то проблемы у нас, Хьюстон.
В чем «дополнительность», не понятно. Объясните. Или вы имеете в виду возможность выхода сразу на всех устройствах, о чем я в статье писал? Но если так, вам каждый раз для проверки придется тянуть sid из базы. Тогда в чем вообще профит от использования сессий, хранимых в файлах? Делайте на чистых куках, как я вам показал.

Цитата Сообщение от Laroux Посмотреть сообщение
Я, ко всему прочему, хочу сделать лог авторизаций: время, IP. И, поверьте, я его буду смотреть.. ибо я с Астериском уже встрял, было дело (а надо было всего навсего хотя бы иногда смотреть логи).
Флаг в руки, какие проблемы. Этим все балуются. Занятно наблюдать, как брутят мои сайты. Только на основе логов можно собрать базу «популярных» паролей.

Цитата Сообщение от Laroux Посмотреть сообщение
В общем я из всего нашего топика+гугление вынес для себя единственное приемлемое решение: кук не будет, ибо это достояние пользователя (мошенника) и при этом в БД для проверки будет записываться implode http-запроса в виде sha какого-нить + проверка IP сесии.
Походу вы про куки так ничего и не поняли.
0
Фрилансер
Эксперт PythonЭксперт JSЭксперт PHP
 Аватар для Azdeman
1871 / 1362 / 604
Регистрация: 12.01.2011
Сообщений: 5,470
10.09.2016, 00:47
Цитата Сообщение от Laroux Посмотреть сообщение
чтобы было понятно, что с этой сессией сейчас работает именно этот пользователь.
зачем? Если у вас авторизация есть, есть id пользователя, есть session_id() - он уникальный для каждого.

Я session_id пихал в базу , когда у меня не было регистрации и авторизации, аа нужно было добавить определенную инфу в базу данных и потом знать что она моя по session_id(). Но это работало до выхода из браузера. И еще раз повторяю, это было целесообразно когда нужно было сохранить состояния, ( идентифицировать человека ибо нет у него не имени , не id, ничего кроме PHPSESSID) для чего и используются куки и сессии.

Вот если бы у меня была авторизация , я бы сохранял ествественно id пользователя и по ней бы вытягивал инфу. А так пришлось session_id использовать.
0
930 / 846 / 190
Регистрация: 28.11.2013
Сообщений: 3,621
10.09.2016, 01:10
Laroux, пару слов про CRM... Если речь идет не об отдельных рядовых пользователях, а о менеджерах, вам нужно сделать так, чтобы точку входа в систему для привилегированных пользователей даже найти было трудно, не то что ее взломать.

Помимо всего прочего форму входа, имя хоста с DNS-сервера можете перенести на рабочие места менеджеров. Можно и всю систему перенести, оставив только базу и хранилище файлов с клиентской частью на сервере.
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,908
10.09.2016, 09:49
Цитата Сообщение от Laroux Посмотреть сообщение
И я хочу адекватный баланс между удобством и безопасностью, чтобы у меня не "стибрили" мои годами наработанные данные.
Тогда имхо лучше куки.
Цитата Сообщение от Laroux Посмотреть сообщение
Что касается записи идентификатора сессии в базу - а чем вам не дополнительная защита-то?
Тем, что никакой защиты не даёт. Можно вообще всю информацию о юзере из БД писать в сессию и при каждом заходе сверять. Имя, фамилию, год рождения и т.п. Но это просто переливание информации туда-обратно, практической пользы никакой.

Цитата Сообщение от Laroux Посмотреть сообщение
кук не будет, ибо это достояние пользователя (мошенника)
Да будут у вас куки в любом случае. Что напрямую через setcookie будете отправлять, что session_start будет отправлять за вас. Чем бояться неизведанного, лучше потратьте больше времени на изучение.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.09.2016, 09:49
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
29
Ответ Создать тему
Новые блоги и статьи
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru