1. PHP / Говнокод #8225

    +165

    1. 1
    $idlink = rawurlencode(base64_encode($name . "||" . $email . "||" . md5( $password1 ) . "||" . $accountID_1 . "||" . $accountID_2 . "||" . $accountID_3 . "||" . $serverid_1 . "||" . $serverid_2 . "||" . $serverid_3 . "||" . md5( sha1( $name . $email . DBHOST . DBNAME . $config['key'] ) ) ) );

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

    Пы.Сы. Код не мой

    Запостил: kindofbear, 18 Октября 2011

    Комментарии (43) RSS

    • и чЁ?
      Ответить
      • Анальное совокупление, на мой взгляд. Куча кодирований
        И вообще - use bcrypt
        Ответить
        • В общем - да... вопрос тут можно поставить так: Нахрена?
          Ответить
        • я бы сделал так :
          $key = rand (1000,9999);
          $key = md5(key);

          это даст нам достаточно уникальный токен определенной длинны.
          так же нужно сделать таблицу
          token|action|exptime
          где
          token - собственно токен
          action - ссылка на действие
          exptime - время окончания действия токена (т. е. момент когда он протухнет)
          Ответить
          • upd;
            ... но не зная контекста задачи - трудно говорить насколько это подходящее решение.
            Ответить
          • md5( microtime(1) . rand(1000, 9999) )
            Ответить
            • http://php.net/manual/ru/function.microtime.php

              есть небольшое ограничение по использованию.
              Ответить
              • в любом случае приходится чем-то жертвовать
                Ответить
                • я бы увеличил интервал для рандома.
                  Ответить
                  • рандом - не торт.
                    тогда уж - uniqid
                    Ответить
                    • ты имеешь ввиду:
                      $key = md5(uniqid(rand(),1));

                      я правильно понял?
                      Ответить
                      • Ну типа того. Тогда уж наверняка "уникальный токен".
                        И "Когда новый пользователь переходит по ссылочке" - апдейтить значение этого хэша в нуль.
                        Ответить
                      • md5(uniqid
                        БСК. md5 от uniqid только ухудшает энтропию
                        Ответить
                        • Насколько известно, существует всего несколько коллизий md5, которые можно пересчитать по пальцам.
                          Так что, навряд ли, ухудшает
                          Ответить
                          • вы посчитайте кол-во вариантов md5 и кол-во вариантов uniqid .
                            в общем, брать хэш от случайного стринга не имеет смысла
                            Ответить
    • Автор как бы намекает на base64-md5-sha1 головного мозга.
      Ну это, в общем-то, бог с ним - каждый дрочит кодит как хочет, но зачем код подтерждения привязан на DBHOST, DBNAME?
      Ответить
      • Просто там был ещё и DBPASSWORD, но начальство запротестовало... пришлось убрать
        Ответить
    • просто автор can`t into tokens
      Ответить
    • На «гугл» с такой ссылкой бы не попал он) А в обще я бы на его месте проверял длину «GET», да и типичное «гавно», такой длины ссылка не к чему, т.к. у неё должен быть срок хранения в конце концов.
      Ответить
    • Удивительная схожесть с кодом в DataLife Engine))))

      $_REQUEST['id'] = rawurlencode( base64_encode( $name . "||" . $email . "||" . md5( $password1 ) . "||" . md5( sha1( $name . $email . DBHOST . DBNAME . $config['key'] ) ) ) );
      Ответить

    Добавить комментарий