Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
2 / 2 / 0
Регистрация: 18.05.2012
Сообщений: 107

Регистрация и авторизация

28.04.2015, 18:07. Показов 1317. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!

Последние 4 часа искал в интернете инструкции по созданию нормальной регистрации и авторизации.
Исходя из того, что я начитался (а это: "в куках не хранить пароль и логин" и т.д.), пришел к выводу: хорошей готовой регистрации для себя я не нашел.

Т.к. с PHP я все еще на "Вы", снова прошу помощи у жителей форума =)

Суть задачи такова: зарегистрировать пользователя, отправив его данные в БД.
Пользователь должен после регистрации ввести свои зарегистрированные данные и авторизоваться.
На сайте будет уйма данных, которая выводится из строки пользователя. При авторизации, как я понимаю, сайт должен понимать, из какой строки в БД брать все эти данные, и с какой строкой работать все это время.

По сути, это сессии, так?

Очень хочу научиться делать это все, но время поджимает.
Если кто может - подскажите, где найти готовое решение, либо ткните меня носом, где разобраться с этими сессиями (нужно же занести пользователя в сессию, задать ей время жизни, и сделать кнопку разрушения сессии (выход)?).

P.S.: для регистрации и авторизации самый оптимальный вариант - делать хеш, забивать его в куки и БД? А потом сверять? Или?..
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.04.2015, 18:07
Ответы с готовыми решениями:

Авторизация и Регистрация
Здравствуйте. Наконец появился готовый скрипт авторизации и регистрации. Только одна проблемма. Если пароль не совпадает ,показывает пустую...

Регистрация и авторизация
Новичок. Делаю регистрацию и авторизацию через куки с двойным хешированием md5. Хеш на сервере и хеш в куки совпадают, но тем не менее,...

Регистрация/авторизация
Не могу нормально сделать регистрацию и авторизацию на сайте. Как то все перепуталось, и теперь когда я пытаюсь зарегистрироваться, он не...

17
F57
 Аватар для F57
68 / 68 / 23
Регистрация: 17.02.2015
Сообщений: 397
28.04.2015, 18:49
В гугле миллион решений..
0
930 / 846 / 190
Регистрация: 28.11.2013
Сообщений: 3,621
28.04.2015, 19:58
Сессии – это дополнительная нагрузка. Фраза "в куках не хранить пароль и логин" вовсе не означает "куки использовать не нужно". Ну, логин еще можно хранить в куках, холя лучше числовой id. Даже пароль можно, но очень сильно "засоленный", хотя лучше какой-нибудь редко повторяющийся сложный ключ, чтобы его можно было при необходимости сбрасывать (повторно генерировать) на сервере без смены пароля. Лично я обычно храню id и ключ в одной строке, тем самым добиваясь полной уникальности ключа в отдельно взятый момент времени и упрощения в том плане, что работаю с одним значением в куках, а не с двумя, хотя ключ в общем получается сложнее и часто содержит избыточную информацию на стороне сервера (id), пусть даже и в каком-либо измененном (закодированном) виде.
0
2 / 2 / 0
Регистрация: 18.05.2012
Сообщений: 107
28.04.2015, 20:20  [ТС]
Цитата Сообщение от miketomlin Посмотреть сообщение
Сессии – это дополнительная нагрузка.
Цитата Сообщение от Владислав В. Посмотреть сообщение
На сайте будет уйма данных, которая выводится из строки пользователя.
По этому сессия очень нужна.

Цитата Сообщение от miketomlin Посмотреть сообщение
Фраза "в куках не хранить пароль и логин" вовсе не означает "куки использовать не нужно". Ну, логин еще можно хранить в куках, холя лучше числовой id.
Не говорил, что куки плохи. И они тоже будет нужны.
Числовой ID, логин и засоленный пароль - вообще отлично. Только как солить то? Я в этом толком не разбираюсь ЕЩЕ. По этому прошу помощи тут. В принципе, все тоже зависит от сайта? У меня там не будет хранится денег, секретных данных государства, или чего-то ценного. Однако от горе-взломщиков, у которых руки чешутся, хочется спастись. Так бы, в принципе, написал и регу и авторизацию. Но без какой-либо безопасности. Единственное - покрыл бы двойным md5 (это же и есть что-то типа "соли"?).
0
F57
 Аватар для F57
68 / 68 / 23
Регистрация: 17.02.2015
Сообщений: 397
28.04.2015, 20:42
php md5()
0
 Аватар для Lazy_Den
3325 / 2845 / 1423
Регистрация: 15.01.2014
Сообщений: 6,170
28.04.2015, 20:53
Цитата Сообщение от Владислав В. Посмотреть сообщение
Единственное - покрыл бы двойным md5 (это же и есть что-то типа "соли"?).
md5() - это один из простых алгоритмов хеширования и использовать его для паролей - далеко не лучшая идея. Рекомендуется шифрование по алгоритму blowfish. И "двойное покрытие md5" - к соли никакого отношения не имеет, но подробней об этом лучше прочитать, чем пересказывать.
0
930 / 846 / 190
Регистрация: 28.11.2013
Сообщений: 3,621
28.04.2015, 20:53
Цитата Сообщение от Владислав В. Посмотреть сообщение
По этому сессия очень нужна.
Обычно все в БД хранится. В любом случае в сессиях постоянно хранить данные пользователя не получится.

Цитата Сообщение от Владислав В. Посмотреть сообщение
Не говорил, что куки плохи. И они тоже будет нужны.
Числовой ID, логин и засоленный пароль - вообще отлично. Только как солить то? Я в этом толком не разбираюсь ЕЩЕ. По этому прошу помощи тут. В принципе, все тоже зависит от сайта? У меня там не будет хранится денег, секретных данных государства, или чего-то ценного. Однако от горе-взломщиков, у которых руки чешутся, хочется спастись. Так бы, в принципе, написал и регу и авторизацию. Но без какой-либо безопасности. Единственное - покрыл бы двойным md5 (это же и есть что-то типа "соли"?).
Числовой id – это альтернатива логину для хранения в куках. В сессиях можете явно хранить логин (т.к. переменные сессий хранятся на стороне сервера, а не на стороне клиента), правда, по числовому id поиск обычно происходит быстрее. Сложность посола зависит исключительно от развитости вашей фантазии. md5 и т.п. не помешает для полного изменения внешнего вида простых паролей (коротких, с повторяющимися фрагментами и т.п.). Правда, богатая фантазия не избавит вас от недостатков "засоленных" паролей.
0
2 / 2 / 0
Регистрация: 18.05.2012
Сообщений: 107
28.04.2015, 21:31  [ТС]
Цитата Сообщение от Lazy_Den Посмотреть сообщение
Рекомендуется шифрование по алгоритму blowfish
А смогу ли я разобраться в нем, если никто не подскажет? =)

Цитата Сообщение от miketomlin Посмотреть сообщение
Обычно все в БД хранится. В любом случае в сессиях постоянно хранить данные пользователя не получится.
У меня все в БД и храниться.
Я так понимаю, нужно будет хранить либо в сессии, либо в куках ID пользователя, и все mysql запросы прогонять через этот ID?

Если не понятно выражаюсь: пользователь с ID 5 логинится на сайте. Пользователь заходит в пункт "статистика" и видит всю свою статистику, которая лежит в БД в строке с ID 5. И вся работа сайта должна исходить и работать именно с этой строкой в БД.

Что то типа "SELECT * FROM users WHERE id='.$_SESSION['id'].'" - и выносятся все значения в массив.

P.S.: блондинкой себя чувствую
0
 Аватар для Lazy_Den
3325 / 2845 / 1423
Регистрация: 15.01.2014
Сообщений: 6,170
28.04.2015, 21:39
Цитата Сообщение от Владислав В. Посмотреть сообщение
А смогу ли я разобраться в нем, если никто не подскажет?
А почему бы и нет? Для начала, войти в курс дела, почитав о Безопасное хэширование паролей . А потом перейти непосредственно к рассмотрению способов хэширования. Если после прочтения возникнут вопросы, то подсобим уже тут.
0
930 / 846 / 190
Регистрация: 28.11.2013
Сообщений: 3,621
28.04.2015, 23:35
Цитата Сообщение от Владислав В. Посмотреть сообщение
У меня все в БД и храниться.
Я так понимаю, нужно будет хранить либо в сессии, либо в куках ID пользователя, и все mysql запросы прогонять через этот ID?
Это да. Тогда не понятно, что вы так за сессии уцепились. Сессии полезны в двух случаях:
1) когда куки в браузере отключены (такое даже рассматривать не хочу, т.к. в этой ситуации в сессиях используется достаточно разумный и один из немногих возможных подход с изменением адресации, но по нынешним временам не слишком актуальный);
2) когда нужно хранить большое число переменных в нескольких экземплярах на стороне сервера, дабы скрыть их состав и содержимое от клиента; информацию о пользователе можно спокойно хранить в соответствующей записи БД, а "временные" данные (помимо ключа) в тех же куках или даже некоторые данные уместно передавать в адресе (например, я часто передаю номер текущей страницы какого-то многостраничного перечня в адресе в GET-параметре даже при переходе на страницу, которая не особо нуждается в этом параметре, чтобы впоследствии по значению этого параметра вернуться к перечню именно на ту его страницу, которая указана в упомянутом GET-параметре).

Цитата Сообщение от Владислав В. Посмотреть сообщение
Что то типа "SELECT * FROM users WHERE id='.$_SESSION['id'].'" - и выносятся все значения в массив.
Примерно так, только я обычно id беру из кук
0
2 / 2 / 0
Регистрация: 18.05.2012
Сообщений: 107
29.04.2015, 00:12  [ТС]
Цитата Сообщение от miketomlin Посмотреть сообщение
Примерно так, только я обычно id беру из кук
А время "кук" сделать возможно? К примеру, что бы жили они двое суток, после чего заново логиниться нужно было бы.
0
930 / 846 / 190
Регистрация: 28.11.2013
Сообщений: 3,621
29.04.2015, 00:44
А почитать, чтобы не задавать таких простых вопросов, возможно?

Добавлено через 4 минуты
Подсказка: php setcookie
0
601 / 468 / 73
Регистрация: 22.01.2009
Сообщений: 1,180
Записей в блоге: 1
29.04.2015, 06:44
Цитата Сообщение от Владислав В. Посмотреть сообщение
Что то типа "SELECT * FROM users WHERE id='.$_SESSION['id'].'" - и выносятся все значения в массив.
как раз это и можете хранить в сессии. спокойно. выдрали все, из базы, при авторизации, положили в массив $_SESSION, и при следующем исполнении скрипта все останется в ней же. Клиенту отправится только лишь session_id, которая ничего ему не скажет и в ряде случаев (когда для генерации рандома применяются криптографически стойкие алгоритмы) подобрать ее невозможно.
Правда, хранить всю информацию о пользователе стоит или нет, в сесссии -- решать вам, и зависит от приложения. Просто есть такой прикол, что например, вы, как администратор, решили удалить или заблокировать пользователя, в базе будет находиться status=blocked, а в сессии status=good_man. В результате вам при каждом таком изменении пользователя надо либо обновить его данные в сессии, либо все равно при каждом запросе делать выборку из базы на предмет того, заблокирован он или нет.
Насчет того, что такое сессии в принципе, и зачем они нужны (также затронуты некоторые аспекты безопасности), если вам это интересно: Условие "Вошедший пользователь". Улучшить безопасность
Отдельно на тему безопасности кук я объяснял этому же человеку в соседнем треде: Кража куки

Цитата Сообщение от miketomlin Посмотреть сообщение
Сессии полезны в двух случаях:
1) когда куки в браузере отключены
Без введения дополнительных механизмов (ручная установка session_id) они так же будут бесполезны. Вообще, для простоты, для Владислав В., проще всего принять, что сессии -- это просто надстройка над куками.

Не по теме:

ну а если по-взрослому, то сессии и куки совершенно параллельные понятия. Cookies -- это механизм HTTP-протокола. А сессии -- это состояние "канала связи", и Cookies для них -- это как один из механизмов "транспорта" между клиентом и сервером в конкретном протоколе: HTTP.
Это как если бы я у вас занял N-ную сумму денег на год. За год вы естественно, можете что-то забыть, но записали этот факт в блокнот (состояние). А через 10 месяцев я уехал бы в другой город (нарушен один из каналов связи: общение вживую). Но мы по-прежнему можем общаться по телефону (передавать session_id в GET-параметре). И в такой ситуации ваше утверждение, что вы по-прежнему можете записывать и считывать информацию в/из блокнот(а) обо мне как-то очевидно, не находите?



Цитата Сообщение от miketomlin Посмотреть сообщение
Примерно так, только я обычно id беру из кук
судя по предыдущим постам, не думаю, что вы храните куки в виде user_id=123, иначе это прямая и легкоэксплуатируемая угроза безопасности. Подозреваю, что вы все же берете user_id из сессии.

Цитата Сообщение от Lazy_Den Посмотреть сообщение
md5() - это один из простых алгоритмов хеширования и использовать его для паролей - далеко не лучшая идея.
Раскрою немного тему.
Вообщем-то идея и не самая плохая. Мы не говорим о проектировании систем класса А+, ТС как бы на это немного намекнул в самом начале. Да, в md5 нашли коллизии, да, его легко перебирать на gpu. Тем не менее, чтобы взломать пароль (а особенно, соленый, да еще и с неизвестной солью, как, например, описано тут), потребуется примерно 2123.4/2 операций (с учетом "дней рождений"), по известным мне последним оценкам (ссылки на саму работу приложены). Таким образом, MD5 небезопасен для подписи сообщений, для хеширования файлов. Но что касается восстановления сообщения по хешу, то, на практике, оно все еще достаточно трудоемкое.

Не по теме:

Раземеется, если не использовать пароли вроде 123456


Однако, простота его перебора позволяет арендовать сервера для взлома конкретного хеша, по относительно недорогой цене. Вот тут приводят цену в 2000 баксов. Поэтому, если есть возможность, почему бы не применить более "крутые" хеши. Начиная с sha{256,384,512} и sha3 (относительно недавно приняли), и заканчивая scrypt, если вы ну совсем параноик Ну и есть еще Whirlpool, и некоторые другие. Битность у них высокая, и атаки на них маловероятны, в обозримом будущем.
Однако, я не уверен, что шифрование -- это хорошая идея. Пароль по своей природе таков, что его, в идеале, никто не должен знать, кроме пользователя, даже админ. Поэтому, на мой взгляд, необратимое преобразование нажеднее. Если говорить о шифровании, то вам еще придется куда-то сохранять и ключ... а какой смысл хранить ключ и шифр в одном месте? Если злоумышленник получит доступ к базе, то он получит доступ и к этим ключам.
Или вы собираетесь его в файле хранить? Ну это все ок, когда уязвима только база, но неуязвима ФС, и когда правильно выставлены разрешения для пользователя СУБД... Однако, опять же можно организовать подобный перебор, поскольку злоумышленник знает начальное сообщение и закодированное. С учетом той же простоты blowfish, вы не сильно-то ему жизнь усложнили.

Не по теме:

еще одно лирическое отступление. да, я в курсе, что длина ключа больше. До 448 бит. Но! Как мы его будем генерировать? Или админ сам будет его вводить вручную? В первом случае, как бы вам опять же не попасться в ловушку mt_rand. Во втором же случае, алфавит будет ограничен печатаемыми символами (для простоты, положим, 64=26 символа в алфавите), ну и админ -- тоже человек, может не знать или забыть о каких-то тонкостях, и вместо 56-ти символов ввести, скажем, 22. Тогда количество всех возможных ключей (с учетом алфавита в 64 символа) будет 2622=2132. Учитывая парадокс дней рождений, получим примерно 266. А это уже всего-то на пару порядков выше, чем 2123.4/2=261.7. То есть такой ключ практически идентичен md5 (заплатить в два раза больше и подождать не день, а 4 -- и получим свой ключ, зато от всех! паролей на сервере)


Ну а если вас все эти сложности не пугают, и вам всенепременнейше необходимо обратное преобразование, то почему бы тогда не взглянуть на более современные AES, Twofish или Threefish? (по крайней мере первые два в mcrypt точно есть, AES также можно нагуглить и в чисто пхп-шной имплементации)

Не по теме:

в качестве альтернативы предлагаю Salsa20/ChaCha20. Но его нужно применять аккуратно, как и любой поточный шифр

0
930 / 846 / 190
Регистрация: 28.11.2013
Сообщений: 3,621
29.04.2015, 15:06
Цитата Сообщение от NEbO Посмотреть сообщение
судя по предыдущим постам, не думаю, что вы храните куки в виде user_id=123, иначе это прямая и легкоэксплуатируемая угроза безопасности. Подозреваю, что вы все же берете user_id из сессии.
Храню в куках, но в неявном виде. Как знание id влияет на безопасность?
0
601 / 468 / 73
Регистрация: 22.01.2009
Сообщений: 1,180
Записей в блоге: 1
29.04.2015, 15:37
miketomlin, вы предусмотрели вариант, что ваш алгоритм сокрытия id раскроется (security from obscurity -- это плохо, вы же понимаете), и некая Труди сделает user_id равным f(1), ну или, в общем случае, f($admin_user_id), где f -- функция вашего преобразования в "неявный вид". не будет ли она авторизована под этим user_id?
0
930 / 846 / 190
Регистрация: 28.11.2013
Сообщений: 3,621
29.04.2015, 16:05
Цитата Сообщение от NEbO Посмотреть сообщение
вы предусмотрели вариант, что ваш алгоритм сокрытия id раскроется (security from obscurity -- это плохо, вы же понимаете)
Это отлично понимаю (кстати, обращаюсь к ТС-у, это вторая причина не использовать "засоленные" пароли). Нет цели сделать определение id какой-то невыполнимой задачей, поэтому даже допускаю хранение id в куках в явном виде, хотя сам обычно этого не делаю. Для меня числовой id – это ключ для быстрого поиска в БД или в каком-то другом хранилище, не более того.

Цитата Сообщение от NEbO Посмотреть сообщение
и некая Труди сделает user_id равным f(1), ну или, в общем случае, f($admin_user_id), где f -- функция вашего преобразования в "неявный вид". не будет ли она авторизована под этим user_id?
Естественно, нет. Как я написал выше, для авторизации я использую сложный ключ доступа, никак не связанный с паролем. Для удобства могу разбавить ключ id-шником, но это некоим образом не сказывается на значимости основной части ключа при авторизации.
0
601 / 468 / 73
Регистрация: 22.01.2009
Сообщений: 1,180
Записей в блоге: 1
29.04.2015, 16:55
Цитата Сообщение от miketomlin Посмотреть сообщение
кстати, обращаюсь к ТС-у, это вторая причина не использовать "засоленные" пароли
засоленные пароли применяются не для этого. у них всего лишь одна цель -- отбиться от атаки по rainbow tables (ну и по различным базам данных, в общем случае) на конкретный хеш, когда тот известен злоумышленнику.
Цитата Сообщение от miketomlin Посмотреть сообщение
Для меня числовой id – это ключ для быстрого поиска в БД или в каком-то другом хранилище, не более того.
то есть после поиска по id в базе вы все равно сверяете, тот ли это пользователь? не проще ли пользоваться пхп-шным механизмом сессий?
Цитата Сообщение от miketomlin Посмотреть сообщение
я использую сложный ключ доступа
он один на весь сайт? если да, то есть вектор атаки по статистике (несколько разных логинов->паролей), если нет, то вам все равно придется как-то связывать его с пользователем...
мне что-то подсказывает, что вы либо реализовали вручную свой механизм сессий, либо ваша система является небезопасной, либо я вас не до конца понял. напишите мне в скайп (в профиле у меня указан), если вам интересно.
0
930 / 846 / 190
Регистрация: 28.11.2013
Сообщений: 3,621
29.04.2015, 21:52
Да, естественно, после поиска по id проверяю корректность ключа авторизации. Сессиями тоже пользуюсь, но, видимо, не так часто, как другие. Действительно есть что-то общее с сессиями, но в качестве основного хранилища обычно выступает БД, а не файлы. Доп. нагрузка на БД не тревожит, ведь основной смысл как раз-таки в том, чтобы переложить нагрузку с файлов на БД. Естественно, ключ у каждого пользователя свой (есть вероятность появления дублирующихся ключей, но она крайне мала, к тому же при необходимости можно объединить id с ключом, чтобы сделать его уникальным).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.04.2015, 21:52
Помогаю со студенческими работами здесь

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

Регистрация и авторизация на сайте
Я новичок в сайтостроение(И вот хочу узнать как в HTML,CSS как сделать авторизацию и регистрацию на сайте!?Или это только в PHP?:(:-|

Регистрация и авторизация пользователей
ребята ситуация следующая в php я просто ноль необходимо сделать лабу написать клиент сервер на php и привязать БД если у кого есть...

session_start(); [PHP регистрация и авторизация]
Столкнулся с проблемой как сделать старт сессии? Пишу session_start(); Ошибка. + как сделать если успешно зарегистрировался то тебя...

регистрация и авторизация на php mysql
Регистрируюсь и все заносится в базу данных, но при входе на сайт все равно выводится что я захожу как гость. Почему? Как это исправить? ...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru