- 1
setcookie('password', $passHash , time() + $this::TIME_COOKIE * 1000 + $remember ? $this::TIME_COOKIE_REMEMBER : 0 * 1000 );
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+157
setcookie('password', $passHash , time() + $this::TIME_COOKIE * 1000 + $remember ? $this::TIME_COOKIE_REMEMBER : 0 * 1000 );
И я то думал, почему кука не появляется...
bormand 21.04.2014 11:16 # +6
Dart_Sergius 21.04.2014 11:23 # +2
Lure Of Chaos 21.04.2014 12:49 # 0
guest 21.04.2014 18:14 # +4
Вот говно
Lokich 21.04.2014 23:47 # +3
guest 22.04.2014 00:59 # +3
Dart_Sergius 22.04.2014 10:18 # 0
Vasiliy 22.04.2014 10:18 # +1
bormand 22.04.2014 10:30 # 0
Если у тебя упёрли базу с чистыми или плохо просоленными паролями - ты подложил жирную свинью своим юзерам ;) Ведь большинство из них юзало эти пароли на других сайтах.
Ну и насчет загрузить кодярник. А что, если хакер нашел только sql иньекцию, которая позволяет надергать записей о юзерах из таблички с оными, а полного доступа не получил?
Vasiliy 22.04.2014 10:46 # 0
Кстати о просолки паролей у нас пароли юзеров солятся разными солями. если id пользователя кратен 5 то одна соль если 2 то другая. Если не 1 и не 2 то 3. По мне это параноя но как есть.
bormand 22.04.2014 10:53 # +1
Вот поставят у вас юзер с айдишкой 10 и юзер с айдишкой 15 одинаковый пароль, и будет у них одинаковый хеш ;) Толку от такого алгоритма - ноль без палочки. Соль должна быть случайная и разная (ну по возможности, из-за конечной длины соли она может изредка совпадать) во всех учетках, ну на крайний случай - базироваться на логине/айдишке. Так что это не паранойя, а затыкание пробоины пальцем ;)
> Тут главное условие если уперли БД.
Тут главное условие - получили доступ к табличке с аккаунтами. Всю бд для этого переть излишне.
bormand 22.04.2014 11:06 # +1
google PBKDF2, bcrypt, scrypt
Vasiliy 22.04.2014 11:13 # 0
bormand 22.04.2014 11:19 # +1
Разломали по словарю тысчонку другую паролей из ста тысяч - это уже профит ;)
Тремя разными солями ты увеличил им время работы в 3 раза (по сравнению с несолёными). Круто, чо.
P.S. Хеш надеюсь не md5?
Vasiliy 22.04.2014 11:23 # 0
bormand 22.04.2014 11:30 # +1
Vasiliy 22.04.2014 11:34 # 0
1. хеш 2. соль. надо только вычислить способ соления (т.е. куда соль прикладывается к паролю спереди сзади в середину или еще как).
bormand 22.04.2014 12:01 # 0
И поэтому этот алгоритм, внезапно, легче исследовать и доказывать его надежность.
> надо только вычислить способ соления
Упрут из кода. Не забывай, что злодеем может оказаться психанувший бывший сотрудник твоей же конторы.
Vasiliy 22.04.2014 12:15 # 0
Я тут вот что подумал что надо конечно в БД хранить соли к паролям юзера + солить еще солью с кода. тогда все станет еще сложней. Ну и обязательно формы авторизации через https
bormand 22.04.2014 12:29 # 0
Самый лол в том, что одноглазники до сих пор до этого не додумались :) Пароли летают прямо открытым текстом.
Vasiliy 22.04.2014 12:47 # 0
eth0 22.04.2014 19:21 # +1
Поскольку 99% разработчиков небогаты фантазией, то, если известен хотя бы один пароль на ресурсе, соль можно и набрутить. Или даже алгоритм соления.
Как я написал ниже, у меня была база хэшей и солей, но неясно, каких. Ну, фигле, зарегал нового пользователя, поставил пароль 123456, посмотрел хэш, соль, засунул в генератор и нашёл, что алгоритм примитивный.
Явсегдабудучитатьвесьтредпереддобавление мкомментария.
Но вектор атаки вполне очевидный.
guest 22.04.2014 19:25 # 0
Lokich 22.04.2014 12:51 # 0
bool setcookie ( string $name [, string $value [, int $expire = 0 [, string $path [, string $domain [, bool $secure = false [, bool $httponly = false ]]]]]] )
>Тут главное условие если уперли БД.
с таким подходом из даже из базы воровать не надо, достаточно XSS
пароль должен 1 раз передаваться на сервер, чтобы там сравнить хеш, и все, дальше идентификатор сессии.
bormand 22.04.2014 13:44 # +1
В идеале он вообще не должен никуда передаваться ;)
Lokich 22.04.2014 14:21 # 0
guest 22.04.2014 14:25 # +1
Lokich 22.04.2014 14:40 # +2
а так, да, помечтать можно
bormand 22.04.2014 14:46 # +1
Ну если не srp -так любой challenge-response на жс наваять можно.
Lokich 22.04.2014 15:03 # 0
но вообще, это на уровне браузера должно работать, а не амебного JS
bormand 22.04.2014 15:13 # 0
Само собой. Причем в идеале это должно быть какое-то особое окошко, которое никак нельзя изобразить с помощью хтмл и жс.
Lokich 22.04.2014 15:29 # −1
bormand 22.04.2014 15:33 # 0
Не-не-не. Я себе это так представляю. В самом хтмл будет только кнопка "войти" (без ограничений по дизайну, просто кнопка). И дальше браузер будет показывать свое всплывающее окно, которое юзер всегда сможет отличить от любой верстки. Можно воспользоваться затенением всего браузера, как в UAC семерочки, а может быть как в фаерфоксе сейчас выпадает окошко запомнить пароль...
Ну и юзер должен привыкнуть, что пароль он вводит только в это окошко, и никуда больше.
Иначе толку от всего этого SRP в браузере - ноль.
guest 22.04.2014 17:06 # 0
Это совсем не то, т.к. от митма оно не защищает вообще никак.
guest 22.04.2014 17:06 # 0
И причем тут браузеры? TLS-SRP это стандарт, часть TLS. Ну согласен, должны. Но у меня оно вообще нигде еще не работало. Есть желающие попробовать, кстати?
guest 22.04.2014 18:49 # 0
guest 22.04.2014 19:09 # 0
?
bormand 22.04.2014 20:18 # +1
Потому что если окошко для ввода пароля можно сэмулировать на хтмл/жс - то страничка может получить и отправить этот пароль безо всяких SRP куда надо. Сделают тот же самый MITM с подменой формы/скриптов, что и с жсной реализацией, да и всё.
Короче без отдельного окошка браузерное SRP будет ничуть не безопасней, чем если его запилить на жс.
Иллюзия безопасности хуже ее отсутствия ;)
guest 22.04.2014 22:08 # 0
bormand 22.04.2014 23:25 # 0
Какие пробовал?
guest 23.04.2014 12:23 # 0
http://web.archive.org/web/20111018150520/http://trustedhttp.org/wiki/TLS-SRP_in_OpenSSL
Ну и google:tls-srp openssl
guest 23.04.2014 12:30 # −1
bormand 22.04.2014 20:57 # +1
Кстати, есть еще одна тонкая проблема: SRP никак не защищает от хуёвых паролей. А из-за того, что пароль никогда не будет доступен серверу - он не сможет проверить, удовлетворяет ли этот пароль требованиям безопасности...
Т.е. придется еще и политику паролей форсить на уровне браузера ;( Я это вижу так - при регистрации сайт указывает минимальные требования к паролю, а браузер проверяет их.
Vasiliy 22.04.2014 13:45 # 0
eth0 22.04.2014 19:17 # +1
Оптимист. Рейт обычно держится около 60%.
Я как-то случайно выкачал базу одного, гм, говнопортала. Там отдельная кулстори.
Если вкратце - разработчики упоролись и выводили в коде страницы (!) хэши (!!) паролей пользователей, мыла (!!!) и всякую подобную инфу. Страница весила мегабайт двадцать.
Скрипт, который выгребал хэши, словарь на шесть гигов, вот и эти самые 60-70% винрейта.
guest 22.04.2014 19:24 # 0
eth0 22.04.2014 20:02 # 0
guest 22.04.2014 20:07 # 0
eth0 22.04.2014 20:41 # 0
bormand 22.04.2014 20:42 # +1
Можешь начинать :)
http://www.php.net/manual/en/ref.password.php
eth0 23.04.2014 17:54 # 0
а) почти безразлично, насколько хорош собой алгоритм, если словарём можно вскрыть 60..90% паролей;
б) будущее за аппаратными средствами, в хранении паролей в базе не будет необходимости. Уязвимости могут существовать, например, всё ещё можно украсть пароль из браузера или памяти сервера, но сливать базу на сотни тысяч паролей будет невозможно.
guest 23.04.2014 18:04 # +1
И это после разоблачений Сноудена?
eth0 23.04.2014 20:24 # 0
guest 23.04.2014 21:50 # 0
eth0 24.04.2014 18:41 # +2
К нему на блатхату пришли журнализды, он собрал мобилки, выключил и спрятал в холодильник.
Это говорит либо о том, что он упорот, либо любит хорошие мистификации, либо статью писал норкоман.
3.14159265 24.04.2014 18:48 # +1
Столлман об этом десятилетиями говорит.
guest 24.04.2014 19:30 # −4
Lokich 24.04.2014 19:43 # 0
Vasiliy 25.04.2014 02:42 # 0
guest 22.04.2014 11:16 # 0
Мож ПРОЦЫ не такие медленные как раньше?
bormand 22.04.2014 11:22 # +3
Vasiliy 22.04.2014 11:15 # 0
guest 22.04.2014 11:16 # 0
Vasiliy 22.04.2014 11:21 # 0
guest 22.04.2014 11:41 # 0
Влом тебе все расписывать.
bormand 22.04.2014 11:35 # +2
guest 22.04.2014 11:41 # +1
chtulhu 22.04.2014 11:41 # +1
А если ты добавил соль в начало, то это не усложнит злоумышленнику жизнь
bormand 22.04.2014 11:58 # +1
Так во всем виноват разраб, забывший добавить кнопочку "забыли пароль"? :)
P.S. А, понял, тут атакующий подбирает соль зная хеш и пароль. Да, вполне логичная атака.
bormand 22.04.2014 10:59 # 0
guest 22.04.2014 11:07 # +1
bormand 22.04.2014 11:16 # +1
Ну вот научатся браузеры в SRP - будет кошерно. Сам жду этого дня ;(
guest 22.04.2014 11:19 # +1
Dart_Sergius 22.04.2014 11:47 # +1
chtulhu 22.04.2014 11:29 # +1
Соль можно хранить в базе, она не секретна и нужна для того, чтобы порадовать злоумышленника и не дать ему подобрать пароли по радужным таблицам
Vasiliy 22.04.2014 11:36 # −3
guest 22.04.2014 11:42 # +1
Vasiliy 22.04.2014 11:44 # −3
guest 22.04.2014 11:46 # +1
Vasiliy 22.04.2014 11:50 # −3
guest 22.04.2014 13:57 # +1
guest 22.04.2014 11:06 # +1