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

    +121

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    // то проверяем его куки
        // вдруг там есть логин и пароль к нашему скрипту
    
        if (isset($_COOKIE['login']) && isset($_COOKIE['password'])) {
            // если же такие имеются
            // то пробуем авторизовать пользователя по этим логину и паролю
            $login = mysql_real_escape_string($_COOKIE['login']);
            $password = mysql_real_escape_string($_COOKIE['password']);
    
            // и по аналогии с авторизацией через форму:
    
            // делаем запрос к БД
            // и ищем юзера с таким логином и паролем
    
            $query = "SELECT `id`
                    FROM `users`
                    WHERE `login`='{$login}' AND `password`='{$password}'
                    LIMIT 1";
            $sql = mysql_query($query) or die(mysql_error());
    
            // если такой пользователь нашелся
            if (mysql_num_rows($sql) == 1) {
                // то мы ставим об этом метку в сессии (допустим мы будем ставить ID пользователя)
    
                $row = mysql_fetch_assoc($sql);
                $_SESSION['user_id'] = $row['id'];

    авторитизация из кук ну сколько не говори не храни в куках пароли и логины нет найдется один говонокодер которому все не почем и учит детей плохому

    Запостил: Vasiliy, 14 Июля 2010

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

    • само по себе хранение инфы в куках не так плохо. Вот если их сопрут, то да
      Ответить
      • ифу о пользователях вообще не стоит хранить в куках не говоря уже о логин с пассвордом алгоритм можно вычислить. ппроль подобрать
        Ответить
        • а как насчет функции "запомнить меня"? ведь логин с пассвордом можно подобрать
          Ответить
          • обратить хеш?
            Ответить
            • ну лично мы с другом придумали собачить хеш логина и пассворда + хеш броузера + сессионид +солька
              Ответить
            • показать все, что скрытовообще влет. пять компов заночь подберут слово из 8 латинских буков и цыфер. И это не учитывая что есть алгоритмы обратить хеш просто они должны работать на квантовых компьютерах коих ЕЩЕ пока нет а может и есть их только прячут.
              Ответить
              • вообще
                операция обращения хеша - по сложности превосходит подбор пароля это раз.

                >>>8 латинских буков и цыфер
                причем тут это???
                MD-5 128 бит - причем там могут быть абсолютно рандомные вещи - это 16 байт.
                Хотим цифры и буквы - ОК Base64 увеличивает на 4/3 длину - имеем 16*4/3=64/3~21 символ

                а еще есть SHA-256 - который в 2 раза длинней
                удачи в подборе 256 бит - для полного перебора может не хватит всей энергии Земли, считай хоть на протонно-фотонно-нейтронных компьютерах
                Ответить
                • брутфорс - последняя мера и почти всегда говно, особенно пока существуют такие вот говнокодеры
                  Ответить
                • показать все, что скрытооперация обращения хеша - по сложности превосходит подбор пароля это раз. чуш.
                  for ($i=0;$i<10;$i++)
                  if (md5($i)==$hash) {echo "Есть $i"; break;}

                  вот все пароли от 0 до 10 и ничего сложного

                  длина кеша роли не играет мы не кеш подбираем а пароль а он врядли длинее 8 -10 символов
                  Ответить
                  • >>>а он врядли длинее 8 -10 символов
                    ))))), вот это труЪ чушь
                    ага и в нем только цифры от нуля до девяти ))
                    кстати главный прикол хеша, то что 17 символьный пароль и 3-х символьный могут иметь одинаковый хеш - это называется коллизия

                    >>>длина кеша роли не играет
                    ))))) реально чушь, хеш и кэш - разные вещи
                    играет, коллизии
                    Ответить
                  • for ($i=0;$i<10;$i++)
                    if (md5($i)==$hash) {echo "Есть $i"; break;}

                    это и есть подбор пароля,
                    читайте ВНИМАТЕЛЬНО что я написал,
                    операция обращения хеша - по сложности превосходит подбор пароля.

                    потому тут именно так - подбирается пароль, а не обращается хеш и это главная фича - мы можем найти другой пароль имеющий такой же хеш
                    Ответить
                  • >>вот все пароли от 0 до 10 и ничего сложного
                    это совершенно правильно, если у Вас в качестве пароля можно использовать только один символ и именно цифру. Обычно же в пароле предлагают алфавитно цифровые символы и например 8 символов (для простоты представим, что в пароле ВСЕГДА 8 символов)

                    В английском алфавите 28 букв (кажется). Регистр важен, так что 56. Плюс цифры (знаки подчеркивания пока упустим): 66.

                    Тоесть один символ может иметь до 66 различных значений.
                    Даже если мы точно знаем, что этих символов восемь, то максимальное число значений 66 в степени 8. Тоесть 360040606269696.

                    В качестве домашнего задания предлагаю посчитать время, нужное для цикла:
                    for ($i=0;$i<360040606269697;$i++)
                    if (md5($i)==$hash) {echo "Есть $i"; break;}

                    Как видите -- даже в упращенном варианте (с заранее известным кол-вом символов в пароле) это будет не быстро
                    Ответить
                    • Даже если предположить, что функция md5 работает одну миллисекунду, то полный перебор 360040606269697 значений займёт 11417 лет. Если "повезёт", и пароль находится где-то в первой трети, то это всё равно будет пара тысячелетий :)

                      Что будет, если распараллелить на несколько машин? Я хз, там наверное какие-то нелинейные функции будут.
                      Мне кажется, их понадобится стока, что легче заплатить наёмникам, которые залезут в нужный офис и выкрадут компьютероы с дисками)
                      Ответить
                    • 26 букв.
                      Ответить
              • алгоритмвом "обратить" хеш не существует -- это противоречит самому определению хеша.

                Cуществуют способы брут-форса, которые на обычных компах занимают эпохи, а на квантовых -- секунды.
                Ответить
                • существуют пространства исходных данных, где коллизий очень много - это значительно ускоряет брутфорс
                  Ответить
                  • Идеальный хеш имеет равномерный разброс по пространству данных. Если оно достаточно большое -- найти коллизию будет не просто.
                    Ответить
                    • все известные на сегодня хеши грешат. Кто-то больше, кто-то меньше
                      Ответить
                • > алгоритмвом "обратить" хеш не существует -- это противоречит самому определению хеша.

                  Ага, допустим, есть 2 + 2 = 4; Как обратить обратно в слагаемые 4? Это может быть 4 + 0. Это может быть 3 + 1. Васька он вроде школьник и студент, ему за такие косяки можно простить.
                  Ответить
                  • это догадки, а не алгоритм. Или брутфорс
                    Ответить
                  • Хеш может быть даже такой:

                    if (i == 42) {
                    return 12332;
                    } else if (i == 10500) {
                    return -42;
                    }
                    else {
                    return 1000;
                    }


                    Разброс у него конечно говененький (мапы на нем лучше не строить), но это хеш, и покажите мне того человека, который мне его обратит. :)))
                    Ответить
                    • проанализируем разброс и обратим
                      Ответить
                      • Это займет определенное время. не для моего говнохеша конечно, а для серьезного.
                        Ответить
                        • в "серьезном" как раз хороший разброс, поэтому его трудно обратить. Однако, как правило, область "великих коллизий" вероятно, будет обширна для большинства хешей
                          Ответить
                        • Кстати, интересно, можно ли сделать умную программу, которая бы на большой выборке аргумент(ы)->выход функции могла бы сама синтезировать нужную функцию? Есть ли такие? Что-то на основе нейронных сетей?
                          Ответить
                          • На любом количестве аргументов с любой функцией?
                            Думаю, что это не реально.
                            Возьмем граничный случай:
                            f(1) = 123
                            f(2) = 246
                            Ну и как ту понять -- что такое f?
                            Ответить
                            • Нейронная сеть может определить, что такое f, но скорей всего ошибочно, т.е. "сгенерированная" функция будет верна для f(1) = 123 и f(2) = 246, но не факт, что будет верна для остальных f(x).
                              Нужны достаточно большие выборки, и то не факт, что будетв ерно. Однако вероятность попасть верно куда больше, чем если ничего не делать :)
                              Ответить
                    • а к тому же, ваш говнохеш, это пардон, только говно-, но не хеш. потому что определение хэш-отображения (в моей интерпретации):
                      1.исходная область велика (скажем, натуральные числа), область отображения конечна(скажем, величиной в двойное слово)
                      2.вычисление прямого отображения эффективно (требуется краткое время)
                      3.вычисление обратного отображения неэффективно (невозможно теоретически или практически быстро вычислять)
                      Ответить
                      • видим, что страдаем по 3му пункту
                        Ответить
                        • Добавьте туда умножение на salt, и будет хеш)
                          Ответить
                          • уже лучше, но все равно недостаточно. вот если мы как в crc оперируем в цикле по блоку данных, тогда энтропия системы возрастает (каждый бит вносит огромное "возмущение", впроть до искажения всего хеша) тогда уже трудно предугадать поведение с каждым циклом вычисления. а одно умножение много "беспорядка" не внесет
                            Ответить
                            • Разумеется функция от предыдущего значения и блока данных круче, чем просто функция от блока данных, так как отдельно взятый кусок хеша ниочем не говорит.


                              Я не претендавал на стойкость -- просто хотел сказать что это ТОЖЕ хеш.
                              Ответить
                              • все же хеш обязан быть стойким
                                Ответить
                                • Стойкость -- понятие сложное, так как под стойкостью мы понимаем что "стоимость взлома превышает стоимость данных, а за время, нужное на взлом данные уже потеряют актуальность".

                                  Так что хеш может быть стойким для программы, прячущей историю Вашей аськи от младшей сестры, но совершенно не стойкий для ФБР или ЦРУ
                                  Ответить
                                  • ориентируемся на последний вариант
                                    Ответить
                                    • О чем мы спорим? Об определении термина "hash"?
                                      Посмотрите в википедии "Hash function".


                                      Или посмотрите на функцию hashCode у джававских врапперов для Number: там hash(x) = x :)
                                      Ответить
                  • та он даже не школьник, - школьники вон Ось свою пишут и суперкомпы делают -Ъ
                    Ответить
                    • Я, когда был в детсадовском возрасте, запросто сооружал звездолёт из двух табуреток и подушки (плюс фантазия)...
                      Ответить
      • За саму по себе работу с куками и MySQL в одном классе надо сжигать на костре
        Ответить
        • мне всегда казалось, что это фирменный стиль большинства пхп-кодеров - совмещать выборки из базы, бизнес-логику и шаблоны вывода в одном месте - этакая говнокаша из sql,php,html и js/ajax
          Ответить
          • совершено не верное мнение. Среди прогеров пхп считается плохим стилем объединять внешний вид логику и работу с базой в одном скрипте.
            Ответить
          • Смотря для чего.
            Если Вы делаете один скрипт из пяти строк (а PHP был создан именноч то бы делать такие скрипты) то это нормально.

            Если Вы делаете серьезное приложение (делать его на php неудбно, но можно) то даже матерые PHPшники стараются его разделять.

            но у них это почти никогда не получается
            Ответить
            • да что вы говорите не получается что значит разделение кода. можно следовать модели MVC и все все отлично на пыхе разделяется котлеты к котлетам мух к мухам.
              Ответить
              • Можно, но к сожалению далеко не все пхп программисты ему следуют.

                Правда за последние 5 лет ситуация улучшилась: в 2005м году был полный мрак. Теперь хотя бы есть всякие zend, cake итд... Но самые известные php проекты (типа phpbb) все равно являют собой кашу, как и 80% существующих проектов(((
                Ответить
    • Авторитизация :D
      Ответить

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