За последние 24 часа нас посетили 50311 программистов и 1690 роботов. Сейчас ищут 1100 программистов ...

Система друзей и ее реализация php mysql

Тема в разделе "PHP для новичков", создана пользователем _ne_scaju_, 14 мар 2017.

  1. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @TeslaFeo
    Если я правильно понял, при авторизации, сперва я проверяю, что пользователь есть в базе или нету если все хорошо, создаю СЕССИЮ.
    PHP:
    1. $_SESSION['user_id'] = $userId;
    2. //Тут делаю перенаправленные.
    А вот как открыть и закрыть пользователю страницу не пойму пробую делать так, что бы спрятать регистрацию и аторизацию.
    PHP:
    1.                 <?php if(isset($_SESSION['user_id'])):?>
    2.                     Авторизован
    3.                 <?php  else :?>
    4.                     <li><a href="auth.php" title="Войти">Войти </a></li>
    5.                     <li><a href="reg.php" title="Регистрация">Регистрация</a></li>
    6.                 <?php endif; ?>
    Но почему то он не прячет их(
    Что так идет не так. Да не как.
     
  2. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @TeslaFeo
    :D
    Вроде исправил))) ура)))
     
  3. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    - дистанционное благословение базы данных
    - снятие сглаза с IP адреса
    - снятие порчи с обработчиков форм
    - наложение астральной защиты на панель администратора
     
  4. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    Если это все собрать воедино, и красиво оформить, ставка в 150к в месяц обеспечана.. на тв-3!
     
  5. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @mahmuzar
    Кому ты это написал хоть? Что собрать воедино?
    --- Добавлено ---
    @TeslaFeo
    :D Вообще жара :D
     
  6. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    @_ne_scaju_, ты вообще молодец, маленькими шажочками идешь в гору! Так держать.

    То, что выше.
     
  7. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @mahmuzar
    Спасибо, за поддержания в данной теме)
    Лучше идти медленно не спеша и уверенно не спотыкаясь)
    То что выше написал пользователь @TeslaFeo ?
     
  8. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    ясен пень)
     
  9. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @TeslaFeo
    Так с шифрованиям пароля я разобрался, в принципе, а вот как на счет дополнительного хеша от пароля и соли?
    Вот делаю так при регистрации
    PHP:
    1. //Получаем ХЕШ соли ВОТ ЭТОТ КУСОК Я ПРАВИЛЬНО СФОРМИРОВАЛ?
    2. if (password_needs_rehash($hash, PASSWORD_DEFAULT, ['cost' => 12])) {
    3.     $hash = password_hash($password, PASSWORD_DEFAULT, ['cost' => 12]);
    4. }
    5. //Солим пароль
    6. $pass = password_hash($_POST['pass'], PASSWORD_DEFAULT);
    7.                 $sql = 'INSERT INTO `users`
    8.                (`login`, `email`, `pass`, `salt`,`active_hex`, `role`, `date_reg`)
    9.                VALUES
    10.                (:login, :email, :pass, :salt, "'.$hash .'", 3, NOW())';
    11.                 $stmt = $pdo->prepare($sql);
    12.                 $stmt->bindValue(':login', $_POST['login'], PDO::PARAM_STR);
    13.                 $stmt->bindValue(':email', $_POST['email'], PDO::PARAM_STR);
    14.                 $stmt->bindValue(':pass', $pass, PDO::PARAM_STR);
    15.                 $stmt->bindValue(':salt', $salt, PDO::PARAM_STR);
    16.                 $stmt->execute();
    И вот что получается после запроса, такого:
    На сколько я правильно все сделал?
    И стоить ли так все хранить в базе или можно обойтись одним зашифрованным пароле?
     

    Вложения:

    • 2.png
      2.png
      Размер файла:
      12,2 КБ
      Просмотров:
      3
  10. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    Короче вопрос такой, как создать соль, и хеш для пароля, если я пароль уже зашифровал.
    А хеш и соль не могу. как это сделать?
     
  11. Abyss

    Abyss Старожил

    С нами с:
    12 дек 2015
    Сообщения:
    1.298
    Симпатии:
    218
    Адрес:
    Default city
    [​IMG]
    У тебя у самого глаза не кровоточут когда ты читаешь это говно ? Поставь себе шаблонизатор, хоть какой-нибудь, хоть сам напиши.
    Ты забиндил всё кроме хеша, почему ? Он такой же стринг как и все.
    А по дефолту хеш это что ? Есть инициализация переменной кроме этого блока условия ?
     
  12. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Это не обязательно ж. Ну и да, PHP - изначально шаблонизатор. Хочешь ты или нет, а динамический контент ты без echo или выключения режима php не сделаешь. Или ты думаешь, что шаблонизаторы как-то иначе работают? Фиг. У них внутри все то же самое. При виде их кода тоже будешь ругаться, что авторы могли бы и шаблонизатор заюзать? Автор изучает не это в данный момент.

    Эта вот истерия по поводу "нельзя чтобы HTML и PHP были в одном файле" уже давно превратилась в какое-то жуткое суеверие. Что, если у тебя где-то в коде есть echo "<div>", то это говно, код проклят, а ты - чмошник. Причем страх перед HTML релизиозный, а не объективный. И чем меньше человек знает про причины этого призыва к разделению, тем больше он страдает этой херней. Даже не задумываясь. Вообще.

    Боятся так, что начинают городить нереальные костыли, ЛИШЬ БЫ HTML ИЗБЕЖАТЬ. Простенькие конструкции выводят через нереальные жопы с инклудами статики, где регуляркой что-то ищут и подменяют, пересохраняют, ЛИШЬ БЫ НЕ БЫЛО HTML В КОДЕ. Самоцель. Без объективной причины. Вещь в себе. Люди готовы сколь бы то ни было угодно усложнять логику вывода, ЛИШЬ БЫ HTML НЕ БЫЛО В КОДЕ. И считают, что такие решения красивы и изящны. Потому что там нет HTML. И пофигу, что код, в итоге - полумертвое несопровождаемое кладбище костылей.

    Выводить HTML в PHP можно. Ничего зазорного в этом нет. Если нужно - на здоровье. Если у тебя есть функция get_table($arr), принимающая массив и отдающая HTML-таблицу, оперирующая, огосподи, этим самым HTML-ем, это нормально. Если там есть большие разрывы в коде, то заменять echo на отключение режима PHP - это нормально.

    Это не говно, не стыд, и глаза не кровоточат.

    Говно, стыд и боль в глазах, это когда страница потоком идет в виде мешанины HTML и PHP, где это лишено здравого смысла и логики, простынь с макаронами, когда PHP просто посреди страницы втыкается там, где нужно чуть интерактива завести. С внезапными безусловными инклудами посреди страницы. Причем, часто втыкается через альтернативный синтаксис. Привет, Битрикс!

    Вывод. Не надо замыкаться на суевериях и где-то услышанных супер-мудростях, искаженных сломанным телефоном. Нужно подходить ко всему с головой. Это та же история, что с апачем, который говно и тормозит и хуже всего на свете, потому что...потому что так все говорят, не вдумываясь. А на деле он работает быстрее всех, а слухи про тормоза и убогость пошли от того, что хомячки не понимают проблемы медленного клиента, решаемого реверс-проксей, но чот гдет слышали, что апач вот тупит, а нжинкс не тупит при таких же условиях. И понеслась. И вот у нас новая серверная религия, основанная на слухах и непонимании предметной части.

    Если в коде есть здравый смысл, если есть логика. Если есть понятие "архитектуры", то пофигу что там с чем смешивается, если это не создает проблем.
     
    #287 Fell-x27, 5 апр 2017
    Последнее редактирование: 5 апр 2017
    mahmuzar нравится это.
  13. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @Abyss
    Вообще у меня вопрос был, правильно ли. Смотрите скрины выше.
    Ну хеш по дефолту это активехеш в базе.

    НУЖНО ли создавать соли и хеш для пароля?
    --- Добавлено ---
    @Fell-x27
    С тобой согласен, я изучаю в данный момент другое)))
    Пользовательскую часть)))
     
  14. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @Fell-x27
    Подскажите мне пожалуйста, нужно ли еще 2 таблицы создавать, для хеша и соли в пароль?
    Картинку смотрите ниже:
     

    Вложения:

    • 2.png
      2.png
      Размер файла:
      12,2 КБ
      Просмотров:
      2
  15. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    используя функцию password_hash ты в результате одной строкой получаешь хэш и соль, всего одна строка.
    Ты не путаешь таблицы с столбцами случайно?
     
    Fell-x27 нравится это.
  16. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @denis01
    Ура ответили, теперь понял) что с генерированная строка имеет уже и хеш и соль. А вот это и будет зашифрованный пароль?

    А что на счет моих еще 2х таблиц скриншот выше, их можно удалять получается? Просто я использовал md5 и создавал для них таблицу для соли и для активехеш.
    Например я отсылаю пользователю письмо на почту что бы он активировал его, и беру из таблицы активехеш, данные, а как же мне взять теперь активехеш если, у меня и хеш и соль в одной строке?

    Нет я не путаю таблицы со столбцами, В таблице мы создаем столбцы, а в столбцах мы заполняем данные)
     
  17. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    @_ne_scaju_ для активации тебе не нужны соли или хэш.
    Ты когда хочешь активировать пользователя (удостовериться что он имеет доступ к почте которую указал), ты можешь создать таблицу с id пользователя и случайной строкой. В ссылку указать эту случайную строку, по ней он сможет активировать, так как ты по этой случайной строчке найдёшь в таблице его id пользователя.

    Тут могут ввести в заблуждения такие вещи как создание случайной строки, потому что её обычно так для красоты хэшируют например в md5, чтобы получить строку из 32 символов или сколько там. Вот например https://secure.php.net/manual/ru/function.random-bytes.php для получения случайных байт, но их просто в ссылки не передать, там есть пример как превратить в ASCII например
     
  18. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @denis01
    Читаем) Вот пароль зашифровал с помощью password_hash.
    Дальше это зашифрованный пароль не трогаем.
    Дальше создаем таблицу а в ней 2 поля это id пользователя и с генерированная строка.
    При регистрации я ее тоже должен указать в запросе что бы она с генерировалась для одного пользователя разная срока.
    Дальше когда я отправляю пользователю письмо он активирует аккаунт по этой сроке что с генерировалась.
    Дальше если все верно активируем пользователя то-есть таблица status со значением 0 и 1 где один это активировал аккаунт
    Дальше я при авторизации должен только проверить пароль, который в базе
    Вот на сколько я правильно понял???

    Вот еще одно хочу спросить:
    А как же изменить пароль или восстановить?
    Первое я беру эту с генерированную строку которая для каждого пользователя уникальная
    Дальше в зависимости от реализации по емаил или логину указываем в поле и отсылаем письмо
    Дальше если все хорошо меняем на новую с генерированную строку для каждого пользователя и генерируем новый пароль для пользователя шифруем его
    Правильно ли я понял все это?
     
    #293 _ne_scaju_, 5 апр 2017
    Последнее редактирование: 5 апр 2017
  19. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    в таблице не забудь id пользователя

    ну чтобы изменить, с генерируй новый хэш с солью и замени старый новым,
    восстановление как активация, пусть подтвердит свою почту и дай возможность вписать новый пароль
     
  20. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Шифрование и хэширование не одно и то же. Не путай эти понятия. Никогда.
     
    denis01 нравится это.
  21. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @denis01
    А если не создавать таблицу, а сразу в таблице с пользователями там где id уже есть создать поле для генерируемой строки.
    И по нем уже делать подтверждение регистрации?
    Или это нагрузить сервер?

    На счет второго аналогично что и активации я понял)
    --- Добавлено ---
    @Fell-x27
    По подробней пожалуйста!
     
  22. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Можно и так, нужно будет добавить поле, что строка для активации уже использована, так как если это было бы в отдельной таблице, ты мог бы просто удалить строку
     
    _ne_scaju_ нравится это.
  23. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @denis01
    Упс тут я в ступоре) Мне нужно будет удалять из базы эту с генерируемую строку, как только этот пользователь активировал аккаунт?
    Пожалуйста объясните не много яснее для меня) Как бы это лучше выглядело бы?
    Просто так придется создать еще одну таблицу и 2 поля).
    Например он подтвердил и что строку мне надо удалить будет? То-есть после активации делается сразу запрос на удаления этой строки. А как же восстановления пароля?
    Если мы эту с генерированную сроку удалили? Как нам восстановить?
     
  24. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    можно удалить или пометить что её использовали и по ней уже нельзя было опять менять пароль.

    Да, можно сразу

    Для восстановления генерируешь ещё одну запись в таблице, можешь их помечать, для восстановления и активации аккаунта, даже время им жизни можно задать, например 24 часа, потом уже не принимать её
     
  25. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @denis01
    А я думал так:
    Если пароль утерян то:
    Первое он его хочет восстановить, то-есть указывает емаил
    Второе ему на эмаил приходит письмо с той генерируемой строкой, которая сейчас в базе
    Третье он меняет пароль, заменяется эта строка которая в базе, на новую строку с генерируемая для каждого пользователя своя строка
    Четвертое если ему опять нужно восстановить пароль, то новая с генерируемая строка которая в базе, придет в письме, и так далее.
    Может так лучше будет? Или это не безопасно?
    --- Добавлено ---
    @denis01
    А подскажите мне как мне эту строку создать какие есть хороши функции или уже готовые примеры, что бы была эта строка для каждого пользователя разная.
    И для активации потребовалась, и для восстановления пароля)