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

    +157

    1. 1
    setcookie('password', $passHash , time() + $this::TIME_COOKIE * 1000 +  $remember ? $this::TIME_COOKIE_REMEMBER : 0  * 1000 );

    И я то думал, почему кука не появляется...

    Запостил: Dart_Sergius, 21 Апреля 2014

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

    • Из-за приоритета тернарника забаговало? Нефиг скобки экономить ;)
      Ответить
      • именно так) Вот щас сижу лопачу код остальной в поисках похожей баги, уже пару мест выискал (
        Ответить
      • и не только приоритета, но и динамической типизации :)
        Ответить
    • >setcookie('password', $passHash
      Вот говно
      Ответить
      • говно, это когда в куках логин и пароль в открытом виде от доменной учетки хранится, и при каждом клике передается по http... и это не фантазия :(
        Ответить
        • Это тоже говно. Крадется база - и хеши даже расшифровывать не надо. Подарок прям.
          Ответить
          • а кто сказал что это последний хеш?
            Ответить
          • Как будто это так легко взять и украсть БД. Если доступ только с локального компа. Надо еще кодярник загрузить и его исполнить. А если смог загрузить кодярник то нах тогда база? И так делай что хочешь.
            Ответить
            • Не-не-не Девид Блейн...

              Если у тебя упёрли базу с чистыми или плохо просоленными паролями - ты подложил жирную свинью своим юзерам ;) Ведь большинство из них юзало эти пароли на других сайтах.

              Ну и насчет загрузить кодярник. А что, если хакер нашел только sql иньекцию, которая позволяет надергать записей о юзерах из таблички с оными, а полного доступа не получил?
              Ответить
              • Тут главное условие если уперли БД.
                Кстати о просолки паролей у нас пароли юзеров солятся разными солями. если id пользователя кратен 5 то одна соль если 2 то другая. Если не 1 и не 2 то 3. По мне это параноя но как есть.
                Ответить
                • > у нас пароли юзеров солятся разными солями. если id пользователя кратен 5 то одна соль если 2 то другая. Если не 1 и не 2 то 3
                  Вот поставят у вас юзер с айдишкой 10 и юзер с айдишкой 15 одинаковый пароль, и будет у них одинаковый хеш ;) Толку от такого алгоритма - ноль без палочки. Соль должна быть случайная и разная (ну по возможности, из-за конечной длины соли она может изредка совпадать) во всех учетках, ну на крайний случай - базироваться на логине/айдишке. Так что это не паранойя, а затыкание пробоины пальцем ;)

                  > Тут главное условие если уперли БД.
                  Тут главное условие - получили доступ к табличке с аккаунтами. Всю бд для этого переть излишне.
                  Ответить
                  • + сейчас перебиралки паролей уже не такие медленные, как раньше. А паролю у юзеров по-прежнему тупые и короткие. Поэтому даже двойное хеширование и годная соль тут не помогут ;(

                    google PBKDF2, bcrypt, scrypt
                    Ответить
                    • перебералки могут быть сколько угодно быстрыми. пока функции генерации хеша будут притормаживать полный перебор просто пустая трата времени. Можно конечно по словарю.
                      Ответить
                      • Да никому не нужны пароли конкретных юзеров ;)))

                        Разломали по словарю тысчонку другую паролей из ста тысяч - это уже профит ;)

                        Тремя разными солями ты увеличил им время работы в 3 раза (по сравнению с несолёными). Круто, чо.

                        P.S. Хеш надеюсь не md5?
                        Ответить
                        • а с солями в БД вообще не как не изменил.
                          Ответить
                          • С солями в БД им надо подбирать каждый пароль по-отдельности (т.к. соли разные). С непосоленными паролями - подбираем все спертые пароли за один проход. С твоей солью - за три.
                            Ответить
                            • В моём случае не известна 1 соль 2. количество солей 3. правила соления. в твоём есть

                              1. хеш 2. соль. надо только вычислить способ соления (т.е. куда соль прикладывается к паролю спереди сзади в середину или еще как).
                              Ответить
                              • > в твоём есть
                                И поэтому этот алгоритм, внезапно, легче исследовать и доказывать его надежность.

                                > надо только вычислить способ соления
                                Упрут из кода. Не забывай, что злодеем может оказаться психанувший бывший сотрудник твоей же конторы.
                                Ответить
                                • дык он за 2 недели доработки может бакдорчик за пилить.
                                  Я тут вот что подумал что надо конечно в БД хранить соли к паролям юзера + солить еще солью с кода. тогда все станет еще сложней. Ну и обязательно формы авторизации через https
                                  Ответить
                                  • > Ну и обязательно формы авторизации через https
                                    Самый лол в том, что одноглазники до сих пор до этого не додумались :) Пароли летают прямо открытым текстом.
                                    Ответить
                                • > Упрут из кода.
                                  Поскольку 99% разработчиков небогаты фантазией, то, если известен хотя бы один пароль на ресурсе, соль можно и набрутить. Или даже алгоритм соления.
                                  Как я написал ниже, у меня была база хэшей и солей, но неясно, каких. Ну, фигле, зарегал нового пользователя, поставил пароль 123456, посмотрел хэш, соль, засунул в генератор и нашёл, что алгоритм примитивный.

                                  Явсегдабудучитатьвесьтредпереддобавление мкомментария.
                                  Но вектор атаки вполне очевидный.
                                  Ответить
                              • да пойми ты, дело не в том, насколько хорошо, и с каким количеством солей ты их солишь, а в том, что хранишь хеш пароля в куках, которые не HttpOnly.
                                bool setcookie ( string $name [, string $value [, int $expire = 0 [, string $path [, string $domain [, bool $secure = false [, bool $httponly = false ]]]]]] )

                                >Тут главное условие если уперли БД.
                                с таким подходом из даже из базы воровать не надо, достаточно XSS

                                пароль должен 1 раз передаваться на сервер, чтобы там сравнить хеш, и все, дальше идентификатор сессии.
                                Ответить
                                • > пароль должен 1 раз передаваться на сервер
                                  В идеале он вообще не должен никуда передаваться ;)
                                  Ответить
                                  • то есть ты предлагаешь его на клиенте солить и кешировать? :)
                                    Ответить
                                    • Луркай srp
                                      Ответить
                                      • уверен, что день, когда все браузеры начнут поддерживать SRP совпадет с днем, когда Путин перестанет быть президентом РФ.
                                        а так, да, помечтать можно
                                        Ответить
                                        • Ну так то можно запилить srp на жс. Это конечно не идеал (т.к. сервер все еще может подсунуть другой жс и упереть пароль) но уже лучше...

                                          Ну если не srp -так любой challenge-response на жс наваять можно.
                                          Ответить
                                          • да есть уже https://github.com/symeapp/srp-client
                                            но вообще, это на уровне браузера должно работать, а не амебного JS
                                            Ответить
                                            • > но вообще, это на уровне браузера должно работать
                                              Само собой. Причем в идеале это должно быть какое-то особое окошко, которое никак нельзя изобразить с помощью хтмл и жс.
                                              Ответить
                                              • ну, все же shadow DOM нужен хотя бы :( а то весь дизайн портить будет
                                                Ответить
                                                • > ну, все же shadow DOM нужен хотя бы :( а то весь дизайн портить будет
                                                  Не-не-не. Я себе это так представляю. В самом хтмл будет только кнопка "войти" (без ограничений по дизайну, просто кнопка). И дальше браузер будет показывать свое всплывающее окно, которое юзер всегда сможет отличить от любой верстки. Можно воспользоваться затенением всего браузера, как в UAC семерочки, а может быть как в фаерфоксе сейчас выпадает окошко запомнить пароль...

                                                  Ну и юзер должен привыкнуть, что пароль он вводит только в это окошко, и никуда больше.

                                                  Иначе толку от всего этого SRP в браузере - ноль.
                                                  Ответить
                                          • >(т.к. сервер все еще может подсунуть другой жс и упереть пароль)
                                            Это совсем не то, т.к. от митма оно не защищает вообще никак.
                                            Ответить
                                        • Лол, а почему так? Бля, самый лучший протокол для парольной аутентификации почему-то никому не нужен. Кроме blizzard, которая пару раз успела стать на грабли.

                                          И причем тут браузеры? TLS-SRP это стандарт, часть TLS. Ну согласен, должны. Но у меня оно вообще нигде еще не работало. Есть желающие попробовать, кстати?
                                          Ответить
                                          • Есть желающие потестировать SRP-TLS
                                            Ответить
                                          • > Бля, самый лучший протокол для парольной аутентификации почему-то никому не нужен.
                                            Потому что если окошко для ввода пароля можно сэмулировать на хтмл/жс - то страничка может получить и отправить этот пароль безо всяких SRP куда надо. Сделают тот же самый MITM с подменой формы/скриптов, что и с жсной реализацией, да и всё.

                                            Короче без отдельного окошка браузерное SRP будет ничуть не безопасней, чем если его запилить на жс.

                                            Иллюзия безопасности хуже ее отсутствия ;)
                                            Ответить
                                            • Причем тут это. У меня ни одну реализацию TLS-SRP заставить работать не получилось.
                                              Ответить
                                              • > ни одну реализацию
                                                Какие пробовал?
                                                Ответить
                                                • В openssl есть какая-то
                                                  http://web.archive.org/web/20111018150520/http://trustedhttp.org/wiki/TLS-SRP_in_OpenSSL

                                                  Ну и google:tls-srp openssl
                                                  Ответить
                                                  • гоу, я создал http://gvforum.ru/viewtopic.php?id=1189
                                                    Ответить
                                          • > Бля, самый лучший протокол для парольной аутентификации почему-то никому не нужен.
                                            Кстати, есть еще одна тонкая проблема: SRP никак не защищает от хуёвых паролей. А из-за того, что пароль никогда не будет доступен серверу - он не сможет проверить, удовлетворяет ли этот пароль требованиям безопасности...

                                            Т.е. придется еще и политику паролей форсить на уровне браузера ;( Я это вижу так - при регистрации сайт указывает минимальные требования к паролю, а браузер проверяет их.
                                            Ответить
                                • я согласен с вами. Мы дискутировали по поводу как солить.
                                  Ответить
                        • > Разломали по словарю тысчонку другую паролей из ста тысяч
                          Оптимист. Рейт обычно держится около 60%.
                          Я как-то случайно выкачал базу одного, гм, говнопортала. Там отдельная кулстори.
                          Если вкратце - разработчики упоролись и выводили в коде страницы (!) хэши (!!) паролей пользователей, мыла (!!!) и всякую подобную инфу. Страница весила мегабайт двадцать.
                          Скрипт, который выгребал хэши, словарь на шесть гигов, вот и эти самые 60-70% винрейта.
                          Ответить
                          • Оно соленое было? Какой хеш?
                            Ответить
                            • Солёное, md5 (это видно сразу), форму соли подобрал, навскидку не скажу. Но в пассвордспро и хэшкате было.
                              Ответить
                              • Медленные хеши поподбирай и расскажешь. У меня WPA давал 25 /сек
                                Ответить
                                • Вот добавят их в PHP, так сразу.
                                  Ответить
                                  • > Вот добавят их в PHP, так сразу.
                                    Можешь начинать :)

                                    http://www.php.net/manual/en/ref.password.php
                                    Ответить
                                    • Хорошая попытка. Но я полагаю, что:
                                      а) почти безразлично, насколько хорош собой алгоритм, если словарём можно вскрыть 60..90% паролей;
                                      б) будущее за аппаратными средствами, в хранении паролей в базе не будет необходимости. Уязвимости могут существовать, например, всё ещё можно украсть пароль из браузера или памяти сервера, но сливать базу на сотни тысяч паролей будет невозможно.
                                      Ответить
                                      • >будущее за аппаратными средствами, в хранении паролей в базе не будет необходимости.
                                        И это после разоблачений Сноудена?
                                        Ответить
                                        • Стараюсь-с не читать советских газет, знаешь.
                                          Ответить
                                          • Это про Сноудена читать не хочешь? Профессиональное самоубийство задумал?
                                            Ответить
                                            • Какой-то цирк с понями же. Я читал единственный тред, до того, как он обитал в аэропорту.
                                              К нему на блатхату пришли журнализды, он собрал мобилки, выключил и спрятал в холодильник.
                                              Это говорит либо о том, что он упорот, либо любит хорошие мистификации, либо статью писал норкоман.
                                              Ответить
                                              • Не знаю. Про сноудена впечатление - зафорсенный мудак, который рассказал быдлу то о чём все и так знали.

                                                Столлман об этом десятилетиями говорит.
                                                Ответить
                                                • Это штульман - зафорсенный мудак. Который рассказывает людям про то как опасен жаваскрипт. И что он предлагает? Отключить его нафиг, т.е. лечить насморк отрубанием головы. Чтобы такое предложить, много ума не надо. Неудивительно, что на него забило хуй даже большинство прыщеблядков.
                                                  Ответить
                                                  • нет же, не пользоваться браузерами для доступа к интернету!
                                                    Ответить
                    • >+ сейчас перебиралки паролей уже не такие медленные, как раньше.
                      Мож ПРОЦЫ не такие медленные как раньше?
                      Ответить
                  • Соли хранятся в коде а не в БД. И пусть будут одинаковые кеши. Как определить что является правильным паролем? К тому же мало вероятно описанное совпадение.
                    Ответить
                    • Вась, ты туп.
                      Ответить
                    • В криптографии код всегда считается открытым и доступным противнику. Тащемта почти всегда так оно и есть :)
                      Ответить
                    • злоумышленник может стырить базу и попытаться восстановить свой пароль, получив эту самую секретную соль
                      А если ты добавил соль в начало, то это не усложнит злоумышленнику жизнь
                      Ответить
                      • > попытаться восстановить свой пароль
                        Так во всем виноват разраб, забывший добавить кнопочку "забыли пароль"? :)

                        P.S. А, понял, тут атакующий подбирает соль зная хеш и пароль. Да, вполне логичная атака.
                        Ответить
                • P.S. В новых пыхах есть кошерные функции для хеширования/проверки пароля: http://www.php.net/manual/en/ref.password.php
                  Ответить
                  • Кошерно SRP, остальное - кал.
                    Ответить
                    • > Кошерно SRP, остальное - кал.
                      Ну вот научатся браузеры в SRP - будет кошерно. Сам жду этого дня ;(
                      Ответить
                      • Ну с OAUTH все не так плохо, теперь защищать нужно один единственный сервер аутентификации, на котором ничего лишнего нет.
                        Ответить
                  • хм, интересненько, надо будет поюзать.
                    Ответить
                • >Кстати о просолки паролей у нас пароли юзеров солятся разными солями. если id пользователя кратен 5 то одна соль если 2 то другая. Если не 1 и не 2 то 3. По мне это параноя но как есть.
                  Соль можно хранить в базе, она не секретна и нужна для того, чтобы порадовать злоумышленника и не дать ему подобрать пароли по радужным таблицам
                  Ответить
                  • радужные таблицы это для md5. Есть более стойкие алгоритмы.
                    Ответить
                    • Радужные таблицы - это, блядь, для любого несоленого хеша.
                      Ответить
                      • Нахуй иди. Тебе по какому сказать, что хеш соленый. Соль хранится не в БД а коде. И её три.
                        Ответить
                        • Блядь, дело не в алгоритме, а в наличии соли. И прочти про принцип Керкхоффса, потом пизди здесь.
                          Ответить
                          • Я знаю что это за принцип.
                            Ответить
                            • Ну так по этому принципу не имеет значения где хранится соль - в базе или в сырцах.
                              Ответить
            • Кодярник вычистят раскатыванием бекапа, украденные пароли обратно не вернешь.
              Ответить

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