![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
Aliance |
|
|||
![]() I ♥ <script> ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: нет Всего: 137 |
Доброго времени суток всем!
Я задался таким вопросом: как написать наиболее удачную регистрацию/авторизацию пользователей на моем сайте. Прежде всего я думал о том, по какому полю следует идентифицировать пользователя. Т.к. на моем сайте подразумевается регистрация как физ. лиц, так и юр., то я решил сделать не ФИО или ник идентифицирующем полем, а адрес электронной почты. Если кто-то считает, что я ошибся, просьба обосновать/предложить свое решение. Далее, встал более глобальный вопрос: как и куда запоминать, что пользователь "успешно авторизировался"? Сперва в голову пришла стандартная идея хранения в куках логина (в нашем случае e-mail`а и зашифрованного пароля). Так же в БД можно хранить "соль" и т.д. и т.п. Но затем мне в голову пришла идея, а то если воспользоваться более продвинутым (?) алгоритмом хранения авторизации - сессии. Что если назначать пользователю, который успешно ввел свои данные, уникальную сессию и хранить в куках именно ее? Тогда можно не меняя пароля, сбросить данную сессию. А можно даже устанавливать ей свое время жизни. В общем эта идея показалась мне более продвинутой. Но все же решил я посоветоваться с вами, гуру php, как считаете - какой вариант хранения оптимальнее? |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 1 Всего: 386 |
У меня рабочий e-mail, который я считал самым "надежным" уже сменился, причем безвозвратно. Самым "живучим" моим почтовым адресом стоит считать адрес на mail.ru ![]() Для Юр лиц часть бывает, что меняются секретари. У каждого может быть собственный адрес. Что делать - перерегистировать? К тому-же регистрация по адресу email - еще один способ засветить адрес для спам-рассылки. Нужно отдельно с этим бороться... -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
Aliance |
|
|||
![]() I ♥ <script> ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: нет Всего: 137 |
Данный адрес (а фактически логин) нигде показываться не будет. Он служит только для определения уникальности. Но в принципе, повторюсь, от этой идеи можно отказаться обратно в сторону обычного логина. А что делать с моим главным вопросом?
|
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 1 Всего: 386 |
Если нужна строчка -- сейчас у нас 25 юзеров на сайте, то нужно завести таблицу - "Юзеры online" с датой последней активности и sessid.
Всю полезную юзеру информацию хранить в сессии. Обычно этого хватает Это сообщение отредактировал(а) ksnk - 4.5.2009, 12:30 -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
enof |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 837 Регистрация: 23.1.2009 Где: Санкт-Петербург Репутация: нет Всего: 35 |
Когда читал, растерялся маленько. А чем стандартный механизм сессий не подходит? |
|||
|
||||
gcc |
|
|||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: нет Всего: 17 |
сессию можно привязывать к ip, оно по-моиму по-умолчанию редко где привязыается? и при входе чтобы можно было задать время жизни сессии...
если кто-то украдет сессию, то у себя на компе может под логином зайти, тот тут можно привзять айпи по которому она была привязана (но айпи тоже можно вынести любой наружу, так что хз) на движках болиших, еще сделано чтобы форум переспрашивал пароль админа, тогжа когда админ заходит в админку, через какое-то время, если админ не был активный... еще модно использовать JSON http://ua.php.net/manual/en/ref.json.php Это сообщение отредактировал(а) gcc - 4.5.2009, 14:24 |
|||
|
||||
Aliance |
|
|||
![]() I ♥ <script> ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: нет Всего: 137 |
Мы не о том совсем.
Если вас смущает слово сессия, я могу назвать это "уникальной строкой, идентифицирующей пользователя". Не суть. Вопрос такой: что лучше А или Б? А) хранить в куках логин/пароль и проверять при каждом заходе их. тогда если украдут куки - могут узнать и пароль. тогда администратор сайта не может без ведома пользователя обезопасить его (ибо если сменит ему праоль, пользователь об этом узнает) Б) хранить в куках уникальную строку тогда, можно менять ее каждые сутки, что снизит шансы на ее кражу (а даже если она была сворована и вор потихому сидел под чужой уник. строкой, то не больше суток). тогда же при краже вор НЕ УЗНАЕТ сам пароль пользователя Мне кажется второй вариант лучше, но почему везде используется первый? |
|||
|
||||
gcc |
|
|||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: нет Всего: 17 |
второй лучше, где используется первый?
хотя там можно закриптограифровать пароль, хорошо "посолить" http://ru.wikipedia.org/wiki/Радужная_таблица http://www.usenix.org/events/usenix99/prov...tml/node10.html Это сообщение отредактировал(а) gcc - 4.5.2009, 17:54 |
|||
|
||||
Aliance |
|
|||
![]() I ♥ <script> ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: нет Всего: 137 |
Как это где? На данном форуме, например. То есть разработчики IPB из года в год выбирают худший вариант?
|
|||
|
||||
realPROme |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 123 Регистрация: 20.12.2006 Репутация: нет Всего: нет |
Aliance, сайт должен запоминать пользователя? т.е. автоматическая авторизация при последующем заходе нужна? если да - то первый вариант, если нет - стандартный механизм сессий в пхп
|
|||
|
||||
Aliance |
|
|||
![]() I ♥ <script> ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: нет Всего: 137 |
Должен запоминать. Но какая разница сайту что будет хранится в куках - логин или сессия. НЕ СТАНДАРТНАЯ СЕССИЯ, а сессия (или уникальный номер авторизации, если кому угодно) хранится в куках. Я не знаю как еще объяснить, если уже третий раз Вы пишете про стандартную session_start() - я говорю НЕ ПРО НЕЕ.
За примером далеко ходить не нужно - Zend Framework предлагает авторизацию, основанную именно на таком механизме. |
|||
|
||||
Elfet |
|
|||
![]() Белый и Пушистый ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 3776 Регистрация: 2.4.2003 Репутация: нет Всего: 16 |
Я всегда делаю так, мне так больше нравится в выглядит безопаснее. Украсть её можно, но вот только уже не хэш пароля. ![]() |
|||
|
||||
nerezus |
|
|||
![]() Вселенский отказник ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3330 Регистрация: 15.6.2005 Репутация: нет Всего: 43 |
Хранить логин и хэш. |
|||
|
||||
Elfet |
|
|||
![]() Белый и Пушистый ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 3776 Регистрация: 2.4.2003 Репутация: нет Всего: 16 |
Б - мне кажется лучше потому что:
- идентифицировать кто это по хэшу можем только мы - меньше ненужной информации в куках - если всё же хэш украли, то войдя заново в профиль хэш меняется |
|||
|
||||
Aliance |
|
|||
![]() I ♥ <script> ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: нет Всего: 137 |
nerezus, аргументация?
Elfet, спасибо. Тоже придерживаюсь этого варианта. |
|||
|
||||
nerezus |
|
|||
![]() Вселенский отказник ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3330 Регистрация: 15.6.2005 Репутация: нет Всего: 43 |
Aliance, аргументация "классический вариант" не подходит?
Способ простой - и пароль не хранится, и перелогиниваться при конце сессии не надо. А если по IP хочешь проверку на случай XSS, то last_ip храни в таблице пользователя. |
|||
|
||||
Aliance |
|
|||
![]() I ♥ <script> ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: нет Всего: 137 |
nerezus, а при конце жизни кук надо? Мне кажется ты написал не подумав. Время жизни у кук же есть, и она ничем не отличается от сессии. Потому что это те же куки. Так что тут однотипная модель. Только в классическом варианте есть хеш, который можно расшифровать (лично так делал много раз) (конечно соль и т.д. поможет, но не гарантированно), а там ты пароля не узнаешь. Конечно можешь украсть куки (как и в том варианте), то тогда смена сессии будет для пользователя незаметна, в отличии от принудительной смены пароля. |
|||
|
||||
nerezus |
|
||||
![]() Вселенский отказник ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3330 Регистрация: 15.6.2005 Репутация: нет Всего: 43 |
|
||||
|
|||||
bazzjr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 27.12.2007 Где: Россия, Пермь Репутация: нет Всего: 6 |
Aliance можно немного внесу свою лепту?
Я считаю вариант С, будет получше чем оба. ![]() Обьясню... т.е. при первом заходе юзера на сайт, и ввода им пароля и логина, мы создаем ХЭШь(на основе чего, тебе видней), и заносим его в БД. Далее при каждом действии юзера, этот хэшь мы прверяем, и если не то, то "пока". Пчему это лучше чем хранить в кукисах и пр.? Просто этот хэшь в БД, точно украсть не сможет никто... в отличии от сессий и кук. |
|||
|
||||
Elfet |
|
|||
![]() Белый и Пушистый ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 3776 Регистрация: 2.4.2003 Репутация: нет Всего: 16 |
bazzjr, а как идентифицировать пользователей?
|
|||
|
||||
bazzjr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 27.12.2007 Где: Россия, Пермь Репутация: нет Всего: 6 |
||||
|
||||
Elfet |
|
|||
![]() Белый и Пушистый ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 3776 Регистрация: 2.4.2003 Репутация: нет Всего: 16 |
bazzjr, в последующей работе с сайтом?
|
|||
|
||||
bazzjr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 27.12.2007 Где: Россия, Пермь Репутация: нет Всего: 6 |
||||
|
||||
Elfet |
|
|||
![]() Белый и Пушистый ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 3776 Регистрация: 2.4.2003 Репутация: нет Всего: 16 |
этот "ХЭШь" мы как-то должны хранить у юзера, либо в куках, в сессии (куках, в ссылках). Ты же говоришь:
Ты предлагаешь ещё как-то хранить его у юзера? как? |
|||
|
||||
bazzjr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 27.12.2007 Где: Россия, Пермь Репутация: нет Всего: 6 |
у юзера естественно хранить это в сесиях.
но даже если сессия будет сперта(ее трудоемко спереть в отличии от кусисов), то это ничего не даст. Так же можно для доп.защиты(для параноиков) приписывать префикс во время проверки, это дает высокую степень защиты, так как для взлома хакеру нужно выявить этот префикс, что практически невозможно. |
|||
|
||||
Elfet |
|
|||
![]() Белый и Пушистый ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 3776 Регистрация: 2.4.2003 Репутация: нет Всего: 16 |
bazzjr, это и есть вариант В
![]() |
|||
|
||||
bazzjr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 27.12.2007 Где: Россия, Пермь Репутация: нет Всего: 6 |
да, только там говорится про куки, нет розговора про сессии, и ни слова при этом про БД...
|
|||
|
||||
Elfet |
|
|||
![]() Белый и Пушистый ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 3776 Регистрация: 2.4.2003 Репутация: нет Всего: 16 |
это не суть.
|
|||
|
||||
xarakiry |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 161 Регистрация: 28.5.2008 Репутация: нет Всего: -1 |
Можно сделать так.
В таблице хранить идентификатор сессий, который записывается при каждом логине. И айпи последнего входа. При авторизации проверять ясное дело логин и пароль, и если успешно выдавать уникальный номер пользователя в зашифрованном виде. Далее , если при каждом действии пользователя на сайте, сверяется идентификатор сессии и айпи (не изменились ли они), если все норма то пользователь продолжит работу. Если нет то удалить идентификатор пользователя и предложить заново авторизоваться. --------------------
Все университеты Азербайджана на students.az |
|||
|
||||
Aliance |
|
|||
![]() I ♥ <script> ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: нет Всего: 137 |
xarakiry, у некоторых пользователей IP может менять в течении сессии.
Элфет прав, это и есть он ![]() |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 1 Всего: 386 |
Это не запрещает использовать IP для проверки авторизации. Просто для таких юзеров будет актуальна галочка "запомнить в куках мой логин-пароль". Пару раз введут пароли, потом сами найдут галочку... ну или с сайта сбегут... ![]() -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
LittleFuntik |
|
|||
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 8.8.2007 Где: Украина, Чернигов Репутация: нет Всего: нет |
А вот еще вариант, который будет довольно безопасным.
Пользователь авторизируется. В БД создается запись, где будет находится наша `sessid`,`user`,`ip`,`dt`... Строка`sessid` будет генерироваться случайным образом, например md5(логин + пароль + id). А сейчас очень важный вариант, спасающий от дос атак: очень важно прослеживать активность пользователя. Если заходов с одного IP, например, за 30 сек больше 50, то завершить работу скрипта, с соответствующим сообщение о безопасности. Или вот еще поинтереснее вариант: выделяем количество записей из БД которые были активны на протяжении 10-20 сек. Если кол-во записей преувеличивает, например 20-30, то что-то не так и выдаем сообщение, мол сервер перегружен. Примерно по такому принципу мой друг боролся с дос атаками на moto.com.ua. Вот я с Вами и поделился. Спасибо за внимание. Удачки Вам! ![]() |
|||
|
||||
nerezus |
|
|||
![]() Вселенский отказник ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3330 Регистрация: 15.6.2005 Репутация: нет Всего: 43 |
LittleFuntik, как правило на запуск скрипта ресурсов тратится больше, чем на его работу. А еще если в скрипте и проверять IP...
вобщем лишь нагрузку увеличит. Такое может прокатить лишь с массивными скриптами. Про дефекты кодерской мысли типа битрегза я не буду говорить, тут точно поможет. |
|||
|
||||
Ипатьев |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 0 Всего: 37 |
Мне кажется, что использование БД для борьбы с DOS-типом атак можно назвать только анекдотическим. Да и не бывает сейчас простого DOS, только распределенный.
По первоначальному вопросу. Хоть он и старый, но какое-то обсуждение неконкретное, по кругу об одном и том же. Разница между вариантами А и Бэ представляется мне не настолько принципиальной, чтобы об нее копья ломать. Идеи про расшифровку или кражу хэшей кажутся мне сильно гипотетическими. Разница только в количестве кук. А вот по сессиям, мне кажется, что автор смешивает два понятия: сеанса и "запоминания" пользователя для последующей автоматической авторизации. Пытаясь сделать только последний. Такой вариант имеет право на жизнь, но представляется мне гораздо менее гибким, чем классический. В нем, в частности, нельзя сделать проверку IP без неудобств для пользователя. Плюс мы теряем возможность работать при отключенных куках (да, это менее безопасно, но контроль IP дает вполне достаточную защиту). Мне представляется куда более удобным применение обоих методов. Для запоминания сеансовой информации используется "классическая" сессия до закрытия браузера, а для запоминания юзера - кука с хэшем. |
|||
|
||||
LittleFuntik |
|
|||
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 8.8.2007 Где: Украина, Чернигов Репутация: нет Всего: нет |
А если запустили робота, который только и знает, что ежесекундно создает сессии... То что делать? висим, Сервер...
Это сообщение отредактировал(а) LittleFuntik - 7.7.2009, 16:31 |
|||
|
||||
Ипатьев |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 0 Всего: 37 |
Мне кажется, обсуждение ДОС атак здесь будет оффтопиком. К регистрации пользователей всё это не имеет никакого отношения.
|
|||
|
||||
LittleFuntik |
|
|||
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 8.8.2007 Где: Украина, Чернигов Репутация: нет Всего: нет |
ох уж эти правила... "оффтоп" понимаешь-ли))) сори, Ипатьев
|
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Для профи | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |