Хочу сделать авторизацию или аутентификацию, похуй по кукам. Правильно ли будет реализовать ее следующим образом:
0. Авторизированным считается, когда в сессии имеется логин.
1. При авторизации (если юзер поставил галку "запомнить меня"), помимо сессии, записываем в куки рандомный хэш и логин юзера, а также записываем этот хэш в БД к этому логину.
2. Всегда проверяем ниличие кук с логином и сессией
3. Если они есть. То проверяем равен ли хэш из кук хэшу из БД
>>152379279 (OP) Я не особый эксперт в пхп, авторизацию никогда не делал, но по описанному тобою варианту ведь если украсть куки, то можно выдавать себя за пользователя. Нужно тогда к ip привязать этот хэш, например. А лучше погугли как все это нормально делать и защититься от хакеров.
>>152379952 дык куки на то и куки, что они всегда не безопасны. Везде же пишут что-то типа "запомнить меня (не безопасно)" или у контакта наоборот от противного "чужой компьютер" т.е. наоборот не запоминать в куках.
Я гуглил, но давно и по памяти вроде оно так делается. Интересно че анон скажет.
А по поводу привязки к IP - я в администрировании этом всем не шарю, но у всех он динамичный - это раз, а два - если ты зашел дома - авторизовался, а потом пошел куда-то, то там уже не сработает - хуйня
>0. Авторизированным считается, когда в сессии имеется логин.
Куки можно подделать, вписав любой логин.
>1. При авторизации (если юзер поставил галку "запомнить меня"), помимо сессии, записываем в куки рандомный хэш и логин юзера, а также записываем этот хэш в БД к этому логину.
Лучше тогда просто хэш, без имени пользователя, а в базе проверять есть ли хэш и тогда смотреть у какого юзера. Но генерация хэша должна зависеть не только от имени юзера, но и от чего-то еще. Может даже и вовсе не от имени.
-----
Можно еще вписать в БД user_agent пользователя, если вдруг куки подделают, то ты проверишь и поймешь, что устройство - иное.
Можно много всякой хуйни вписать, некие "отпечатки", например - разрешение экрана (но это с js)
>>152381146 Используй фреймворк и не еби мозги. Фреймворки, как правило, имеют базовые вещи, вроде авторизации, в коробке. И это безопасно, потому как там учтено все - и фильтрация есть и база данных сгенерированная под это и т.п.
>>152381441 потому-что: >Авторизированным считается, когда в сессии имеется логин.
Сессия живет не долго, а мне надо, чтобы пользователь зашел на следующий день и был авторизован. Для этого в куках хранится идентификатор, при помощи которого, каждый раз, создается новая сессия
>>152381628 А вот и логика фремворкомакаки. А потом такой проект начинает под твоим говнофреймворком падать, клиенты бегут к конкурентам, а макака съебывает в другую фирму пилить дальше свое говно и рассказывать про чудо код с гитхаба.
>>152381675 >может ему хочется понять как работают куки тогда он читал бы документацию. А тут он спрашивает, что писать, что нет. Конечно, он может делать это для обучения, но гораздо лучше посмотреть хороший код, прочитать его и понять, а не тред создавать и часами сидеть, ковыряя велосипед.
>>152381628 Не согласен. Я неплохо разобрался со многими вещами, пока писал авторизацию-велосипед.
А вот перед этим делал проджект на ларавел https://github.com/grigoryMovchan/zuihitsu Да, авторизация из коробки, свой уровень абстракции для любого пука, да, в итоге, все работало, но для меня это было магией, а код кромешный пиздец.
>>152381811 > да, в итоге, все работало, но для меня это было магией, а код кромешный пиздец.
Ну смотри. Если ты используешь API - то тебя не волнует чужой код. Если ты работаешь в команде - та же история. Тебе дают некие "концы", за которые ты цепляешься и пишешь дальше. То же самое фреймворк.
>>152381850 Кек, ты явно так и не разобрался, как профайлинг в своем коде делать. Использовать фреймворки - неправильно, фреймворк это костыль, который тянет за собой гору зависимостей, жрет память и топит скорость. Правильно знать, как и что реализуется. Решения все достаточно типовые, когда знаешь что и как делать. Один раз разобрался, сделал грамотно - без проблем юзаешь в каждом проекте и ссышь на макак с фреймворками.
>>152379279 (OP) Если утечёт бд -> утечёт все хеши, которые в твоём случае = кукам, что приведёт полной компрометации всех пользователей. Разбери стандарт оауф2 и посмотри как это реализовано там.
>>152382041 нет. Если тебе нужна авторизация, то нужен и личный кабинет и прочая хуйня типа редактирования хуй пойми чего. И в этом случае ты напишешь свой костыль, вместо испоьзования готовых безопасных фреймворков.
>>152382387 >ни разу фреймворк по кускам выдирать не приходилос кому ты тут пишешь это? Если куски не используются, то они не грузят систему. А если ты их выдираешь - значит не используются.
>>152382600 вопрос в том, в начиная с какого размера твоя писанина становится неуправляемой. js был языком не для больших проектов, но веб вырос и вариантов не было. поэтому нужны модули, нужна сборка, нужка архитектура клиента - компоненты, управление состоянием, управление событиями. чем это удобнее и надежнее, тем бОльший проект ты можешь собрать в кучу, заставить работать и поддерживать когда поменяются требования.
прикольно, что ни одна макака не знает, как же эта аутентификация работает. ну разве может такая написать хоть что-то если она абсолютно не понимает никаких принципов работы того, что желает?
>>152382685 Проблемы макак опять пошли, не могущих нормально свой код структурировать. Все отлично пишется что на чистом js, что на jquery, с минимальным подключением библиотек, где надо.
>>152382704 и ты не знаешь что там внутри и как оно работает, и вынужден читать тонну документации чтобы понять, что же правильно этому черному ящику посылать на вход, чтобы получить на выходе то что ты хочешь
>>152382704 Это все какие-то абстракции, например "безопасность" - вообще неочем.
архитектура удобнее когда своя, а кэширование, ЧПУ и т.д. - вещи не сложные, которые можно за час всунуть в свой каркасик пидорасик. Зато ты знаешь че где и как, а когда берешься за фреймворк - то пердак на орбиту улетает от того, что хз что где и как
>>152382752 гораздо лучше свой велосипед: авторы ничего не помнят, документации нет вообще, используется во всем интернете ровно в одном месте - гарантированно нет никаких багов и на so ответ на любой вопрос.
>>152382752 Там еще и безопасности часто нет. Не раз случаи бывали, как подключенный фреймворк через гору заюзанных зависимостей постил в твиттер сообщения, когда его подключали. Авторы фреймворка и не в курсе были, лол. А уж если баг трекер любого фреймворка открыть, там вечно гора претензий и тикетов, не решенных с 3-5х летней давности, причем авторы пишут мол так и надо, решать не будем.
Например - я Васян и могу оттопырыть твою мамку. Аутентификация - это когда ты можешь точно определить, что я Васян. Авторизация - когда у меня есть право оттопырить твою мамку.
0. Записывай любой идентификатор пользователя, храни его только на сервере. Идентификатор сессии можешь хранить в куке.
1. Если он поставил галку, то создай запись на сервере с рандомным идентификатором (GUID подойдет) и в этой записи укажи, что это за пользователь. Никакой хеш не нужен.
2. Только если нет сессии. Делаешь это в тот момент, когда тебе надо определить - послать клиента в окно пользователя или в окно аутентификации.
3. См. 1. Если уникальный идентификатор имеет соответствующую запись на сервере - читаешь её. Если куки содержит идентификатор несуществующей записи - стираешь куки и перенаправляешь пользователя на страницу авторизации.
0. Авторизированным считается, когда в сессии имеется логин.
1. При авторизации (если юзер поставил галку "запомнить меня"), помимо сессии, записываем в куки рандомный хэш и логин юзера, а также записываем этот хэш в БД к этому логину.
2. Всегда проверяем ниличие кук с логином и сессией
3. Если они есть. То проверяем равен ли хэш из кук хэшу из БД
4. Если равен - создаем сессию = авторизировали
Какие подводные? Что я упускаю?