Как сделать восстановление пароля
Как сделать восстановление пароля
В этом разделе помещены уроки по PHP скриптам, которые Вы сможете использовать на своих ресурсах.
Фильтрация данных с помощью zend-filter
Когда речь идёт о безопасности веб-сайта, то фраза «фильтруйте всё, экранируйте всё» всегда будет актуальна. Сегодня поговорим о фильтрации данных.
Контекстное экранирование с помощью zend-escaper
Обеспечение безопасности веб-сайта — это не только защита от SQL инъекций, но и протекция от межсайтового скриптинга (XSS), межсайтовой подделки запросов (CSRF) и от других видов атак. В частности, вам нужно очень осторожно подходить к формированию HTML, CSS и JavaScript кода.
Подключение Zend модулей к Expressive
Expressive 2 поддерживает возможность подключения других ZF компонент по специальной схеме. Не всем нравится данное решение. В этой статье мы расскажем как улучшили процесс подключение нескольких модулей.
Совет: отправка информации в Google Analytics через API
Предположим, что вам необходимо отправить какую-то информацию в Google Analytics из серверного скрипта. Как это сделать. Ответ в этой заметке.
Подборка PHP песочниц
Подборка из нескольких видов PHP песочниц. На некоторых вы в режиме online сможете потестить свой код, но есть так же решения, которые можно внедрить на свой сайт.
Совет: активация отображения всех ошибок в PHP
При поднятии PHP проекта на новом рабочем окружении могут возникнуть ошибки отображение которых изначально скрыто базовыми настройками. Это можно исправить, прописав несколько команд.
Агент
PHP парсер юзер агента с поддержкой Laravel, работающий на базе библиотеки Mobile Detect.
Как восстановить доступ к устройству или аккаунту, если потерял пароль
Введение следует отметить, что рекомендации, приведенные в следующем материале, служат не для отслеживания и перехвата паролей. Мы хотим только подсказать, как восстановить доступ к своей информации, хранящейся на зашифрованном устройстве или аккаунте интернет-сервиса, если вдруг забудете пароль.
Как оказывается, это не так уж и маловероятно. Не один пользователь испытывал проблемы с входом в систему Windows после возвращения из двухнедельного отпуска. Не говоря о распаковке зашифрованных много лет назад архивов ZIP или входе на аккаунт, которым не пользовался много лет.
Неудивительно, что пользователи, которые не используют один и тот же пароль для всех случаев (вполне благоразумно), время от времени вынуждены восстанавливать или сбрасывать пароли.
Пароль – степень защиты, риск взлома и щепотка теории
Безопасность, которую обеспечивают надежные пароли, и связанный с ними риск взлома – это невероятно сложные вопросы. Теория теорией, а большой технический прогресс в последние годы очень существенно повлиял на вероятность захвата конфиденциальных данных, учетных записей в интернет-магазинах или цифровых идентификационных данных пользователей. Длинный и сложный пароль обеспечивает только поверхностную безопасность – в следующей части материала мы расскажем о том, почему.
С одной стороны, вычислительная мощность относительно небольшого компьютерного кластера (группы взаимосвязанных компьютеров для получения высокой производительности), который располагает лишь двумя дюжинами видеокарт, настолько велика, что он может в течение нескольких часов «взломать» пароль, состоящий из восьми символов, через обычный перебор всех возможных комбинаций символов.
Конечно, можно представить контраргумент, что увеличение длины пароля приведёт к росту времени, необходимого для подбора пароля. Хотя это правильное предположение, оно работает только в теории. Злоумышленники некоторое время назад перешли на другие методы взлома паролей. Даже базы ярлыков, известные как массивы символьных вычислений, которые собирают значения хеширования для сокращения времени определения пароля, уходят медленно в прошлое.
Пароль – список кодов доступа
Прежде всего, из-за многочисленных случаев массового взлома аккаунтов в сервисах интернета, которые имели место в последние годы, в настоящее время в открытом доступе имеется огромное количество широко используемых паролей. В результате этих вторжений были украдены данные миллионов клиентов. Некоторые коды доступа хранились в явном виде и были опубликованы в интернете, другие стали предметом финансовых сделок.
Располагая такой базой паролей, достаточно соединить её с многоязычными словарями, чтобы проводить эффективные атаки. Обработку нескольких миллионов слов можно осуществить гораздо быстрее, чем последовательный перебор биллиарда возможных комбинаций символов.
Однако, на этом не конец, потому что список паролей, похищенных злоумышленниками, даёт информацию об используемых шаблонах для создания пароля. Хотя простые решения, такие как password, 1234. или имена детей больше не используются так часто, как раньше, но включение обычных слов и использование шаблонов по-прежнему на повестке дня.
Большой популярностью пользуется, например, метод замены букв по образцу, используемого в сленге Leet speak. Так, например, слово kalkulator превращается в немного более сложное k4lkul470r. Некоторые пользователи дополняют созданные таким образом пароли названием портала или сервиса. Однако, такие пароли не обеспечивают должного уровня безопасности, потому что давно фигурируют в файлах словарей, циркулирующих в интернете.
С другой стороны есть много аппаратных решений, для которых безопасность оставляет желать лучшего. Например, более ранние версии Android блокируют экран только после пяти неудачных попыток ввода кода. Повторить ввод можно уже по истечении 30 секунд. Если автоматизировать этот процесс, то угадывание четырехзначной последовательности цифр займет не больше 17 часов.
По цене 35 евро можно приобрести специальное устройство – USB Rubber Ducky, которое выполнит это задание. Защита исправлена только в последней версии Android (Зефир). Гораздо безопаснее в этом вопросе оказывается iOS и Windows Phone.
Пароль к учетным записям в сервисах онлайн
Выше мы представили некоторое «закулисье» паролей и методов атак на системы безопасности. Методы создания и запоминания надежных паролей мы описывали в отдельной статье. Остается вопрос сброса паролей. Эта операция часто необходима в случае учетных записей в социальных сетях.
В принципе, любой сервис, такой как интернет-магазин, портал, социальная сеть или тематический форум, предоставляет возможность восстановления доступа к учетной записи по адресу электронной почты. Система автоматически отправляет сообщение владельцу счета, которое содержит специальную ссылку. Нажав её, пользователь может задать новый пароль доступа к сервису.
Это показывает, какое огромное значение имеет защита почтового ящика. Если злоумышленнику удастся получить пароль для электронной почты своей жертвы, он сможет использовать функцию сброса пароля, чтобы добраться до всех сайтов, зарегистрированных с данного адреса электронной почты. Поэтому необходимо в определенной степени заботиться о безопасности почтового ящика.
Кроме функции сброса паролей, существует ещё несколько решений для забывчивых. К ним относятся, в частности, генерация кода с помощью приложения или получение пароля в СМС-сообщении. Google и другие крупные порталы позволяют даже использовать такие методы защиты, как двухэтапная аутентификация. Также существует система сброса паролей через правильный ответ на «секретный» вопрос. На такая защита мало чего стоит, так как злоумышленники могут получить ответ путём социальной инженерии (social engineering).
Доступ к компьютеру Windows
Не впадайте в панику, если вдруг забудете пароль к учетной записи в Windows. Получить доступ к системе можно без использования инструментов для взлома паролей. Вся операция несколько рискованная, но занимает всего от несколько десятков минут. Работает даже в Windows 10.
Восстановление доступа к Windows без установочного диска
Когда появится экран входа в систему, выключите компьютер, нажав выключатель на задней панели корпуса или вытащив вилку из розетки.
Внимание! Редакция не несет ответственности за возможные повреждения компьютера. Хотя такое случается редко.
Нажмите на ссылку X:/windows/system32/ru-RU/erofflps.txt, чтобы открыть текстовый редактор. В окне редактора выберите меню Файл → Открыть и перейти в каталог /windows/system32 на системном разделе C:
Пароль – доступ для мобильных устройств
Когда вы потеряете доступ к учетной записи в мобильном устройстве, совсем не обязательно его сбрасывать, теряя все данные. Имея доступ к учетной записи Google, вы можете воспользоваться приложением для разблокировки экрана блокировки – так, как это возможно в случае других приложений.
Бесплатное приложение для смартфонов с Android это [Free] Screen Lock. Кроме того, доступно коммерческое приложение Screen Lock Pro. Оба приложения очень просты в использовании. Чуть больше усилий требуется для удаления блокировки посредством Android Debug Bridge.
Пользователи заблокированного iPhone имеют в своём распоряжении только методы, предложенные производителем. Кроме них, не существует никаких трюков, которые помогли бы снять блокировку экрана. Но, по крайней мере, Вы можете восстановить устройство из ранее созданной резервной копии на iTunes, так что вам не придется настраивать всё заново, как это имеет место при использовании безопасного режима.
Как безопасно реализовать восстановление пароля в PHP
Эта статья призвана познакомить разработчиков PHP с тем, как правильно реализовать функцию восстановления пароля в PHP. Все мы были когда-то начинающими разработчиками, когда-то мы считали md5 функцию безопасной.
Основная мотивация при написании этой статьи заключается в том, что порывшись в интернете я нашел море рекомендаций на этот счет, но большинство из них не имели ничего общего с безопасностью. В 2017 году 9 из 10 советов в выдаче гугла, да и по сей день довольно много в выдаче небезопасных советов. Хотелось бы немного внести свой вклад и дать людям безопасные варианты.
Теперь, когда с этим разобрались, давайте перейдем к делу.
Как (не) стоит реализовать механизм восстановления пароля в PHP
Ну все мы знаем этот функционал. Обычно это делается так: мы запрашиваем почту, которую указал пользователь при регистрации, затем отправляем на почту с ссылкой восстановления пароля. Обычно эта ссылка содержит в себе конкретную информацию, которая позволит приложению узнать, какой пользователь пришел, чтобы восстановить пароль. Затем пользователь указывает новый пароль и авторизуется.
Если вы вдруг задумались “почему бы им просто не отправить мне на почту пароль, который они и так знают”, то скорее всего вы не понимаете как правильно хранить пароли на сервере. Пароли, которые помещаются в базу всегда должны проходить процесс хеширования.
Не храните текстовые пароли в базе данных.
Ваш сайт хэширует ваши пароли перед сохранением их в БД? Хорошо, давайте двигаться дальше.
Возвращаясь к отправке по электронной почте пользователям ссылки, чтобы они могли сбросить свой пароль. Предположим, что url-адрес восстановления пароля вашего сайта:
Тривиальным решением (опять же, как видно из лучших результатов Google) может быть сделать что-то вроде:
Это не безопасно. Почему? Потому что если злоумышленник знает адрес электронной почты кого-то, он может изменить его пароль. Это наше второе “нет”.
Не используйте общедоступную информацию в качестве маркера восстановления пароля
Вы можете подумать: “Какая еще информация у меня есть от пользователя, которую я могу использовать? Может быть, user_id?”
Это тоже небезопасно. Почему? Хотя злоумышленник, скорее всего, не может знать, у какого пользователя он меняет пароль, он может заблокировать людей из их учетных записей. Кроме того, если ваш сайт имеет какую-то функцию администратора, то user_id=1, скорее всего, будет пользователем администратора, и теперь вы попали в мир боли.
Не используйте последовательные идентификационные номера в качестве маркеров восстановления пароля.
На этом этапе вы, вероятно, поняли, что не можете напрямую использовать что-либо из базы данных. Но в попытке обойти это вы думаете: “давайте использовать md5, который должен помешать злоумышленнику угадать пользователя правильно?”. Так что попробуйте что-нибудь вроде:
Вы даже можете получить его непосредственно в базе данных, используя функцию md5 в mysql!
Это тоже небезопасно. Почему? Потому что если я могу угадать, как генерируется токен, например: посмотрев на мой токен (или вы опубликовали код в github, или, скажем, я выяснил, какие из топ-10 реализаций google вы копируете и вставляете), то я могу сгенерировать токен для всех.
Следует проектировать системы, исходя из предположения, что враг сразу же получит полное знакомство с ними
Не ставьте свою безопасность в зависимость от того, что ваш код является неизвестным злоумышленнику. Этого не будет.
Вот несколько вариантов из первой выдачи гугла:
Все три попадают в 4 пункт. Если я узнаю, как строится ваш хэш, я смогу создать токены восстановления для всех ваших пользователей. Даже если вы уверены, что 4 не относится к вам, не используйте их. Они уязвимы для других атак, которые выходят за рамки этой статьи, но не стесняйтесь нарушать их самостоятельно.
Кроме того, все они проваливают “атаку недовольного (бывшего) коллеги”, то есть: ваш коллега или вы сами можете создавать токены для любого пользователя, которого вы хотите, не взаимодействуя с системой. Это не очень хорошее свойство, чтобы иметь в такой системе.
Не создавайте токены таким образом, который также может быть сгенерирован в автономном режиме кем-то со знанием системы
– Но подождите!” вы можете подумать. “А что, если мы используем шифрование вместо хэширования? Я могу держать ключ вне контроля версий, и мы должны предотвратить эту проблему сверху, верно?”
Пока вы можете это сделать:
Это приносит больше проблем, чем решает.
Не используйте шифрование, если вы можете избежать этого. Это вызывает больше проблем, чем решает.
На данный момент, вероятно, больше нет способов использовать данные, которые у вас уже есть для создания маркера сброса. Вместо этого вам придется генерировать его из каких-то других данных и хранить где-то, например, в новом столбце в таблице пользователей. Это действительно устраняет проблему создания действительных токенов в автономном режиме.
Генерируйте токены, которые не зависят от пользовательских данных.
С этого момента мы меняем модель атаки. До сих пор злоумышленник угадывал токен, связанный с конкретным пользователем. Это уже невозможно. Все, что может сделать злоумышленник, – это вызвать сброс пароля для пользователя и угадать, какой токен был сгенерирован.
“Так как же я буду генерировать этот токен?- ты сам себя спрашиваешь. Может быть, использовать что-то, что PHP уже дает нам, например uniqid:
Это должен быть случайный, уникальный идентификатор, верно.
Выходные данные uniqid генерируются исключительно из текущего времени сервера. Злоумышленник контролирует, когда он запрашивает изменение пароля, поэтому даже если разрешение, которое он использует, составляет до микросекунд, он, вероятно, может сузить диапазон до пары миллисекунд, что делает идентификатор угадываемым за пару тысяч попыток
Не создавайте свои токены на основе времени,они угадываются.
Примечание: хэширование угадываемого токена не добавляет никакой безопасности. Это похоже на то, как когда вы угадываете чей-то пароль, вам все равно, каков хэш его пароля, если вы можете просто догадаться, что пользователь ленив и его пароль буквально “пароль”.
В этот момент Вы, будучи умным парнем/девушкой, можете сказать: “зачем мне использовать uniqid, если я хочу что-то случайное. Я просто использую функции случайных чисел PHP!”
Дело в том, что (многие) генераторы случайных чисел являются детерминированными. Если вы знаете несколько выходов, вы действительно можете знать, каким будет следующий. Да, вы все правильно поняли. Нет, я не сумасшедший. Если вы мне не верите, прочтите вот это. Не забудь свою шляпу из фольги, когда вернешься.
И rand (), и mt_rand () уязвимы для такого рода атак. Менее известное значение lcg_value также есть. PHP 7 ввел random_bytes () и random_int (), которые возвращают случайные данные способом, безопасным для такого рода приложений, то есть они являются криптографически защищенными генераторами случайных чисел.
Не используйте rand, mt_rand или lcg_value в качестве источника случайных чисел для чего-либо связанного с безопасностью.
Используйте random_int или random_bytes для безопасных случайных чисел.
Так как же построить случайный и непредсказуемый токен?
Вот и все, мы закончили. У нас есть безопасный токен, который можно использовать для восстановления пароля.
Теперь вы можете пойти дальше и реализовать остальную функциональность. Однако есть пара дополнительных вещей, которые вам нужно иметь в виду, когда вы это делаете.
Сброшенные токены не должны быть действительны вечно, поэтому вы должны добавить новый столбец рядом с токеном с датой создания и использовать его, чтобы проверить, следует ли его принять или нет. Кроме того, они должны быть одноразовыми токенами. Поэтому, как только пользователь сбросит свой пароль, удалите маркер.
Установите срок службы для ваших жетонов сброса, чем короче, тем лучше. 1 час, вероятно, разумное значение по умолчанию.
Сбросьте жетоны сброса после использования.
Резюмируем
Собрав все это вместе, ваш общий поток мыслей должен выглядеть примерно так:
Помни, чего не стоит делать:
Помни, как стоит делать:
Я забыл логин и пароль от аккаунта. Как я могу их восстановить?
Укажите полезную информацию
Если вас спросят, почему у вас нет доступа к аккаунту, добавьте информацию, которая может нам помочь.
Если указанная информация совпадет с данными, которые есть у нас, это поможет восстановить доступ к аккаунту.
Видео
Логин: что это?
Слово «Логин» перешло к нам от англичан. Вот его разновидности на английском языке: login, username, login name. Все эти слова являются синонимами и имеют одно смысловое значение — имя пользователя, но также мы привыкли слышать и другие названия, такие, как никнейм, ник.
Логином принято считать вход в систему компьютера, всевозможные интернет-сервисы, социальные сети и так далее.
Так вот, логин — это своего рода, уникальная запись, используемая при регистрации, для идентификации личности. При помощи которой Вы можете не только войти в вышеприведенные сервисы, но также скрыть свои настоящие данные (Фамилию, имя), придумав какой-нибудь интересный ник.
Хотя многие и не скрывают это, а наоборот используют свое имя и фамилию.
Также при помощи логина можно выразить свою индивидуальность, придумав необычный псевдоним…
Как восстановить пароль
Если вы перепробовали все возможные варианты, но войти так и не смогли, остается только восстановить пароль. Делается это так:
2. В левом верхнем углу, там, где вход в почту, нажимаем на «Забыли пароль?».
3. Указываем адрес своего ящика и нажимаем «Восстановить».
По номеру телефона
Если почта привязана к телефону, появится вот такое сообщение:
Вводим код с картинки, нажимаем «Получить код по SMS». Появится окошко:
Осталось дождаться смс-сообщения на привязанный номер телефона (обычно приходит в течение минуты) и получить код.
Ну а дальше вводим код, нажимаем «Готово» и меняем пароль.
Через другой электронный ящик
Если вы заранее подстраховались и указали дополнительный почтовый ящик, тогда увидите следующее окно:
В пустое поле вводим плохо читаемый код с левой стороны и жмем «Восстановить», после чего получаем следующее сообщение:
Далее, заходим в этот, указанный только что ящик, и ищем письмо от отправителя «Служба поддержки ».
Открываем его и видим, что для восстановления нужно перейти по ссылке.
Переходим и далее нам дают возможность придумать новый пароль.
Печатаем его и в одно и во второе поле, и входим в почту. Теперь попасть в нее можно будет по вот этому паролю.
Через секретный вопрос
Раньше при регистрации на нужно было выбрать какой-нибудь секретный вопрос (ответ на который знаете только вы) и указать ответ на него. Особенно это актуально для старых ящиков, которым более двух лет.
Если вы его указывали, тогда появится такое окошко:
Нужно просто напечатать ответ на этот вопрос и если он окажется правильным, то система сразу же позволит поменять пароль от ящика, после чего откроет его.
Как создать пароль
К созданию пароля нужно отнестись еще серьезнее, чем к созданию логина!
Так как если его взломают, то вся Ваша закрытая информация станет доступной злоумышленникам!
Запомните: никогда не делайте пароль идентичным Вашему логину! Потому что взломщики в первую очередь будут вводить именно его!
Также не стоит при подборе пароля использовать свое имя и фамилию, а также данные своих близких, так как эту информацию очень легко раздобыть, например, из тех же социальных сетей…
Вообще в идеале, он не должен состоять из одних только цифр или же букв, для надежности необходимо составлять пароль так, чтобы там было и то, и другое.
Не делайте его слишком коротким, желательно, чтобы было не менее 12 символов и используйте разный язык клавиатуры.
Используйте не только прописные, но и заглавные буквы.
Ну а вообще, на многих сайтах сейчас есть так называемый индикатор сложности пароля — это когда Вы вводите пароль, а система Вам показывает его степень сложности.
Пример приведен ниже, на картинке.
Имейте в виду, что сейчас существуют некие программы для расшифровки, подбора паролей. Программа будет сопоставлять все символы, пока не подберет нужные.
Поэтому чем сложнее будет Ваш пароль тем меньше вероятности его быстрой расшифровки, на это даже может уйти не один десяток лет!
А теперь узнаем, что делать если Вы его забыли…
Восстановление через телефон
Чтобы вернуть страницу, используя привязанный к ней номер, необходимо выполнить следующие действия:
Готово. Можно переходить на главную страницу и использовать новый пароль. В качестве логина вписывается номер телефона, на который пришел код.
Пароль: что это?
Пароль — это некий набор цифр и букв, совсем не обязательно имеющий какой-либо смысл, используемый для входа в системы, а также для идентификации личности.
И еще пароли используют для того, чтобы скрыть личную информацию от посторонних.
Вы забыли пароль, нов аккаунте включена двухфакторная аутентификация
В этом случае восстановить доступ можно только через службу поддержки. Вам потребуется заполнить анкету и указать данные о своем аккаунте максимально подробно.





















