Django oracle пароль пользователя как узнать
Аутентификация пользователя Django (3 серии деталей)
В этом руководстве мы добавим последовательность сброса пароля в наше приложение Django. Это основывается на нашей предыдущей работе, где мы добавили страницы входа в систему и выходы, а затем страницу регистрации.
Полный исходный код можно найти на Github Если вы застряли по пути.
Приложение Django Auth
Однако шаблоны по умолчанию довольно безобразны, и нам нужно настроить их. Например, вот сброс пароля по умолчанию и пароль Сброс страниц:
SMTP-сервер
Чтобы настроить это, обновите наш settings.py Файл, добавив следующие две строки внизу под нашим перенаправленным URL.
Теперь давайте изменим появление страниц сброса пароля.
Форма сброса пароля
Затем добавьте следующий код:
Сброс пароля подтвердить
Помните, как мы настроили наш проект Django для хранения электронных писем в локальной папке, называемой sent_emails. ? Если вы посмотрите на Ваш проект теперь эта папка существует! Формат для TXT Файл будет выглядеть что-то вроде этого:
И введите новый код:
Сброс пароля сделан
Продолжай и создайте новый пароль в нашей форме. После подачи вы будете перенаправлены на нашу окончательную страницу по умолчанию, которая для Сброс пароля полный :
Чтобы настроить эту страницу, мы создадим новый password_reset_complete.html Шаблон и введите наш новый код:
Добавить на главную страницу
Давайте добавим ссылку сброса пароля на главную страницу, чтобы пользователи зарегистрировали его. Мы можем использовать встроенный тег . Вот код.
Заключение
Теперь мы реализовали надежный поток аутентификации пользователя для нашего веб-приложения с логин, выбором, регистрацией и сбросом пароля. Поздравляю!
Что еще мы хотим? Использование пользовательской пользовательской модели вместо встроенного Пользователь Модель хорошая идея. Django Docs ПРИМЕЧАНИЕ ОДИН: Настоятельно рекомендуется Отказ Вы также можете добавить функцию «Изменить пароль», проводят электронные письма для отправки или даже установки 3-го вечеринки Django-Allauth Пакет для включения входа в систему только по электронной почте и другие вкусности.
Управление паролями является такой сущностью, которую не следует переизобретать без особой необходимости и Django старается предоставить безопасный и гибкий набор инструментов для управления пользовательскими паролями. Этот документ описывает как Django хранит пароли, как может быть настроено их хэширование, а также некоторые утилиты для работы с хэшированными паролями.
Как Django хранит пароли¶
Django предоставляет гибкую систему хранения паролей и по умолчанию использует PBKDF2.
Атрибут password объекта User является строкой следующего формата:
Данная строка показывает компоненты, которые используются для хранения пользовательского пароля и разделены знаком доллара, а именно: хэширующий алгоритм, количество итераций алгоритма (work factor), случайная соль и полученный хэш пароля. Алгоритмом может быть любой из ряда однонаправленных хэширующих алгоритмов, которые использует Django; см. далее. Итерации описывают количество применений алгоритма для получения хэша. Соль является случайными данным, а сам хэш получается в результате работы однонаправленной функции.
По умолчанию, Django использует алгоритм PBKDF2 с хэшем SHA256, механизм защиты паролей рекомендованный NIST. Этого должно хватить для большинства пользователей: достаточная защита, требующая большой объём вычислительного времени для взлома.
Тем не менее, в зависимости от ваших требований, вы можете выбрать другой алгоритм или даже реализовать собственный алгоритм, который будет соответствовать вашим требованиям к безопасности. Итак, большинство пользователей не должны думать об этом, если вы сомневаетесь, значит вам это точно не надою В противном случае, прочитайте:
Django выбирает алгоритм для использования в соответствии с указанием переменной конфигурации PASSWORD_HASHERS . Переменная содержит список классов реализующих алгоритмы хэширования, которые поддерживает Django. Первая запись этого списка (речь о settings.PASSWORD_HASHERS[0] ) будет использоваться для сохранения паролей, а все остальные записи являются проверенными средствами, которые могут быть применены для проверки существующих паролей. Это означает, что вам потребуется использовать другой алгоритм хэширования, вам потребуется просто указать его первым в параметре конфигурации PASSWORD_HASHERS .
По умолчанию PASSWORD_HASHERS содержит:
Это означает, что Django будет использовать PBKDF2 для сохранения всех паролей, но будет поддерживать проверку паролей, сохранённых с помощью PBKDF2SHA1, bcrypt, SHA1 и так далее. Следующие несколько разделов описывают ряд общих способов, которые могут быть использованы опытными пользователями для изменения данного параметра конфигурации.
Использование bcrypt с Django¶
Для использования Bcrypt в качестве алгоритма по умолчанию, выполните следующие действия:
Установите bcrypt library. Это можно сделать с помощью команды pip install django[bcrypt] или скачайте библиотеку и установите её с помощью команды python setup.py install .
Измените PASSWORD_HASHERS так, чтобы BCryptSHA256PasswordHasher был указан первым. То есть, в файле конфигурации надо сделать так:
(Следует сохранить остальные записи в списке, иначе Django не сможет обновлять пароли; см. далее)
Вот так, теперь Django по умолчанию будет использовать Bcrypt в качестве алгоритма хранения паролей.
Обрезание паролей с помощью BCryptPasswordHasher
Другие реализации bcrypt
Существует несколько других реализаций алгоритма, которые позволяют использовать bcrypt в Django. Django не поддерживает из из коробки. Для активации поддержки, вам потребуется привести хэши в вашей базе данных к виду bcrypt$(raw bcrypt output) . Например: bcrypt$$2a$12$NT0I31Sa7ihGEWpka9ASYrEFkhuTNeBQ2xfZskIiiJeyFXhRgS.Sy .
Увеличение сложности хэша¶
Алгоритмы PBKDF2 и bcrypt используют ряд итераций или округлений для хэшей. Это значительно замедляют действия атакующих, усложняя выполнение атаки на хэшированные пароли. Однако, по мере увеличения вычислительной мощности, количество этих итераций следует увеличивать. Мы установили достаточное значение по умолчанию (и будем его увеличивать с каждым новым релизом Django), но вы можете пожелать увиличить или уменьшить это значение самостоятельно, в зависимости от вашей политики безопасности и вычислительной мощности, имеющейся в наличии. Чтобы сделать это, следует унаследоваться от класса нужного алгоритма и переопределить параметры iterations . Например, для увеличения количества итераций в алгоритме PBKDF2:
Унаследуйтесь от django.contrib.auth.hashers.PBKDF2PasswordHasher :
Сохраните это в ваш проект. Например, вы можете разместить это в файле подобном myproject/hashers.py .
Добавьте новый алгоритм хэширования в начало списка конфигурационного параметра PASSWORD_HASHERS :
Вот так, теперь Django будет использовать большее количество итераций при сохранении паролей с помощью PBKDF2.
Обновление паролей¶
При аутентификации пользователей, если их пароли сохранены с помощью алгоритма, отличающегося от стандартного, то Django будет автоматически применять стандартный алгоритм хэширования. Это означает, что старые установки Django автоматически получат обновление в области аутентификации пользователей, и это также означает, что вы можете переключаться на новые (и более лучшие) алгоритмы хранения паролей по мере их изобретения.
Passwords updates when changing the number of bcrypt rounds was added.
Ручное управление паролями пользователей¶
Модуль django.contrib.auth.hashers предоставляет набор функций для создания и проверки хэшированных паролей. Вы можете использовать эти функции независимо от модели `` User``l.
check_password (password, encoded)¶
Если требуется вручную аутентифицировать пользователя с помощью сравнения открытого пароля с захэшированным паролем из базы данных, используйте вспомогательную функцию check_password() . Она принимает два аргумента: открытый пароль и полное значение поля password из базы данных, возвращает True при совпадении и False в противном случае.
make_password (password, salt=None, hasher='default')¶
Проверяет, является ли переданная строка хэшированным паролем, который имеет шанс пройти проверку с помощью функции check_password() .
Password validation¶
Each password validator must provide a help text to explain the requirements to the user, validate a given password and return an error message if it does not meet the requirements, and optionally receive passwords that have been set. Validators can also have optional settings to fine tune their behavior.
Validation is controlled by the AUTH_PASSWORD_VALIDATORS setting. By default, validators are used in the forms to reset or change passwords. The default for the setting is an empty list, which means no validators are applied. In new projects created with the default startproject template, a simple set of validators is enabled.
Enabling password validation¶
Password validation is configured in the AUTH_PASSWORD_VALIDATORS setting:
This example enables all four included validators:
The help texts and any errors from password validators are always returned in the order they are listed in AUTH_PASSWORD_VALIDATORS .
Included validators¶
Django includes four validators:
class MinimumLengthValidator (min_length=8)¶
Validates whether the password meets a minimum length. The minimum length can be customized with the min_length parameter.
class UserAttributeSimilarityValidator (user_attributes=DEFAULT_USER_ATTRIBUTES, max_similarity=0.7)¶
Validates whether the password is sufficiently different from certain attributes of the user.
class CommonPasswordValidator (password_list_path=DEFAULT_PASSWORD_LIST_PATH)¶
Validates whether the password is not a common password. By default, this checks against a list of 1000 common password created by Mark Burnett.
The password_list_path can be set to the path of a custom file of common passwords. This file should contain one password per line and may be plain text or gzipped.
Validates whether the password is not entirely numeric.
Integrating validation¶
There are a few functions in django.contrib.auth.password_validation that you can call from your own forms or other code to integrate password validation. This can be useful if you use custom forms for password setting, or if you have API calls that allow passwords to be set, for example.
validate_password (password, user=None, password_validators=None)¶
Validates a password. If all validators find the password valid, returns None . If one or more validators reject the password, raises a ValidationError with all the error messages from the validators.
password_changed (password, user=None, password_validators=None)¶
Informs all validators that the password has been changed. This can be used by validators such as one that prevents password reuse. This should be called once the password has been successfully changed.
Returns a list of the help texts of all validators. These explain the password requirements to the user.
Returns an HTML string with all help texts in an <ul> . This is helpful when adding password validation to forms, as you can pass the output directly to the help_text parameter of a form field.
Returns a set of validator objects based on the validator_config parameter. By default, all functions use the validators defined in AUTH_PASSWORD_VALIDATORS , but by calling this function with an alternate set of validators and then passing the result into the password_validators parameter of the other functions, your custom set of validators will be used instead. This is useful when you have a typical set of validators to use for most scenarios, but also have a special situation that requires a custom set. If you always use the same set of validators, there is no need to use this function, as the configuration from AUTH_PASSWORD_VALIDATORS is used by default.
The structure of validator_config is identical to the structure of AUTH_PASSWORD_VALIDATORS . The return value of this function can be passed into the password_validators parameter of the functions listed above.
Note that where the password is passed to one of these functions, this should always be the clear text password - not a hashed password.
Writing your own validator¶
Any items in the OPTIONS in AUTH_PASSWORD_VALIDATORS for your validator will be passed to the constructor. All constructor arguments should have a default value.
Управление паролями - это то, что, как правило, не следует изобретать заново без причины, и Django стремится предоставить безопасный и гибкий набор инструментов для управления паролями пользователей. В этом документе обсуждается, как Django хранит пароли, как настроить хеширование перед сохранением, а также некоторые утилиты для управления отпечатками паролей.
Хранилище паролей Django ¶
Django предоставляет гибкую систему хранения паролей и по умолчанию использует PBKDF2.
Атрибут password объекта User - это строка в следующем формате:
Это компоненты, используемые для хранения пароля пользователя, разделенные символом доллара и состоящие из: алгоритма хеширования, количества итераций алгоритма (рабочий коэффициент), случайной соли. и получившийся отпечаток пароля. Алгоритм является одним из нескольких односторонних алгоритмов хранения хешей или паролей, которые может использовать Django; увидеть ниже. Итерации указывают, сколько раз алгоритм обрабатывает цифровой отпечаток пальца. Соль - это случайное начальное число, а отпечаток - результат односторонней функции.
По умолчанию Django использует алгоритм PBKDF2 с хэш-функцией SHA256, механизм растягивания пароля, рекомендованный NIST . Для большинства пользователей этого должно быть достаточно: это хорошо защищенный алгоритм, и для его работы требуется огромное количество вычислительной мощности.
Однако, в зависимости от ваших требований, вы можете выбрать другой алгоритм или даже использовать алгоритм, уникальный для вас, чтобы соответствовать вашей конкретной ситуации безопасности. Опять же, большинству пользователей не придется, и если вы не уверены, то, вероятно, вам это не понадобится. Если нужно, продолжайте читать .
Django выбирает, какой алгоритм использовать, глядя на настройки PASSWORD_HASHERS . Это список классов хэш-алгоритмов, которые может поддерживать установка Django. Первое вхождение этого списка (то есть settings.PASSWORD_HASHERS[0] ) будет использоваться для хранения паролей, а все остальные вхождения являются допустимыми методами хеширования, которые можно использовать для проверки существующих паролей. Это означает, что если вы хотите использовать другой алгоритм, вам придется изменить его PASSWORD_HASHERS так, чтобы ваш предпочтительный алгоритм был первым в списке.
Это означает, что Django будет использовать PBKDF2 для хранения всех паролей, но будет принимать пароли, сохраненные с помощью алгоритмов PBKDF2SHA1, argon2 и bcrypt .
В следующих разделах показаны некоторые распространенные способы, которыми опытные пользователи могут изменить этот параметр.
Использование Argon2 с Django ¶
Argon2 - победитель Конкурса хеширования паролей 2015 г. , открытого конкурса, проводимого сообществом для выбора алгоритма хеширования следующего поколения. Он разработан таким образом, чтобы его не было проще выполнять на выделенном оборудовании, чем на обычном процессоре.
Argon2 не является алгоритмом по умолчанию, используемым в Django, потому что для него требуется сторонняя библиотека. Тем не менее, эксперты Password Hashing Competition рекомендуют немедленно использовать Argon2, а не другие алгоритмы, поддерживаемые Django.
Чтобы использовать Argon2 в качестве алгоритма хранения по умолчанию, сделайте следующее:
Установите библиотеку argon2-cffi . Это можно сделать, запустив , что эквивалентно (вместе с любыми требованиями к версии от Django ). python -m pip install django[argon2] python -m pip install argon2-cffi setup.cfg
Отредактируйте PASSWORD_HASHERS так, чтобы оно Argon2PasswordHasher появилось первым. Вот что должно появиться в вашем файле настроек:
Сохраните или добавьте другие элементы в этот список, если вам нужно, чтобы Django мог обновлять пароли .
Использование bcrypt с Django ¶
Bcrypt - это популярный алгоритм хранения паролей, специально разработанный для долгосрочного хранения паролей. Это не алгоритм Django по умолчанию, поскольку он зависит от установки сторонних библиотек. Но поскольку потенциальных пользователей много, Django поддерживает bcrypt с минимальными усилиями.
Чтобы использовать Bcrypt в качестве алгоритма хранения по умолчанию, сделайте следующее:
Установите библиотеку bcrypt . Это можно сделать, запустив , что эквивалентно (вместе с любыми требованиями к версии от Django ). python -m pip install django[bcrypt] python -m pip install bcrypt setup.cfg
Отредактируйте PASSWORD_HASHERS так, чтобы оно BCryptSHA256PasswordHasher появилось первым. Вот что должно появиться в вашем файле настроек:
Сохраните или добавьте другие элементы в этот список, если вам нужно, чтобы Django мог обновлять пароли .
Итак, ваша установка Django теперь использует Bcrypt в качестве алгоритма хранения по умолчанию.
Увеличение трудоемкости ¶
PBKDF2 и bcrypt ¶
Алгоритмы PBKDF2 и bcrypt используют несколько итераций или хеш-проходов. Это намеренно замедляет атаки, что затрудняет взлом отпечатков пароля. Однако по мере увеличения вычислительной мощности количество требуемых итераций также увеличивается. Мы выбрали разумное значение по умолчанию (и мы будем увеличивать его с каждым новым выпуском Django), но вы можете увеличить или уменьшить его в зависимости от ваших потребностей в безопасности и возможностей вычислительной мощности. Вы можете сделать это, создав подкласс соответствующего алгоритма и переопределив параметр iterations . Например, чтобы увеличить количество итераций, используемых алгоритмом PBKDF2 по умолчанию:
Создайте подкласс django.contrib.auth.hashers.PBKDF2PasswordHasher :
Сохраните его где-нибудь в своем проекте. Например, вы можете поместить его в файл с именем myproject/hashers.py .
Добавьте свой новый хэш-класс первым в PASSWORD_HASHERS :
Вуаля, ваша установка Django теперь использует больше итераций при хранении паролей с помощью PBKDF2.
Аргон2 ¶
Argon2 имеет три атрибута, которые можно настроить:
- time_cost контролирует количество итераций посадочного места.
- memory_cost контролирует размер памяти, используемый при расчете посадочного места.
- parallelism контролирует количество процессоров, которые можно использовать для расчета занимаемой площади.
Значения по умолчанию для этих атрибутов, вероятно, разумны. Если вы определили, что хеширование паролей происходит слишком быстро или слишком медленно, вы можете настроить их следующим образом:
- Определите parallelism количество потоков, которые будут использоваться для расчета посадочного места.
- Определите memory_cost количество килобайт используемой памяти.
- Отрегулируйте time_cost и измерьте время, затрачиваемое на хеширование пароля. Выберите значение, на time_cost которое у вас уйдет приемлемое время. Если time_cost значение 1 по-прежнему слишком медленное, уменьшите значение memory_cost .
Утилита командной строки argon2 и некоторые другие библиотеки интерпретируют параметр memory_cost иначе, чем значение, которое использует Django. Преобразование дается . memory_cost == 2 ** memory_cost_en_ligne_de_commande
Обновление паролей ¶
Когда пользователи входят в систему, если их пароль хранится с другим алгоритмом, чем тот, который установлен в качестве основного, Django автоматически обновляет алгоритм, чтобы использовать основной. Это означает, что старые установки Django автоматически становятся более безопасными, когда пользователи входят в систему, а также означает, что вы можете перейти на новые (и более совершенные) алгоритмы хранения по мере их появления.
Однако Django может обновлять пароли только с использованием алгоритмов, упомянутых в PASSWORD_HASHERS , поэтому важно не удалять старые алгоритмы из этого списка при переходе на новые системы. В противном случае пользователи, использующие не упомянутые алгоритмы, не смогут обновить свой пароль. Хеш-пароли обновляются, когда количество итераций PBKDF2 или раундов bcrypt увеличивается (или уменьшается).
Имейте в виду, что если все пароли в вашей базе данных не зашифрованы с помощью алгоритма хеширования по умолчанию, вы можете быть уязвимы для атаки типа перечисления учетных записей на основе времени из-за разница между продолжительностью запроса на соединение для пользователя с паролем, закодированным в другом алгоритме, и продолжительностью запроса на соединение от несуществующего пользователя (который выполняет алгоритм по умолчанию). Можно рассмотреть эту проблему в перспективе, обновив старые отпечатки пароля .
Обновление паролей без входа в систему ¶
Если в существующей базе данных есть старые и уязвимые отпечатки паролей MD5 или SHA1, может быть желательно обновить эти отпечатки, не дожидаясь входа затронутых пользователей в систему (что может никогда не произойти, если они пользователи больше не возвращаются на сайт). В этом случае вы можете использовать "завернутый" хешер паролей.
В этом примере мы перенесем серию отпечатков SHA1, чтобы они использовали PBKDF2 (SHA1 (пароль)), и добавим соответствующий хэш пароля, который позаботится о проверке пароля пользователя во время связь. Мы предполагаем, что используется модель пользователя по умолчанию и что в проекте есть приложение accounts . Вы можете изменить этот пример для работы с любым другим алгоритмом или с пользовательской моделью пользователя.
Я использую Django (версия 1.3) и забыл имя пользователя и пароль администратора. Как сбросить оба?
и можно ли сделать обычного пользователя администратором, а затем удалить статус администратора?
- python manage.py createsuperuser создаст еще один суперпользователь, вы сможете войти в admin и запомнить свое имя пользователя.
- Да, почему бы и нет.
чтобы дать обычные права пользователя, откройте оболочку с python manage.py shell и попробовать:
вы можете попробовать через консоль:
затем используйте следующий скрипт в Shell
будет список всех супер пользователей в системе. если вы узнаете имя пользователя yur из списка:
и вы устанавливаете новый пароль (:
вы можете создать новый суперпользователь с помощью createsuperuser .
Это очень хороший вопрос.
python manage.py changepassword имя_пользователя
новое настройка должны первый запуск python manage.py createsuperuser создать пользователя. Похоже, нет пароль имя Пользователя по умолчанию для входа в админку.
вы также можете ответить на вопрос установки неправильно и иметь нулевых сотрудников. В этом случае направляйтесь к postgres:
один из лучших способов получить имя пользователя и пароль, чтобы просмотреть и обновить их. Модель пользователя обеспечивает идеальный способ сделать это.
- перейдите в корневой каталог i, e. где ты . manage.py " файл находится с помощью консоли или другого приложения, такого как Git.
- получить оболочку Python с помощью команды "python manage.py shell".
- импортируйте модель пользователя, введя выполнить следующую команду - из Джанго.ВНО.автор.модели импорт пользователя"
- получить всех пользователей, введя следующую команду "пользователь = пользователь.объекты.all ()"
распечатать список пользователей Для пользователей Python 2 используйте команду " print users" Для пользователей Python 3 используйте команду " print(пользователи)" Первый пользователь, как правило, админ.
выберите пользователя, которому вы хотите изменить пароль, например,
сохранить новый пароль
запустить сервер и войти, используя имя пользователя и новый пароль.
Если вы забыли создать администратора пользователя сначала построить один с createsuperuser команда on manage.py затем сменить пароль.
вы можете попробовать это:
1.Изменение пароля суперпользователя без консоли
2.Изменение пароля суперпользователя через консоль
в случае, если вы не знаете имена пользователей, созданные здесь. Вы можете получить пользователей, как описано выше @FallenAngel.
однако в случае, если вы создали свою независимую модель пользователя. Простой случай, когда вы хотите использовать электронную почту в качестве имени пользователя вместо имени пользователя по умолчанию. В этом случае ваша модель пользователя живет где-то, например your_accounts_app.модели тогда вышеупомянутое решение не будет работать. В этом случае вы можете использовать метод get_user_model
еще одна вещь, которую стоит отметить, - это установить статус как активный. По крайней мере, для меня это работает. Для более подробной информации я создал другой superuser как люди объяснили выше. Затем я иду в таблицу базы данных auth_user и найдите это имя пользователя, чтобы убедиться, что его is_staff флаг установлен до 1 . Это, наконец, позволило мне войти в admin сайт.
Читайте также: