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

    +2

    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
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    <?php
    $page = $_GET['page'];
    $do = $_GET['do'];
    $todo = $_GET['todo'];
    
    //sponsor
    $s = $_GET['s'];
    
    //stupen
    $st = $_GET['st'];
    
    //sponsor
    $u = $_GET['u'];
    
    $email = $_POST['email'];
    $password = $_POST['password'];
    
    $name = $_POST['name'];
    $message = $_POST['message'];
    
    
    $surname = $_POST['surname'];
    $username = $_POST['username'];
    $passrepeat = $_POST['passrepeat'];
    $sponsor = $_POST['sponsor'];
    $skype = $_POST['skype'];
    $perfectmoney = $_POST['perfectmoney'];
    $payeer = $_POST['payeer'];
    $advcash = $_POST['advcash'];
    $bitcoin = $_POST['bitcoin'];
    
    $status = $_POST['status'];
    
    $uac = $_GET['uac'];
    
    $nowis = time();
    
    if ($do == 'login') {
        //id 	name 	email 	username 	password
        $querylogin = "SELECT * FROM `users`";
        $datalogin = mysql_query($querylogin);
        while ($rowlogin = mysql_fetch_array($datalogin)) {
            $usercheck_id = $rowlogin['id'];
            $usercheck_mail = $rowlogin['email'];
            $usercheck_pass = $rowlogin['password'];
            $usercheck_name = $rowlogin['name'];
            $usercheck_username = $rowlogin['username'];
    
            if ($usercheck_username == $username) {
                if ($usercheck_pass == $password) {
                    $_SESSION['user'] = $usercheck_id;
                    $inmsg = 'Привет ' . $usercheck_name . '!';
                    $page = 'cabinet';
                } else {
                    $err_msg = 'Неправильные пароль или аккаунт!';
                }
            } else {
                $err_msg = 'Неправильные пароль или аккаунт!';
            }
        }
    }

    Такого дилетанского кода я еще не видел

    Запостил: kissarat, 12 Октября 2017

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

    • Зато без SQL-иньекций
      Ответить
    • а чем к слову сейчас нужно хэшить пароли?

      ша1 хакнули - ша512?
      Ответить
      • nvm - https://crackstation.net/hashing-security.htm - первый хит на гугле.
        как все сложно. но к счастью есть библиотечки.
        Ответить
      • bcrypt
        Ответить
      • В PHP есть стандартные функции[/color]
        Ответить
      • да можно и sha1, если ты от мамкиных хакеров защищаешься
        главное -- солить

        но лучше конечно sha512
        Ответить
        • Чистые хэши - говно. Они слишком быстрые, даже с солью мамкин хакер их поломает освободившейся от майнинга видюхой.

          Надо всё-таки юзать что-нибудь с итерациями.
          Ответить
          • for ($i = 0; $i < 9000; $i++) {
              $pass = sha1($pass);
            }
            Ответить
          • Можно по-подробнее?
            Какими данными для этого нужно владеть?
            Ответить
            • Ну базой логинов и хешей от паролей, видимо.
              хттп двоеточие слеш слеш википедия точка ру слеш Радужные таблицы.
              Ответить
              • > Использование функции формирования ключа с применением соли делает эту атаку неосуществимой
                Ответить
              • > Радужные таблицы
                Да я имела в виду брутфорс: современным видюшкам с их терафлопсами прогнать словарь через хэш - раз плюнуть. А от брутфорса соль не защищает, поэтому и надо тыщи итераций + зависимость результата от каждой из них, как в PBKDF2.
                Ответить
                • Если борманд -- тян, почему на видео про ОСУ мужские руки?
                  Ответить
                  • Ногти забыла накрасить.
                    Ответить
                  • Анимуёбы с большим стажем часто гворят о себе в женском лице, т. к. за просмотром мультиков про маленьких девочек часто забывают, кто они на самом деле.
                    Ответить
                    • А, точно. Я уж думал баба программировать умеет.
                      Ответить
                    • Н-но у меня стаж всего 3 года, да и последний год я почти ничего не смотрела.
                      Ответить
                    • Это анимуебы с маленьким стажем, потому что сначала это кажется ВеСелО и пРекОлЬНо))) Когда у меня был маленький мал, я тоже о себе в женском роде любила говорить.
                      Ответить
                      • Ну хуй знает, как-то меня это миновало. Желание говорить о себе в женском лице и трахать свой зад искусственным членом пропало еще до того, как я начал увлекаться аниме.
                        Ответить
                        • А что послужило катализатором?
                          Ответить
                    • > часто забывают, кто они на самом деле.
                      Но я на самом деле девочка-волшебница.
                      Ответить
                • > что-нибудь с итерациями
                  > брутфорс: современным видюшкам с их терафлопсами прогнать словарь через хэш - раз плюнуть. А от брутфорса соль не защищает

                  Не троллинга ради, хочется разобраться.

                  Перейдём в логарифмическую шкалу, построим оценку сверху.
                  Терафлопс - это 40 бит в секунду. Год - это 25 бит секунд или 65 бит в год на терафлопсе. Накинем 3 бита за 10 лет и ещё 7 бит во славу закона Мура. Итого 75 бит за 10 лет, начиная с терафлопса и активно апгрейдясь.
                  Скинем 5 бит за вычисление хэша. Скинем 22 бита за словарь. Останется 48 бит хэшей.
                  Соответственно, мне достаточно насолить хакеру 6 байт, что эквивалентно порядка 10¹⁴ итереций без соли (на самом деле даже меньше, т.к. оценка была сверху). Если короткий словарь на 12 бит - 8 байт или 10¹⁷ итереций.

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

                  Если я накидываю 1000 итереций, то добавляю ему только 10 бит. При используемых прикидках (воинствующий школьник с папой из Google) надо будет использовать 5+22+10 = 37 бит флопсов, то есть ¹⁄₈ секунды вместо ¹⁄₈₀₀₀. Если не так быстро, это ¹⁄₄ часа вместо секунды или 3 года вместо дня. Но всё равно криптографически вяло, а эта питушня на сервере тормозит.

                  Если речь о брутфорсе паролей, то итереции и слипы только снизят пирфоманс. Если поставить 1000 ядер, кулхацкер будет брутфорсить c 1000 IP. Если разрешить только один одновременный вход раз за какое-то время, то логинилка будет успешно DoSиться, если не самими пользователями, то одним неспешным хакером со старым нетбуком. Тут только пользователей заставлять пароли ставить сложнее, логиниться с трёхэтажными капчами (каждый раз, чтобы защитить от распределённого подбора логинов) и т.п.

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

                    В общем-то можешь хранить пароли и в открытом виде, если не жалко людей, использующих один и тот же пароль на всех сайтах.
                    Ответить
                    • >>если не жалко людей, использующих один и тот же пароль на всех сайтах.
                      99% таких. Среди НЕ айтишников так точно
                      Ответить
                    • >>> Да я имела в виду брутфорс: современным видюшкам с их терафлопсами прогнать словарь через хэш - раз плюнуть. А от брутфорса соль не защищает
                      >>> А от брутфорса соль не защищает
                      >> На каком этапе я заблуждаюсь?
                      > Соление и итереции защищают не твой сервер от активной атаки
                      Про это у меня был только один абзац о подборе паролей - чисто для покрытия всех вариантов касательно паролей (спереть хэши, подобрать пароли на сервере), оставив за бортом какие-нибудь мелочи вроде SQL-инъекций и прочих уязвимостей.
                      Остальное - расчёты того, как хакер десять лет обращает хэши у себя дома.

                      Почему соль не защищает от брутфорса?

                      Борманд в моей голове только что #:
                      Потому, что соль хранится в открытом виде, и если подбирать по словарю, не важно, сделать миллион вычислений хэша от пароля, либо миллион вычислений хэша от пароля плюс соли. В твоих вычислениях ты по недоразумению представил соль как нечто неизвестное, что ещё требуется подобрать. Соответственно, 6 байт соли добавят не 48 бит сложности брутфорсеру, а 0 бит; соль бесполезна.

                      Пока писал вопрос, понял, в чём дело.
                      Ответить
                • Поскольку ты тут самая умная, то скажи:

                  я захешил sha512 соленый пароль "сороктысячобезьянвжопусунулибанан".
                  У маминого хакера есть 4 карты NVIDIA P106-100 на общуюу сумму 80 тыр.

                  Сколько времени ему надо чтобы вскрыть мой пароль?
                  Ответить
                  • Да кому нахуй нужен твой пароль, если в той же базе есть 100500 юзеров с анальным 12345678?

                    З.Ы. И "сороктысячобезьянвжопусунулибанан" всяко есть в словарях, классика же.
                    Ответить
                    • То-есть если у меня нормальный пароль, соль и современный хеш (ну не md5 хотя бы) то шансы у мамкиного хакера не велики?

                      >> И "сороктысячобезьянвжопусунулибанан" всяко есть в словарях,
                      да, но если это словарь для брута то ты прав. А если это словарь слово-хеш то хуй, ибо соль
                      Ответить
                      • > не велики
                        Как-то так.

                        > md5
                        Разве для md5 уже pre-image атаку нашли, чтобы его нельзя было юзать для хеширования паролей? Емнип, там только коллизии научились генерить.

                        > словарь для брута
                        Да, я его имела в виду.
                        Ответить
                        • Юзать можно, но мне кажется что он коротковат, да и брутится быстрее чем sha2.
                          Но окей, я соглашусь пожалуй что и MD5 солёный на дороге не валяется.
                          Ответить
                    • Допустим мы нашли самый распространённый пароль, и это 123. Как теперь подбирать соль?

                      P.S. Можно айдишник юзера ложить в соль.
                      Ответить
                      • Я вчера задавал этот вопрос.
                        1. Если слита таблица с хэшами, индивидуальная соль пользователя там уже лежит, и подбирать её не надо, просто вычислить хэш от 123 и соли.
                        2. Если спрашивать user:123 у сервера, соль не важна.
                        Спрятать соль на другом сервере отдельно? Может, и вариант получше, ломать придётся два сервера, а не один. Но если сломали первый, то почему второй должен устоять?
                        Ответить
                        • Ну про 2 сервера - хороший, годный вариант. Один сервер занимается только аутентификацией, а остальные - крутят прикладнуху и вообще никогда не видят креденшиалы юзеров.
                          Ответить
                        • Соль также легко украсть, как и хеш. Разницы нет. Но с солью у тебя нет готовых таблиц
                          Ответить
                          • Словарная атака Борманда работает за O(размера словаря), что для небольшого числа популярных паролей O(1) и асимптотически эквивалентно подбору по таблице.
                            Ответить
                        • Рассмотрим случай, когда соль не индивидуальная, а захардкожена в settings.php

                          И ещё нужно знать алгоритм применения соли. Но допустим это password + salt.
                          Ответить
                          • > нужно знать алгоритм применения соли
                            В криптографии всегда предполагается, что мы знаем все алгоритмы.

                            > захардкожена в settings.php
                            Это хуёвый вариант, т.к. у юзеров с одинаковым паролем будет одинаковый хэш. Здесь можно провести активную атаку заюзав сервер в качестве оракула - зарегаться, менять свой пароль и подглядывать, какой получается хеш.

                            Вот если часть соли индивидуальная, а часть - в settings.php - вроде выглядит лучше. По крайней мере SQL инъекций можно не бояться, если соль в settings.php достаточно криптостойкая.
                            Ответить
                            • > зарегаться, менять свой пароль и подглядывать, какой получается хеш
                              Это чтобы ещё и алгоритм хэширования подобрать?
                              А так установить себе один раз пароль "123" и отнести хэш хакеру домой на подбор соли видеокартами.
                              Ответить
                              • > ещё и алгоритм хэширования подобрать
                                Не, тут даже алгоритм знать не надо. Сервер сам всё сделает как надо. Тебе остаётся менять свой пароль на все тупые варианты и смотреть, когда твой хеш с чьим-то ещё совпадёт.

                                Да, не оффлайн. Да, админ может запалить (но не факт, т.к. смена пароля при известном старом - довольно безобидное действие).

                                Т.е. индивидуальная соль всё же нужна.
                                Ответить
                              • В итоге получается такая схема:
                                - криптостойкая статичная соль, без знания которой хеши бесполезны;
                                - индивидуальная соль, которая защищает от создания таблиц и сравнения хешей друг с другом;
                                - алгоритм с N итерециями (к примеру, PBKDF2), который замедляет брутфорс в N раз.
                                Ответить
                              • > пароль "123" и отнести хэш хакеру домой на подбор соли видеокартами.

                                Вот я пытаюсь выпытать у вас: КАК?
                                Как подобрать соль, пусть даже она 10 символов 64-символьного алфавита?
                                Ответить
                                • Взять дефолтную из дистриба, один фиг пыхоадмин забыл её поменять.
                                  Ответить
                                • * Взять дефолтную как говорит Борманд
                                  * Проверить варианты, сгенерированные с помощью rand() и других простых генераторов
                                  * Запастись терпением и перебирать все варианты

                                  > КАК?
                                  for(salt = "AAAAAAAAAA"; salt <= "ZZZZZZZZZZ"; inc(salt))
                                    if(hash("123" + salt) == myHash)
                                      std::cout << "THE SALT IS " << salt;

                                  А потом использовать найденную salt для остальных
                                  Ответить
                                  • Я придумал.
                                    Берём достаточное количество поролей. Составляем сестему бесконечномерный уравнений, и решаем её.
                                    Ответить
                                    • В случае неизвестной длинной случайной соли подобное будет действительно проще.
                                      Ответить
                                    • допустим соль 123 тогда составляет воерции 321 можно получить 1 что всего 12 байт в 42 разы быстрее
                                      Ответить

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