Комментарии 35
Это была исторически первая функция хеширования. Аббревиатура SHA-1 расшифровывается как «безопасный алгоритм хеширования»А куда MD5 исчез — который появился на 3 года раньше? А до MD5 был MD4. А до MD4…
И ведь до сих пор горе-разработчики, насмотревшиеся «курсов PHP», пишут:
$hash = md5(md5($password));
А после SHA-2 был создан SHA-3 — и о нём в статье тоже ни слова.
Ждём статью от «метров безопасности», которые скажут, что первый был DES из 70-х. Главное, что бы они не сказали, что MD5 — это самый последний.
А после SHA-2 был создан SHA-3 — и о нём в статье тоже ни слова.
Да, как же давно это было, вы прямо совсем в историю закопались! Сейчас-то все уже на SHA-256, а некоторые и на SHA-512 сидят! [/sarcasm]
Ответа на вопрос «где» хранить пароли — в статье не содержится, статья не соответствует заголовку.
От таких «статей» больше вреда, чем пользы.
Он знает ваш пароль.
Он хранит ваш пароль в чистом виде, не используя никакого шифрования.
Он не испытывает ни малейшего беспокойства при пересылке паролей через интернет.
В ответ ничего не остаётся, как уволить такого сотрудника.
А вот как должен поступить веб-разработчик:
Создайте в вашем веб-приложении страницу, куда пользователь сможет ввести свой е-мейл в случае, если он забыл пароль, и таким образом запросить новый пароль.
Ваше приложение сгенерирует уникальные права доступа и привяжет его к пользователю, сделавшему запрос (лично я пользуюсь универсальным индивидуальным идентификатором).
Приложение отправит пользователю е-мейл со ссылкой, ведущей к праву доступа.
Как только пользователь перейдет по ссылке, приложение подтвердит правильность доступа и даст пользователю возможность поменять пароль.
Видите, насколько возросла безопасность приложения благодаря этим простым шагам?
Сотрудник может и не знать пароль, то что Вам пришло с паролем от него, не означает что он его знает. Но даже если он его знал — где тут проблема неясно абсолютно, Вы что, неспособны его поменять?
Сотрудник может и не хранить пароль в чистом виде, классический сценарий подразумевает посылку пароля и сохранение его в шифрованном виде. Мало того, в некоторых (редко применяемых случаях) возможность присылки пароля в открытом виде не означает хранения его в чистом виде.
Сотрудник понимает, что если задание пароля завязано на е-маил и только на него, то одна и только одна «парольная точка», а «многократная присылка на почту ссылок для изменения» это «карго-культ» создающий иллюзию безопасности, а не «повышающий ее благодаря простым шагам».
По поводу того, как должен был поступить веб-разработчик.
Он должен был поступить соответственно ТЗ предоставленному заказчиком.
Неожиданно, да? Но абсолютно верно. Если поступил по ТЗ — прав, если не по ТЗ — не прав.
Если у разработчика спрашивают мнение по поводу ТЗ, он может его высказывать, но после принятия ТЗ — он должен делать всё по ТЗ и только так. Всё на этом.
А если нет ТЗ? Да и заказчика нет, есть начальство.
Какая разница между "написать себе ТЗ по решению бизнес-задачи и имплементировать его в коде" и "решить бизнес-задачу в коде"? Сунуть его на подпись человеку, который не понимает ничего в нём и прикрыть тем самым себе разные места?
Сунуть его на подпись человеку, который не понимает ничего в нём и прикрыть тем самым себе разные места?Вы удивитесь — суть технического задания не в том чтобы описать себе процессы разработки, а в том чтобы согласовать «задумку» условного заказчика с реально работающим кодом. И ТЗ — это не только про «реализовать контроллеры a, b, и c, используя протоколы x, y, z», но и «В верхней части сайта расположено меню, содержащее следующие пункты:…, в дизайне представленном в приложении (6). При клике на пункт… ». То есть вполне себе сценарий использования, который доступен обывателю.
Вы удивитесь, но для некоторых сценарии использования — это входные данные для составления ТЗ, если оно составляется. Может в мире госзаказов и гостов всё несколько по другому, конечно.
Передача паролей в открытом виде имеет право на жизнь. Например в случае телефонной (голос или смс), почтовой (бумажной) или офисной поддержки. Но это должен быть одноразовый пароль.
Технологии, где даже сотрудник не знает такого пороля есть (очень надеюсь, что банки, дающие конверты с паролями и пинами их используют), но дороги.
В приложении хранится только email или телефон, при входе отправляется письмо (или смс) с одноразовым кодом, код валиден только 1 час + связан с email или телефоном.
Плюсы (из-за отсутствия паролей):
+ Пользователи не смогут делать простые пароли
+ Пользователь никогда не забудет свой пароль, не нужно делать механизм восстановления пароля
+ При краже базы пользователей не получится узнать пароли пользователей от других сервисов (а то ведь многие используют на сторонних сервисах почту и пароль от этой почты)
Минусы:
— Получив доступ к почте пользователя можно войти в любой сервис, но тут уже итак полный провал, если получили доступ к вашей почте то пиши пропало, даже там где есть пароли, там можно использовать восстановление
Ах да, если по одному аккаунту 3 раза ввели неверный код, то все верные активные коды этого аккаунта автоматически удаляются, во избежание возможного брутфорса
Теперь вам известно три вещи о вашем сотруднике:Надо добавить что еще вам следует проверить себя на наличие параноидального синдрома.
Он знает ваш пароль.
Он хранит ваш пароль в чистом виде, не используя никакого шифрования.
Пароль обычно рандомно генерируется системой и ей же автоматически отправляется, и следовательно «сотрудник» про ваш пароль ни сном ни духом. И естественно пароль не хранится в открытом виде, после отсылки в базе останется только хеш пароля. В остальном — отправлять разовый ключ доступа или сгенерированный системой пароль почти одно и то же, разница в том что поведением разового ключа мы можем управлять (например не пускать второй раз, что впрочем можно реализовать и с временным паролем).
PS: В итоге в статье не только не рассказано как (точнее рассказано как не надо) хранить, но и тема где совершенно не раскрыта. Ожидал откровения и хитромудрых подходов, получил тухлый помидор, которым только и можно что пульнуть в автора сего опуса.
Чтобы слить базу и подставлять из неё?
Зачем в ней хэш пароля? Пароль проверился при выдаче куки. В куке лежит подписанный юзерид, срок действия, возможно какой-то отпечаток окружения (айпи, юзерагент и т. п.), возможно конкретный набор прав пользователя. Сервер проверяет только подпись (свою же или доверенного аутентифицирующего/авторизационного сервера) без всяких обращений к базе и дальше полученным данным доверяет (вариант — ещё проверяет в списке отозванных, как правило в какой-то быстрой базе типа редиса)
Автор, почему ничего не сказано про соль (salt)? Вы считаете это неактуальным или как? Под веб пишу редко, но помню, что раньше делали md5(pass.salt) и было нормально, т.е. от радужных таблиц уже спасало.
РНР-безопасность: где и как хранить пароли. Часть 1