@TeslaFeo Если я правильно понял, при авторизации, сперва я проверяю, что пользователь есть в базе или нету если все хорошо, создаю СЕССИЮ. PHP: $_SESSION['user_id'] = $userId; //Тут делаю перенаправленные. А вот как открыть и закрыть пользователю страницу не пойму пробую делать так, что бы спрятать регистрацию и аторизацию. PHP: <?php if(isset($_SESSION['user_id'])):?> Авторизован <?php else :?> <li><a href="auth.php" title="Войти">Войти </a></li> <li><a href="reg.php" title="Регистрация">Регистрация</a></li> <?php endif; ?> Но почему то он не прячет их( Что так идет не так. Да не как.
- дистанционное благословение базы данных - снятие сглаза с IP адреса - снятие порчи с обработчиков форм - наложение астральной защиты на панель администратора
@mahmuzar Спасибо, за поддержания в данной теме) Лучше идти медленно не спеша и уверенно не спотыкаясь) То что выше написал пользователь @TeslaFeo ?
@TeslaFeo Так с шифрованиям пароля я разобрался, в принципе, а вот как на счет дополнительного хеша от пароля и соли? Вот делаю так при регистрации PHP: //Получаем ХЕШ соли ВОТ ЭТОТ КУСОК Я ПРАВИЛЬНО СФОРМИРОВАЛ? if (password_needs_rehash($hash, PASSWORD_DEFAULT, ['cost' => 12])) { $hash = password_hash($password, PASSWORD_DEFAULT, ['cost' => 12]); } //Солим пароль $pass = password_hash($_POST['pass'], PASSWORD_DEFAULT); $sql = 'INSERT INTO `users` (`login`, `email`, `pass`, `salt`,`active_hex`, `role`, `date_reg`) VALUES (:login, :email, :pass, :salt, "'.$hash .'", 3, NOW())'; $stmt = $pdo->prepare($sql); $stmt->bindValue(':login', $_POST['login'], PDO::PARAM_STR); $stmt->bindValue(':email', $_POST['email'], PDO::PARAM_STR); $stmt->bindValue(':pass', $pass, PDO::PARAM_STR); $stmt->bindValue(':salt', $salt, PDO::PARAM_STR); $stmt->execute(); И вот что получается после запроса, такого: На сколько я правильно все сделал? И стоить ли так все хранить в базе или можно обойтись одним зашифрованным пароле?
Короче вопрос такой, как создать соль, и хеш для пароля, если я пароль уже зашифровал. А хеш и соль не могу. как это сделать?
У тебя у самого глаза не кровоточут когда ты читаешь это говно ? Поставь себе шаблонизатор, хоть какой-нибудь, хоть сам напиши. Ты забиндил всё кроме хеша, почему ? Он такой же стринг как и все. А по дефолту хеш это что ? Есть инициализация переменной кроме этого блока условия ?
Это не обязательно ж. Ну и да, PHP - изначально шаблонизатор. Хочешь ты или нет, а динамический контент ты без echo или выключения режима php не сделаешь. Или ты думаешь, что шаблонизаторы как-то иначе работают? Фиг. У них внутри все то же самое. При виде их кода тоже будешь ругаться, что авторы могли бы и шаблонизатор заюзать? Автор изучает не это в данный момент. Эта вот истерия по поводу "нельзя чтобы HTML и PHP были в одном файле" уже давно превратилась в какое-то жуткое суеверие. Что, если у тебя где-то в коде есть echo "<div>", то это говно, код проклят, а ты - чмошник. Причем страх перед HTML релизиозный, а не объективный. И чем меньше человек знает про причины этого призыва к разделению, тем больше он страдает этой херней. Даже не задумываясь. Вообще. Боятся так, что начинают городить нереальные костыли, ЛИШЬ БЫ HTML ИЗБЕЖАТЬ. Простенькие конструкции выводят через нереальные жопы с инклудами статики, где регуляркой что-то ищут и подменяют, пересохраняют, ЛИШЬ БЫ НЕ БЫЛО HTML В КОДЕ. Самоцель. Без объективной причины. Вещь в себе. Люди готовы сколь бы то ни было угодно усложнять логику вывода, ЛИШЬ БЫ HTML НЕ БЫЛО В КОДЕ. И считают, что такие решения красивы и изящны. Потому что там нет HTML. И пофигу, что код, в итоге - полумертвое несопровождаемое кладбище костылей. Выводить HTML в PHP можно. Ничего зазорного в этом нет. Если нужно - на здоровье. Если у тебя есть функция get_table($arr), принимающая массив и отдающая HTML-таблицу, оперирующая, огосподи, этим самым HTML-ем, это нормально. Если там есть большие разрывы в коде, то заменять echo на отключение режима PHP - это нормально. Это не говно, не стыд, и глаза не кровоточат. Говно, стыд и боль в глазах, это когда страница потоком идет в виде мешанины HTML и PHP, где это лишено здравого смысла и логики, простынь с макаронами, когда PHP просто посреди страницы втыкается там, где нужно чуть интерактива завести. С внезапными безусловными инклудами посреди страницы. Причем, часто втыкается через альтернативный синтаксис. Привет, Битрикс! Вывод. Не надо замыкаться на суевериях и где-то услышанных супер-мудростях, искаженных сломанным телефоном. Нужно подходить ко всему с головой. Это та же история, что с апачем, который говно и тормозит и хуже всего на свете, потому что...потому что так все говорят, не вдумываясь. А на деле он работает быстрее всех, а слухи про тормоза и убогость пошли от того, что хомячки не понимают проблемы медленного клиента, решаемого реверс-проксей, но чот гдет слышали, что апач вот тупит, а нжинкс не тупит при таких же условиях. И понеслась. И вот у нас новая серверная религия, основанная на слухах и непонимании предметной части. Если в коде есть здравый смысл, если есть логика. Если есть понятие "архитектуры", то пофигу что там с чем смешивается, если это не создает проблем.
@Abyss Вообще у меня вопрос был, правильно ли. Смотрите скрины выше. Ну хеш по дефолту это активехеш в базе. НУЖНО ли создавать соли и хеш для пароля? --- Добавлено --- @Fell-x27 С тобой согласен, я изучаю в данный момент другое))) Пользовательскую часть)))
@Fell-x27 Подскажите мне пожалуйста, нужно ли еще 2 таблицы создавать, для хеша и соли в пароль? Картинку смотрите ниже:
используя функцию password_hash ты в результате одной строкой получаешь хэш и соль, всего одна строка. Ты не путаешь таблицы с столбцами случайно?
@denis01 Ура ответили, теперь понял) что с генерированная строка имеет уже и хеш и соль. А вот это и будет зашифрованный пароль? А что на счет моих еще 2х таблиц скриншот выше, их можно удалять получается? Просто я использовал md5 и создавал для них таблицу для соли и для активехеш. Например я отсылаю пользователю письмо на почту что бы он активировал его, и беру из таблицы активехеш, данные, а как же мне взять теперь активехеш если, у меня и хеш и соль в одной строке? Нет я не путаю таблицы со столбцами, В таблице мы создаем столбцы, а в столбцах мы заполняем данные)
@_ne_scaju_ для активации тебе не нужны соли или хэш. Ты когда хочешь активировать пользователя (удостовериться что он имеет доступ к почте которую указал), ты можешь создать таблицу с id пользователя и случайной строкой. В ссылку указать эту случайную строку, по ней он сможет активировать, так как ты по этой случайной строчке найдёшь в таблице его id пользователя. Тут могут ввести в заблуждения такие вещи как создание случайной строки, потому что её обычно так для красоты хэшируют например в md5, чтобы получить строку из 32 символов или сколько там. Вот например https://secure.php.net/manual/ru/function.random-bytes.php для получения случайных байт, но их просто в ссылки не передать, там есть пример как превратить в ASCII например
@denis01 Читаем) Вот пароль зашифровал с помощью password_hash. Дальше это зашифрованный пароль не трогаем. Дальше создаем таблицу а в ней 2 поля это id пользователя и с генерированная строка. При регистрации я ее тоже должен указать в запросе что бы она с генерировалась для одного пользователя разная срока. Дальше когда я отправляю пользователю письмо он активирует аккаунт по этой сроке что с генерировалась. Дальше если все верно активируем пользователя то-есть таблица status со значением 0 и 1 где один это активировал аккаунт Дальше я при авторизации должен только проверить пароль, который в базе Вот на сколько я правильно понял??? Вот еще одно хочу спросить: А как же изменить пароль или восстановить? Первое я беру эту с генерированную строку которая для каждого пользователя уникальная Дальше в зависимости от реализации по емаил или логину указываем в поле и отсылаем письмо Дальше если все хорошо меняем на новую с генерированную строку для каждого пользователя и генерируем новый пароль для пользователя шифруем его Правильно ли я понял все это?
в таблице не забудь id пользователя ну чтобы изменить, с генерируй новый хэш с солью и замени старый новым, восстановление как активация, пусть подтвердит свою почту и дай возможность вписать новый пароль
@denis01 А если не создавать таблицу, а сразу в таблице с пользователями там где id уже есть создать поле для генерируемой строки. И по нем уже делать подтверждение регистрации? Или это нагрузить сервер? На счет второго аналогично что и активации я понял) --- Добавлено --- @Fell-x27 По подробней пожалуйста!
Можно и так, нужно будет добавить поле, что строка для активации уже использована, так как если это было бы в отдельной таблице, ты мог бы просто удалить строку
@denis01 Упс тут я в ступоре) Мне нужно будет удалять из базы эту с генерируемую строку, как только этот пользователь активировал аккаунт? Пожалуйста объясните не много яснее для меня) Как бы это лучше выглядело бы? Просто так придется создать еще одну таблицу и 2 поля). Например он подтвердил и что строку мне надо удалить будет? То-есть после активации делается сразу запрос на удаления этой строки. А как же восстановления пароля? Если мы эту с генерированную сроку удалили? Как нам восстановить?
можно удалить или пометить что её использовали и по ней уже нельзя было опять менять пароль. Да, можно сразу Для восстановления генерируешь ещё одну запись в таблице, можешь их помечать, для восстановления и активации аккаунта, даже время им жизни можно задать, например 24 часа, потом уже не принимать её
@denis01 А я думал так: Если пароль утерян то: Первое он его хочет восстановить, то-есть указывает емаил Второе ему на эмаил приходит письмо с той генерируемой строкой, которая сейчас в базе Третье он меняет пароль, заменяется эта строка которая в базе, на новую строку с генерируемая для каждого пользователя своя строка Четвертое если ему опять нужно восстановить пароль, то новая с генерируемая строка которая в базе, придет в письме, и так далее. Может так лучше будет? Или это не безопасно? --- Добавлено --- @denis01 А подскажите мне как мне эту строку создать какие есть хороши функции или уже готовые примеры, что бы была эта строка для каждого пользователя разная. И для активации потребовалась, и для восстановления пароля)