Как сделать смену пароля php

Обновлено: 30.06.2024

ОТВЕТЫ

Ответ 1

Не самая надежная защита паролем здесь, поэтому, пожалуйста, не используйте это для защиты номеров кредитных карт или чего-то очень важного.

Просто отбросьте весь следующий код в файл с именем (secure.php), измените пользователя и перейдите от "admin" к тому, что вы хотите. Затем прямо под теми строками, где он говорит include ( "secure.html" ), просто замените это на имя файла, который вы хотите, чтобы он мог видеть.

Если вы хотите добавить дополнительный уровень защиты, я бы рекомендовал вам взять файл (secure.html) за пределами корневой папки вашего сайта [/public_html] и разместить его на том же уровне, что и этот каталог, поэтому что он не находится внутри каталога. Затем в PHP script, где вы включаете файл, просто используйте ( "../secure.html" ). Это (../) означает возврат каталога для поиска файла. Выполняя это так, единственный способ получить доступ к содержимому, которое находится на странице (secure.html) через (secure.php) script.

Ответ 2

Это немного поздно, но я хотел ответить, если кто-то еще зашел на эту страницу и обнаружил, что самый высокий ответ был немного не в порядке. Я немного улучшил систему. Обратите внимание, это все еще не удивительно безопасно, но это улучшение.

Сначала подготовьте файл с паролями:

hash_generate.php:

Возьмите выходные данные $userhash и $passhash и поместите их в два текстовых файла: user.txt и pass.txt соответственно. Другие предложили поместить эти текстовые файлы выше public_html, это хорошая идея, но я просто использовал .htaccess и сохранил их в папке с именем "stuff"

.htaccess

Теперь никто не может заглянуть в хеш. Далее идет ваш index.php:

index.php:

Ответ 3

И форма входа на страницу.
(На той же странице, прямо под указанным выше кодом)

Ответ 4

Создайте два файла:

защиты-this.php

login.php:

Затем потребуйте protect-this.php в ТОПе файлов, которые вы хотите защитить:

password protect php

После заполнения правильного пароля пользователь попадает в index.php. Пароль хранится 30 дней.

PS: это не сосредоточено, чтобы быть безопасным, но быть практичным. Хакер может переборщить это. Используйте его, чтобы не пускать обычных пользователей. Не используйте его для защиты конфиденциальной информации.

Ответ 5

Я бы просто искал переменную $_GET и перенаправил пользователя, если это не правильно.

Ответ 6

Обновление: скоро опубликую несколько примеров, поэтому не прогоняйте ни одного примера, мне просто нужно немного отбросить этот ответ.

Если вы хотите использовать сеансы, это лучший способ:

Ответ 7

Это очень помогло мне и сэкономило много времени, простота в использовании и хорошо работает, я даже беру на себя риск изменения и все еще работает.

Довольно хорошо, если вы не хотите потерять много времени на этом:)

Ответ 8

В основном то, что я сделал здесь, - это сделать страницу в одном php файле, где, когда вы вводите пароль, если это правильно, он скроет экран пароля и доставит материал, который защищен вперёд. а затем heres css, который является важной частью, потому что он заставляет классы скрывать и показывать разные части страницы.

Ответ 9

Ответ 10

Вы можете использовать простой, если с формой:

Ответ 11

вы можете указать пароль в своем php-коде и разрешить только пользователям, у которых есть секретный URL:

Ответ 12

Простой способ защитить файл без необходимости отдельной страницы входа - просто добавьте это вверху страницы:

Эта статья призвана познакомить разработчиков PHP с тем, как правильно реализовать функцию восстановления пароля в PHP. Все мы были когда-то начинающими разработчиками, когда-то мы считали md5 функцию безопасной.

Основная мотивация при написании этой статьи заключается в том, что порывшись в интернете я нашел море рекомендаций на этот счет, но большинство из них не имели ничего общего с безопасностью. В 2017 году 9 из 10 советов в выдаче гугла, да и по сей день довольно много в выдаче небезопасных советов. Хотелось бы немного внести свой вклад и дать людям безопасные варианты.

Теперь, когда с этим разобрались, давайте перейдем к делу.

Как (не) стоит реализовать механизм восстановления пароля в PHP

Ну все мы знаем этот функционал. Обычно это делается так: мы запрашиваем почту, которую указал пользователь при регистрации, затем отправляем на почту с ссылкой восстановления пароля. Обычно эта ссылка содержит в себе конкретную информацию, которая позволит приложению узнать, какой пользователь пришел, чтобы восстановить пароль. Затем пользователь указывает новый пароль и авторизуется.

Не храните текстовые пароли в базе данных.

Ваш сайт хэширует ваши пароли перед сохранением их в БД? Хорошо, давайте двигаться дальше.

Возвращаясь к отправке по электронной почте пользователям ссылки, чтобы они могли сбросить свой пароль. Предположим, что url-адрес восстановления пароля вашего сайта:

Тривиальным решением (опять же, как видно из лучших результатов Google) может быть сделать что-то вроде:

Это не безопасно. Почему? Потому что если злоумышленник знает адрес электронной почты кого-то, он может изменить его пароль. Это наше второе “нет”.

Не используйте общедоступную информацию в качестве маркера восстановления пароля

Вы можете подумать: “Какая еще информация у меня есть от пользователя, которую я могу использовать? Может быть, user_id?”

Это тоже небезопасно. Почему? Хотя злоумышленник, скорее всего, не может знать, у какого пользователя он меняет пароль, он может заблокировать людей из их учетных записей. Кроме того, если ваш сайт имеет какую-то функцию администратора, то user_id=1, скорее всего, будет пользователем администратора, и теперь вы попали в мир боли.

Не используйте последовательные идентификационные номера в качестве маркеров восстановления пароля.

На этом этапе вы, вероятно, поняли, что не можете напрямую использовать что-либо из базы данных. Но в попытке обойти это вы думаете: “давайте использовать md5, который должен помешать злоумышленнику угадать пользователя правильно?”. Так что попробуйте что-нибудь вроде:

Вы даже можете получить его непосредственно в базе данных, используя функцию md5 в mysql!

Это тоже небезопасно. Почему? Потому что если я могу угадать, как генерируется токен, например: посмотрев на мой токен (или вы опубликовали код в github, или, скажем, я выяснил, какие из топ-10 реализаций google вы копируете и вставляете), то я могу сгенерировать токен для всех.

Следует проектировать системы, исходя из предположения, что враг сразу же получит полное знакомство с ними

Клод Шеннон

Не ставьте свою безопасность в зависимость от того, что ваш код является неизвестным злоумышленнику. Этого не будет.

Вот несколько вариантов из первой выдачи гугла:

Все три попадают в 4 пункт. Если я узнаю, как строится ваш хэш, я смогу создать токены восстановления для всех ваших пользователей. Даже если вы уверены, что 4 не относится к вам, не используйте их. Они уязвимы для других атак, которые выходят за рамки этой статьи, но не стесняйтесь нарушать их самостоятельно.

Кроме того, все они проваливают “атаку недовольного (бывшего) коллеги”, то есть: ваш коллега или вы сами можете создавать токены для любого пользователя, которого вы хотите, не взаимодействуя с системой. Это не очень хорошее свойство, чтобы иметь в такой системе.

Не создавайте токены таким образом, который также может быть сгенерирован в автономном режиме кем-то со знанием системы

– Но подождите!” вы можете подумать. “А что, если мы используем шифрование вместо хэширования? Я могу держать ключ вне контроля версий, и мы должны предотвратить эту проблему сверху, верно?”

Пока вы можете это сделать:

Это приносит больше проблем, чем решает.

  1. Вам нужно найти способ надежно обращаться с ключом.
  2. Если ключ будет скомпрометирован, и вы захотите его изменить, вы сломаете предыдущие токены.
  3. В зависимости от алгоритма и размера ключа Ключ может быть восстановлен, чему способствует тот факт, что открытый текст и алгоритм известны (см. Не 4).
  4. Если ключ восстановлен (либо с помощью bruteforce, либо из-за другой слабости где-то), то злоумышленник (или ваш коллега, см. Пункт 5 может генерировать токены сброса для любого пользователя в автономном режиме.

Не используйте шифрование, если вы можете избежать этого. Это вызывает больше проблем, чем решает.

На данный момент, вероятно, больше нет способов использовать данные, которые у вас уже есть для создания маркера сброса. Вместо этого вам придется генерировать его из каких-то других данных и хранить где-то, например, в новом столбце в таблице пользователей. Это действительно устраняет проблему создания действительных токенов в автономном режиме.

Генерируйте токены, которые не зависят от пользовательских данных.

С этого момента мы меняем модель атаки. До сих пор злоумышленник угадывал токен, связанный с конкретным пользователем. Это уже невозможно. Все, что может сделать злоумышленник, – это вызвать сброс пароля для пользователя и угадать, какой токен был сгенерирован.

“Так как же я буду генерировать этот токен?- ты сам себя спрашиваешь. Может быть, использовать что-то, что 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 час, вероятно, разумное значение по умолчанию.

Сбросьте жетоны сброса после использования.

Резюмируем

Собрав все это вместе, ваш общий поток мыслей должен выглядеть примерно так:


Здесь могла бы быть ваша реклама


Помог: 3 раз(а)

Секрет
Теперь, когда вы уже наверняка второпях отправили свой запрос,
я расскажу вам простой секрет, который сэкономит вам уйму ожиданий,
даже если первый ответ по теме последуем сразу же.

После этого приходится начинать уточнять этим неграмотным что мне надо.
Они что, сами читать не умеют? А уточнять приходится.
И иногда пока они переварят то что я им скажу проходит и не одна ночь..

Уверен что если бы я им сказал что у меня есть
фиолетовый квадрат, и нужно превратить его в синий треугольник
и я пытался взять кисточку, макнуть в банку и поводить ей по квадрату
но почему то кисточка не принимала цвет краски в банке,
то на мой вопрос - где взять правильные банки мне бы ответили гораздо быстрее
предложив её открыть, а не тратить еще стольник на жестянку.

Поэтому с тех пор я строю свои вопросы по проверенной давным давно схеме:
Что есть
Что нужно получить
Как я пытался
Почему или что у меня не получилось.


На последок как оно происходит на форумах

Отредактировано модератором: Uchkuma, 26 Апреля, 2011 - 10:21:12

В первую очередь попробуйте восстановить пароль через соответствующую форму на странице входа в административную панель (ссылки "Забыли пароль", "Напомнить пароль" и пр.). Пароль будет отправлен на контактный ящик администратора.

Если по какой-то причине такой способ не подходит (например, у вас нет доступа к необходимому ящику), в большинстве случаев можно сменить или сбросить пароль через базу данных, выполнив SQL-запрос или изменив значения вручную.

SQL-запрос

Для выполнения SQL-запроса необходимо:


ВАЖНО: Перед выполнением SQL-запроса необходимо проверить, какой префикс таблиц используется в базе данных. Эту информацию можно найти в конфигурационном файле сайта.

Изменение данных вручную

Для изменения пароля вручную вам будет нужно:

  1. В панели управления аккаунтом перейти в раздел Базы данных и кликнуть на ссылку phpMyAdmin (под нужной базой или сверху над списком баз, если у вас включен полный доступ).
  2. В phpMyAdmin кликнуть на имя нужной базы.
  3. Изменить данные в таблице с пользователями - подробнее смотрите в инструкциях ниже.

Drupal 8

Способ 1

На всех серверах виртуального хостинга установлен Drush (утилита для управления сайтами на Drupal), поэтому проще всего сменить пароль следующим образом:

1. Откройте SSH-консоль в панели управления либо подключитесь к серверу по SSH.

2. Перейдите в директорию нужного сайта с помощью команды cd, указав вместо u и user первую букву вашего логина и сам логин:

3. Выполните команду ниже, заменив newpassword на нужный пароль:

Способ 2

1. Скачайте файл pass.php.

2. С помощью файлового менеджера или подключения по FTP загрузите его в директорию вашего сайта (/имя_сайта/public_html/).

3. Если пароль был задан успешно, вы увидите вывод в браузере "Done. Please delete this file as soon as possible". Теперь вы можете авторизоваться в админ-панели Drupal с новым паролем.

4. Обязательно удалите файл pass.php из директории сайта.

Joomla

SQL-запрос:

Вручную:

1. В базе данных найдите найдите таблицу joom_users и перейдите в нее:


2. В строке с пользователем admin нажмите Изменить:


3. Найдите строку password и в столбце "Функция" выберите вариант MD5, после чего укажите новый пароль в поле рядом:


Wordpress

SQL-запрос:

Вручную:

1. В базе данных найдите таблицу wp_users и перейдите в нее:


2. В строке с user_login admin нажмите Изменить:


3. Найдите строку user_pass и в столбце "Функция" выберите вариант MD5, после чего укажите новый пароль в поле рядом:


1С-Битрикс

Способ 1

1. С помощью файлового менеджера или подключения по FTP создайте в директории с вашим сайтом (/имя_сайта/public_html/) php-файл со следующим содержимым:

2. Откройте его в браузере, набрав в адресной строке ваш_домен/имя_файла. После этого у пользователя с (по умолчанию - администратор) установится пароль: Bitrix*123456

4. Обязательно удалите созданный php-файл.

ПРИМЕЧАНИЕ: В случае, если доступ для неавторизованных пользователей закрыт, то перед восстановлением пароля внесите правки в файл .access.php в корневой папке сайта, заменив строку:

После смены пароля верните изначальное значение.

Способ 2

1. С помощью файлового менеджера или подключения по FTP создайте в директории с вашим сайтом (/имя_сайта/public_html/) php-файл со следующим содержимым:

2. Откройте его в браузере, набрав в адресной строке ваш_домен/имя_файла.

4. Обязательно удалите созданный php-файл.

Способ 3

1. В базе данных найдите таблицу b_user и перейдите в нее:


2. Найдите пользователя с ID 1 и нажмите Изменить:


3. Найдите строку PASSWORD и в столбце "Функция" выберите вариант MD5, после чего укажите новый пароль в поле рядом:


DataLife Engine

1. В базе данных найдите найдите таблицу dle_users и перейдите в нее.

2. В строке с пользователем admin нажмите Изменить.

3. В строке password в поле "Значение" укажите: a45e49f0f3298f566bb71aff532821e5

5. Войдите в админ-панель с паролем changepass и обязательно измените пароль на безопасный.

HostCMS

1. Скачайте файл restore_password.php (загрузка выполняется с сайта HostCMS).

2. С помощью файлового менеджера или подключения по FTP загрузите файл в директорию с вашим сайтом (/имя_сайта/public_html/).

4. Сохраните реквизиты авторизации, которые будут выведены на экране.

5. Войдите в админ-панель с новым паролем, после при необходимости смените его на нужный вам.

6. Проверьте, что файл restore_password.php был автоматически удален из директории сайта; если это не так, обязательно удалите его вручную.

InstantCMS

Вручную:

1. В базе данных найдите найдите таблицу cms_users и перейдите в нее.

2. В строке с пользователем admin нажмите Изменить.

3. Найдите строку password. В столбце "Функция" выберите вариант MD5, после чего укажите новый пароль в поле рядом:


5. Снова нажмите Изменить в строке с пользователем admin .

6. Скопируйте значение поля password_salt и вставьте его в строку password после указанного в нем значения, без пробелов. В столбце "Функция" выберите вариант MD5.


Теперь вы можете войти в админ-панель с паролем, указанным на шаге 3.

LiveStreet

1. В базе данных найдите найдите таблицу prefix_user и перейдите в нее.

2. В строке с пользователем admin нажмите Изменить.

3. В строке user_password в поле "Значение" укажите: 827ccb0eea8a706c4c34a16891f84e7b

5. Войдите в админ-панель с паролем 12345 и обязательно измените пароль на безопасный.

Читайте также: