Bainistíocht pasfhocal i DjangoLink to this heading

Is rud é bainistíocht pasfhocal nár cheart é a athchruthú go ginearálta gan ghá, agus déanann Django iarracht sraith uirlisí slán solúbtha a sholáthar chun pasfhocail úsáideora a bhainistiú. Déanann an doiciméad seo cur síos ar an gcaoi a stórálann Django pasfhocail, conas is féidir an hashing stórála a chumrú, agus roinnt fóntais chun oibriú le pasfhocail

Conas a stórálann Django pasfhocailLink to this heading

Soláthraíonn Django córas stórála pasfhocal solúbtha agus úsáideann sé PBKDF2 de réir réamhshocraithe.

Is teaghrán sa fhormáid seo é an tréith: Attr: ~django.contrib.auth.models.user.password tréith a:class: ~django.contrib.auth.models.user réad:

Text
<algorithm>$<iterations>$<salt>$<hash>

Is iad sin na comhpháirteanna a úsáidtear chun pasfhocal Úsáideora a stóráil, scartha ag an gcarachtar comhartha dollar agus tá: an algartam hashing, líon na n-athrú algartam (fachtóir oibre), an salann randamach, agus an hash pasfhocal mar thoradh air. Tá an algartam ar cheann de roinnt halgartaim hashing aon-bhealach nó stórála pasfhocal is féidir le Django a úsáid; féach thíos. Déanann athrá cur síos ar an líon uaireanta a reáchtáiltear an algartam thar an hash. Is é salann an síol randamach a úsáidtear agus is é an hash toradh ar an fheidhm aon-bhealach.

De réir réamhshocraithe, úsáideann Django algartam PBKDF2 le hash SHA256, meicníocht síneadh pasfhocal a mhol NIST. Ba chóir go mbeadh sé seo leordhóthanach don chuid is mó d'úsáideoirí: tá sé slán go leor, ag teastáil go leor ama ríomhaireachta chun briseadh.

Mar sin féin, ag brath ar do riachtanais, féadfaidh tú algartam difriúil a roghnú, nó fiú algartam saincheaptha a úsáid chun do staid slándála ar leith a mheaitseáil. Arís, níor chóir go gcaithfeadh mórchuid na n-úsáideoirí é seo a dhéanamh - mura bhfuil tú cinnte, is dócha nach ndéanann tú. Má dhéanann tú, léigh ar aghaidh le do thoil:

Roghnaíonn Django an algartam le húsáid trí chomhairle leis an socrú: setting: PASSWORD_HASHERS. Seo liosta de ranganna algartam hashing a thacaíonn an suiteáil Django seo.

Chun pasfhocail a stóráil, úsáidfidh Django an chéad hasher in:setting: PASSWORD_HASHERS. Chun pasfhocail nua a stóráil le halgartam difriúil, cuir an algartam is fearr leat ar dtús in:setting: PASSWORD_HASHERS.

Chun pasfhocail a fhíorú, gheobhaidh Django an hasher sa liosta a mheaitseálann ainm an algartam sa phasfhocal stóráilte. Má ainmníonn pasfhocal stóráilte algartam nach bhfaightear in:setting: PASSWORD_HASHERS, ardóidh sé ValueError ag iarraidh a fhíorú.

Is é an réamhshocrú le haghaidh: socrú: PASSWORD_HASHERS:

Code
PASSWORD_HASHERS = [
    "django.contrib.auth.hashers.PBKDF2PasswordHasher",
    "django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher",
    "django.contrib.auth.hashers.Argon2PasswordHasher",
    "django.contrib.auth.hashers.BCryptSHA256PasswordHasher",
    "django.contrib.auth.hashers.ScryptPasswordHasher",
]

Ciallaíonn sé seo go n-úsáidfidh Django PBKDF2 chun gach pasfhocal a stóráil ach tacóidh sé le pasfhocail a stóráiltear le PBKDF2SHA1, argon2, agus bcrypt a sheiceáil.

Déanann na cúpla chuid eile cur síos ar chúpla bealach coitianta a d'fhéadfadh ardúsáideoirí a bheith ag iarraidh an socrú seo a

Ag baint úsáide as Argon2 le DjangoLink to this heading

Is é Argon2 buaiteoir an “Comórtas Hashing Pasfhocal” 2015, comórtas oscailte eagraithe ag an bpobal chun algartam hashing den chéad ghlúin eile a roghnú. Tá sé deartha chun nach mbeadh sé níos éasca a ríomh ar chrua-earraí saincheaptha ná mar atá sé a ríomh ar ghnáth LAP. Is é Argon2id an leagan réamhshocraithe don hasher pasfhocal Argon2.

Ní hé Argon2 an réamhshocrú do Django toisc go dteastaíonn leabharlann tríú páirtí uaidh. Molann an painéal Comórtais Hashing Pasfhocal, áfach, Argon2 a úsáid láithreach seachas na halgartaim eile a thacaíonn Django.

Chun Argon2id a úsáid mar do algartam stórála réamhshocraithe, déan an méid seo a leanas:

  1. Suiteáil an pacáiste: pypi: argon2-cffi. Is féidir é seo a dhéanamh trí python -m pip install django [argon2] ``a reáchtáil, atá comhionann le ``python -m pip install argon2-cffi (in éineacht le haon riachtanas leagan ó pyproject.toml Django).

  2. Athraigh: Socrú: PASSWORD_HASHERS chun Argon2PasswordHasher` a liostáil ar dtús. Is é sin, i do chomhad socruithe, chuirfeá:

    Code
    PASSWORD_HASHERS = [
        "django.contrib.auth.hashers.Argon2PasswordHasher",
        "django.contrib.auth.hashers.PBKDF2PasswordHasher",
        "django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher",
        "django.contrib.auth.hashers.BCryptSHA256PasswordHasher",
        "django.contrib.auth.hashers.ScryptPasswordHasher",
    ]
    

    <password-upgrades>Coinnigh agus/nó cuir aon iontrálacha sa liosta seo má theastaíonn Django uait to:ref: `pasfhocail a uasghrádú `.

Ag baint úsáide as bcrypt le DjangoLink to this heading

Is algartam stórála pasfhocal móréilimh é Bcrypt atá deartha go sonrach le haghaidh stórála pasfhocal fadtéarmach. Ní hé an réamhshocrú a úsáideann Django é ós rud é go n-éilíonn sé leabharlanna tríú páirtí a úsáid, ach ós rud é go bhféadfadh go leor daoine é a úsáid tacaíonn Django le bcrypt gan iarracht íosta.

Chun Bcrypt a úsáid mar do algartam stórála réamhshocraithe, déan an méid seo a leanas:

  1. Suiteáil an pacáiste: pypi: bcrypt. Is féidir é seo a dhéanamh trí python -m pip install django [bcrypt] ``a reáchtáil, atá comhionann le ``python -m pip install bcrypt (in éineacht le haon riachtanas leagan ó pyproject.toml Django).

  2. Athraigh: Socrú: PASSWORD_HASHERS chun bCryptSha256PasswordHasher` a liostáil ar dtús. Is é sin, i do chomhad socruithe, chuirfeá:

    Code
    PASSWORD_HASHERS = [
        "django.contrib.auth.hashers.BCryptSHA256PasswordHasher",
        "django.contrib.auth.hashers.PBKDF2PasswordHasher",
        "django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher",
        "django.contrib.auth.hashers.Argon2PasswordHasher",
        "django.contrib.auth.hashers.ScryptPasswordHasher",
    ]
    

    <password-upgrades>Coinnigh agus/nó cuir aon iontrálacha sa liosta seo má theastaíonn Django uait to:ref: `pasfhocail a uasghrádú `.

Sin é - anois úsáidfidh do shuiteáil Django Bcrypt mar an algartam stórála réamhshocraithe.

Ag baint úsáide as scrypt le DjangoLink to this heading

scrypt cosúil le PBKDF2 agus bcrypt agus líon socraithe athraitheanna a úsáid chun ionsaithe brute-force a mhoilliú. Mar sin féin, toisc nach dteastaíonn go leor cuimhne ó PBKDF2 agus bcrypt, is féidir le hionsaitheoirí a bhfuil dóthain acmhainní acu ionsaithe a sheoladh chun an próiseas ionsaitheora a bhrostú. Tá scrypt deartha go sonrach chun níos mó feidhmeanna díorthaithe bunaithe ar phasfhocal eile d'fhonn teorainn a chur ar an méid comhthreomhaíochta is féidir le hionsaitheoir a úsáid, féach: rfc: 7914 le haghaidh tuilleadh sonraí.

Chun scrypt a úsáid mar do algartam stórála réamhshocraithe, déan an méid seo a leanas:

  1. Athraigh: Socrú: PASSWORD_HASHERS chun ScryptPasswordHasher` a liostáil ar dtús. Is é sin, i do chomhad socruithe:

    Code
    PASSWORD_HASHERS = [
        "django.contrib.auth.hashers.ScryptPasswordHasher",
        "django.contrib.auth.hashers.PBKDF2PasswordHasher",
        "django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher",
        "django.contrib.auth.hashers.Argon2PasswordHasher",
        "django.contrib.auth.hashers.BCryptSHA256PasswordHasher",
    ]
    

    <password-upgrades>Coinnigh agus/nó cuir aon iontrálacha sa liosta seo má theastaíonn Django uait to:ref: `pasfhocail a uasghrádú `.

An t-entróp salainn a mhéadúLink to this heading

Cuimsíonn an chuid is mó de na hashes pasfhocal salann in éineacht lena hash pasfhocal d'fhonn cosaint a dhéanamh ar ionsaithe tábla tuar ceatha. Is luach randamach é an salann féin a mhéadaíonn méid agus dá bhrí sin costas an tábla ceatha agus tá sé socraithe faoi láthair ag 128 giotán leis an luach salt_entropy` sa BasePasswordHasher`. Mar a laghdaíonn costais ríomhaireachta agus stórála ba chóir an luach seo a ardú Agus do phasfhocal féin á chur i bhfeidhm tá saor agat an luach seo a shárú d'fhonn an leibhéal entróp atá ag teastáil a úsáid le haghaidh do hashes pasfhocal. Tomhaistear salt_entropy` i ngiotáin.

An fachtóir oibre a mhéadúLink to this heading

PBKDF2 agus bcryptLink to this heading

Úsáideann halgartaim PBKDF2 agus bcrypt roinnt athrá nó babhtaí hashing. Moillíonn sé seo ionsaitheoirí d'aon ghnó, rud a fhágann go bhfuil ionsaithe i gcoinne pasfhoc Mar sin féin, de réir mar a mhéadaíonn cumhacht ríomhaireachta, is gá líon na n-athrá a mhéadú. Tá réamhshocrú réasúnta roghnaithe againn (agus méadóimid sé le gach scaoileadh de Django), ach b'fhéidir gur mhaith leat é a thiúnadh suas nó síos, ag brath ar do riachtanais slándála agus ar an chumhacht próiseála atá ar fáil. Chun é sin a dhéanamh, déanfaidh tú an algartam cuí a fho-aicmiú agus an paraiméadar ``iterations` a shárú (bain úsáid as an paraiméadar ``rounds` agus tú ag fo-aicmiú hasher bcrypt). Mar shampla, chun líon na n-athrú a úsáideann an algartam PBKDF2 réamhshocraithe a mhéadú:

  1. Cruthaigh fo-aicme de django.contrib.auth.hashers.pbkdf2PasswordHasher`:

    Code
    from django.contrib.auth.hashers import PBKDF2PasswordHasher
    
    
    class MyPBKDF2PasswordHasher(PBKDF2PasswordHasher):
        """
        A subclass of PBKDF2PasswordHasher that uses 100 times more iterations.
        """
    
        iterations = PBKDF2PasswordHasher.iterations * 100
    

    Sábháil seo áit éigin i do thionscadal. Mar shampla, b'fhéidir go gcuirfeá é seo i gcomhad mar myproject/hashers.py.

  2. Cuir do hasher nua leis mar an gcéad iontráil in:setting: PASSWORD_HASHERS:

    Code
    PASSWORD_HASHERS = [
        "myproject.hashers.MyPBKDF2PasswordHasher",
        "django.contrib.auth.hashers.PBKDF2PasswordHasher",
        "django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher",
        "django.contrib.auth.hashers.Argon2PasswordHasher",
        "django.contrib.auth.hashers.BCryptSHA256PasswordHasher",
        "django.contrib.auth.hashers.ScryptPasswordHasher",
    ]
    

Sin é - anois úsáidfidh do shuiteáil Django níos mó athraithe nuair a stóráil sé pasfhocail ag baint úsáide as PBKDF2.

Argon2Link to this heading

Tá na tréithe seo a leanas ag Argon2 is féidir a shaincheapadh:

  1. Rialaíonn time_cost líon na n-athrá laistigh den hash.

  2. Rialaíonn memory_cost méid na cuimhne nach mór a úsáid le linn ríomh an hash.

  3. Rialaíonn parallelism cé mhéad CPU is féidir ríomh an hash a dhéanamh comhthreomhar orthu.

Is dócha go bhfuil luachanna réamhshocraithe na dtréithe seo go breá duit. Má chinneann tú go bhfuil an hash pasfhocal ró-tapa nó ró-mhall, is féidir leat é a tweak mar seo a leanas:

  1. Roghnaigh paralelism` mar líon na snáitheanna is féidir leat a spáráil a ríomh an hash.

  2. Roghnaigh memory_cost` chun a bheith mar an KiB de chuimhne is féidir leat a spáráil.

  3. Coigeartaigh time_cost agus tomhas an t-am a thógann hashú pasfhocal. Roghnaigh time_cost a thógann am inghlactha duit. Má tá time_cost socraithe go 1 go neamhghlactha go mall, ísligh memory_cost.

scríptLink to this heading

Tá na tréithe seo a leanas ag scrypt is féidir a shaincheapadh:

  1. Rialaíonn ``work_factor ``líon na n-athrá laistigh den hash.

  2. Bloc_size

  3. Rialaíonn parallelism cé mhéad snáitheanna a bheidh ag rith go comhthreomhar.

  4. Cuireann maxmem` teorainn leis an méid uasta na cuimhne is féidir a úsáid le linn ríomh an hash. Réamhshocraithe go 0, rud a chiallaíonn an teorannú réamhshocraithe ón leabharlann OpenSSL.

Tá réamhshocruithe réasúnta roghnaithe againn, ach b'fhéidir gur mhaith leat é a thiúnú suas nó síos, ag brath ar do riachtanais slándála agus ar an chumhacht próiseála atá ar fáil.

Uasghrádú PasfhoLink to this heading

Nuair a logálann úsáideoirí isteach, má stóráiltear a gcuid pasfhocail le rud ar bith seachas an algartam is fearr leat, déanfaidh Django an algartam a uasghrádú go huathoibríoch go dt Ciallaíonn sé seo go n-éireoidh sean-shuiteálacha de Django níos sábháilte go huathoibríoch de réir mar a logálann úsáideoirí isteach, agus ciallaíonn sé freisin gur féidir leat aistriú chuig halgartaim stórála nua (agus níos fearr) de réir mar a chruthaítear iad.

Mar sin féin, ní féidir le Django ach pasfhocail a úsáideann halgartaim a luaitear in:setting: PASSWORD_HASHERS a uasghrádú, mar sin agus tú ag uasghrádú chuig córais nua ba chóir duit a chinntiú nach ndéanfaidh tú iontrálacha a bhaint riamh ón liosta seo. Má dhéanann tú, ní bheidh úsáideoirí a úsáideann halgartaim neamhluaite in ann uasghrádú a dhéanamh. Déanfar pasfhocail hashaithe a nuashonrú nuair a mhéadaítear (nó ag laghdú) líon na n-athrú PBKDF2, babhtaí bcrypt, nó tréithe argon2.

Bí ar an eolas mura bhfuil na pasfhocail go léir i do bhunachar sonraí ionchódaithe in algartam réamhshocraithe, d'fhéadfá a bheith leochaileach d'ionsaí uainiúcháin úsáideora mar gheall ar difríocht idir fad iarratais logála isteach d'úsáideoir le haghaidh pasfhocal ionchódaithe in algartam neamhréamhshocraithe agus fad iarratais logála isteach d'úsáideoir nach bhfuil ann (a ritheann an hasher réamhshocraithe). <wrapping-password-hashers>B'fhéidir go mbeidh tú in ann é seo a mhaolú trí:ref: `hashes pasfhocal níos sine a uasghrádú `.

Uasghrádú pasfhocal gan logáil isteach a dhéanamhLink to this heading

Má tá bunachar sonraí agat le hash níos sine, lag mar MD5, b'fhéidir gur mhaith leat na hashes sin a uasghrádú féin in ionad fanacht go dtarlóidh an t-uasghrádú nuair a logálann úsáideoir isteach (nach bhféadfadh tarlú riamh mura bhfillfidh úsáideoir ar do shuíomh). Sa chás seo, is féidir leat hasher pasfhocal “fillte” a úsáid.

Don sampla seo, aistróimid bailiúchán de hashes MD5 chun PBKDF2 (MD5 (pasfhocal) a úsáid agus cuirfimid an hasher pasfhocal comhfhreagrach le seiceáil an chuir úsáideoir an bhféadfadh úsáideoir an focal faire ceart isteach ar logáil isteach. Glacaimid leis go bhfuilimid ag úsáid an tsamhail Úsáideoir ``ionsuite agus go bhfuil aip ``cuntas ag ár dtionscadal. Is féidir leat an patrún a mhodhnú chun oibriú le haon algartam nó le samhail úsáideora saincheaptha.

Ar dtús, cuirfimid an hasher saincheaptha leis:

accounts/hashers.py
Python
from django.contrib.auth.hashers import (
    PBKDF2PasswordHasher,
    MD5PasswordHasher,
)


class PBKDF2WrappedMD5PasswordHasher(PBKDF2PasswordHasher):
    algorithm = "pbkdf2_wrapped_md5"

    def encode_md5_hash(self, md5_hash, salt, iterations=None):
        return super().encode(md5_hash, salt, iterations)

    def encode(self, password, salt, iterations=None):
        _, _, md5_hash = MD5PasswordHasher().encode(password, salt).split("$", 2)
        return self.encode_md5_hash(md5_hash, salt, iterations)

D'fhéadfadh go mbeadh cuma ar an imirce sonraí mar:

cuntas/imirceach/0002_migrate_md5_passwords.py
Python
from django.db import migrations

from ..hashers import PBKDF2WrappedMD5PasswordHasher


def forwards_func(apps, schema_editor):
    User = apps.get_model("auth", "User")
    users = User.objects.filter(password__startswith="md5$")
    hasher = PBKDF2WrappedMD5PasswordHasher()
    for user in users:
        algorithm, salt, md5_hash = user.password.split("$", 2)
        user.password = hasher.encode_md5_hash(md5_hash, salt)
        user.save(update_fields=["password"])


class Migration(migrations.Migration):
    dependencies = [
        ("accounts", "0001_initial"),
        # replace this with the latest migration in contrib.auth
        ("auth", "####_migration_name"),
    ]

    operations = [
        migrations.RunPython(forwards_func),
    ]

Bí ar an eolas go dtógfaidh an imirce seo ar ord cúpla nóiméad do roinnt mílte úsáideoir, ag brath ar luas do chrua-earraí.

Faoi dheireadh, cuirfimid suíomh a:setting: PASSWORD_HASHERS leis:

mysite/settings.py
Python
PASSWORD_HASHERS = [
    "django.contrib.auth.hashers.PBKDF2PasswordHasher",
    "accounts.hashers.PBKDF2WrappedMD5PasswordHasher",
]

Cuir aon hashers eile a úsáideann do shuíomh sa liosta seo san áireamh.

Hashers san áireamhLink to this heading

Is é an liosta iomlán de hashers atá san áireamh i Django:

Code
[
    "django.contrib.auth.hashers.PBKDF2PasswordHasher",
    "django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher",
    "django.contrib.auth.hashers.Argon2PasswordHasher",
    "django.contrib.auth.hashers.BCryptSHA256PasswordHasher",
    "django.contrib.auth.hashers.BCryptPasswordHasher",
    "django.contrib.auth.hashers.ScryptPasswordHasher",
    "django.contrib.auth.hashers.MD5PasswordHasher",
]

Is iad na hainmneacha algartam comhfhreagrach

  • pbkdf2_sha256

  • pbkdf2_sha1

  • Argon2

  • bcrypt_sha256

  • bcrypt

  • scrípt

  • md5

Do hasher féin a scríobhLink to this heading

Má scríobhann tú do phasfhocal féin ina bhfuil fachtóir oibre cosúil le roinnt athraithe, ba cheart duit modh `harden_runtime (self, password, ionchódaithe) `a chur i bhfeidhm chun an bearna réamhshocraithe idir an fachtóir oibre a sholáthraítear sa phasfhocal ``encoded ``agus fachtóir oibre réamhshocraithe an hasher. Cuireann sé seo cosc ar ionsaí uainiúcháin áireamh úsáideora mar gheall ar difríocht idir iarratas logála isteach d'úsáideoir le pasfhocal atá ionchódaithe i líon níos sine athrá agus úsáideoir nach bhfuil ann (a ritheann líon réamhshocraithe athraithe an hasher réamhshocraithe).

Ag glacadh le PBKDF2 mar shampla, má tá 20,000 athraitheach sa encoded ``agus is é 30,000 réamhshocraithe an hasher, ba chóir don modh ``pasfhocal a reáchtáil trí 10,000 athrú eile de PBKDF2.

Mura bhfuil fachtóir oibre ag do hasher, cuir an modh i bhfeidhm mar no-op (``pass ``).

Pasfhocal úsáideora a bhainistiú de láimhLink to this heading

Soláthraíonn an modúl:MOD: django.contrib.auth.hashers sraith feidhmeanna chun pasfhocail hashaithe a chruthú agus a bhailíochtú. Is féidir leat iad a úsáid go neamhspleách ón tsamhail ``Úsáideoir ``.

check_password(password, encoded, setter=None, preferred='default')Link to this definition
acheck_password(password, encoded, asetter=None, preferred='default')Link to this definition

Leagan asincrón: ``acheck_password () ``

Más mian leat úsáideoir a fhíordheimhniú de láimh trí phasfhocal téacs simplí a chur i gcomparáid leis an bhfocal faire hasháite sa bhunachar sonraí, bain úsáid as an bhfeidhm áisiúlachta: func: check_password. Tógann sé dhá argóint éigeantach: an pasfhocal gnáthtéacs le seiceáil, agus luach iomlán réimse pasfhocal ``úsáideora sa bhunachar sonraí le seiceáil ina choinne. Filleann sé ``True` má mheaitseálann siad, False ar shlí eile. Go roghnach, is féidir leat setter inghlaonta a rith a thógann an pasfhocal agus a ghlaofar air nuair is gá duit é a athghiniúint. Is féidir leat preferred a rith freisin chun algartam hashing a athrú mura dteastaíonn uait an réamhshocrú a úsáid (an chéad iontráil de shuíomh PASSWORD_HASHERS). Féach:ref: auth-included-hashers le haghaidh ainm algartam gach hasher.

make_password(password, salt=None, hasher='default')Link to this definition

Cruthaíonn sé pasfhocal hashed san fhormáid a úsáideann an feidhmchlár seo. Tógann sé argóint éigeantach amháin: an pasfhocal i dtéacs simplí (teaghrán nó béite). Go roghnach, is féidir leat salann agus algartam hashing a sholáthar le húsáid, mura dteastaíonn uait na réamhshocruithe a úsáid (an chéad iontráil de shuíomh PASSWORD_HASHERS). Féach:ref: auth-included-hashers le haghaidh ainm algartam gach hasher. Más é None an argóint pasfhocal, cuirtear pasfhocal neamhúsáidte ar ais (ceann nach nglacfaidh: func: check_password riamh).

is_password_usable(encoded_password)Link to this definition

Filleann False má tá an pasfhocal mar thoradh ar:meth: .user.set_unusable_password.

Bailíochtú pasfhocalLink to this heading

Is minic a roghnaíonn úsáideoirí pasfhocail Chun cabhrú leis an bhfadhb seo a mhaolú, cuireann Django bailíochtú pasfhocal plugáilte ar fáil Is féidir leat bailíochtóirí pasfhocal iolracha a chumrú ag an am céanna. Tá cúpla bailíochtóir san áireamh i Django, ach is féidir leat do chuid féin a scríobh freisin.

Caithfidh gach bailíochtóir pasfhocal téacs cabhrach a sholáthar chun na riachtanais a mhíniú don úsáideoir, pasfhocal ar leith a bhailíochtú agus teachtaireacht earráide a thabhairt ar ais mura gcomhlíonann sé na riachtanais, agus glaoch ar ais a shainiú go roghnach a chuirfear in iúl nuair a athraítear an focal faire d'úsáideoir. Is féidir le bailíochtóirí socruithe roghnacha a bheith acu freisin chun a n-iompar a mhíniú.

Tá bailíochtú á rialú ag an socrú: setting: AUTH_PASSWORD_VALIDATORS. Is é liosta folamh an réamhshocraithe don socrú, rud a chiallaíonn nach gcuirtear aon bhailíochtóirí i bhfeidhm. I dtionscadail nua a cruthaíodh leis an teimpléad réamhshocraithe: djadmin: startproject, cumasaítear tacar bailíochtóirí de réir réamhshocraithe.

De réir réamhshocraithe, úsáidtear bailíochtóirí sna foirmeacha chun pasfhocail a athshocrú nó a athrú agus sna horduithe bainistíochta: djadmin: createsuperuser agus:djadmin: changepassword. Ní chuirtear bailíochtóirí i bhfeidhm ag an leibhéal samhail, mar shampla in ``User.objects.create_user () ``agus ``create_superuser () `, toisc go nglacaimid leis go n-idirghníomhaíonn forbróirí, ní úsáideoirí, le Django ag an leibhéal sin agus freisin toisc nach ritheann bailíochtú samhail go huathoibríoch mar chuid de mhúnlaí a chruthú.

Cumasú bailíochtú pasfhocalLink to this heading

Tá bailíochtú pasfhocal cumraithe sa socrú:: AUTH_PASSWORD_VALIDATORS:

Code
AUTH_PASSWORD_VALIDATORS = [
    {
        "NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator",
    },
    {
        "NAME": "django.contrib.auth.password_validation.MinimumLengthValidator",
        "OPTIONS": {
            "min_length": 9,
        },
    },
    {
        "NAME": "django.contrib.auth.password_validation.CommonPasswordValidator",
    },
    {
        "NAME": "django.contrib.auth.password_validation.NumericPasswordValidator",
    },
]

Cumasaíonn an sampla seo na ceithre bhailíochtóirí san áireamh

  • UserAttributeSimilarityValidator, a sheiceálann an chosúlacht idir an pasfhocal agus sraith tréithe an úsáideora.

  • MinimumLengthValidator, a sheiceálann an gcomhlíonann an pasfhocal fad íosta. Tá an bailíochtóir seo cumraithe le rogha saincheaptha: éilíonn sé anois go mbeadh an fad íosta ná naoi charachtar, in ionad na hocht réamhshocraithe.

  • CommonPasswordValidator, a sheiceálann an dtarlaíonn an pasfhocal i liosta de phasfhocail choitianta. De réir réamhshocraithe, déanann sé comparáid le liosta san áireamh de 20,000 pasfhocal coitianta.

  • NumericPasswordValidator, a sheiceálann an bhfuil an pasfhocal uimhriúil go hiomlán.

Maidir le UserAttributeSimilarityValidator agus CommonPasswordValidator, táimid ag úsáid na socruithe réamhshocraithe sa sampla seo. Níl aon socruithe ag NumericPasswordValidator.

Cuirtear na téacsanna cabhrach agus aon earráidí ó bhailíochtóirí pasfhocal ar ais i gcónaí san ord a liostaítear ion:setting: AUTH_PASSWORD_VALIDATORS.

Bailíochtóirí san áireamhLink to this heading

Cuimsíonn Django ceithre bhailíochtóir:

class MinimumLengthValidator(min_length=8)Link to this definition

Bailíonn sé go bhfuil an pasfhocal ar fad íosta. Is féidir an fad íosta a shaincheapadh leis an bparaiméadar ``min_length ``.

get_error_message()Link to this definition

A hook for customizing the ValidationError error message. Defaults to "This password is too short. It must contain at least <min_length> characters.".

get_help_text()Link to this definition

A hook for customizing the validator's help text. Defaults to "Your password must contain at least <min_length> characters.".

class UserAttributeSimilarityValidator(user_attributes=DEFAULT_USER_ATTRIBUTES, max_similarity=0.7)Link to this definition

Bailíonn sé go bhfuil an pasfhocal difriúil go leor ó thréithe áirithe an úsáideora.

Ba chóir go mbeadh an paraiméadar user_attributes ina athraitheach d'ainmneacha tréithe úsáideora le comparáid a dhéanamh leo. Mura gcuirtear an argóint seo ar fáil, úsáidtear an réamhshocrú: ``ainm úsáideora', 'first_name', 'last _name', 'r-phost'. Déantar neamhaird ar thréithe nach bhfuil ann.

Is féidir an cosúlacht uasta ceadaithe de phasfhocail a shocrú ar scála 0.1 go 1.0 leis an bparaiméadar max_similarity. Déantar é seo i gcomparáid leis an toradh ar:meth: Difflib.sequencematcher.quick_ratio. Diúltaíonn luach 0.1 do phasfhocail mura bhfuil siad difriúil go suntasach ón user_attributes, ach ní dhiúltaíonn luach 1.0 ach pasfhocail atá comhionann le luach tréithe.

get_error_message()Link to this definition

A hook for customizing the ValidationError error message. Defaults to "The password is too similar to the <user_attribute>.".

get_help_text()Link to this definition

A hook for customizing the validator's help text. Defaults to "Your password can’t be too similar to your other personal information.".

class CommonPasswordValidator(password_list_path=DEFAULT_PASSWORD_LIST_PATH)Link to this definition

Bailíonn sé nach pasfhocal coitianta é an pasfhocal. < https://gist.github.com/roycewilliams/226886fd01572964e1431ac8afc999ce>Athraíonn sé seo an pasfhocal go litreacha beaga (chun comparáid cás-neamh-íogair a dhéanamh) agus seiceálann sé é i gcoinne liosta de 20,000 pasfhocal coitianta a chruthaigh Royce Williams.

Is féidir an password_list_path` a shocrú go cosán comhad saincheaptha de phasfhocail choitianta. Ba chóir go mbeadh pasfhocal beaga amháin in aghaidh an líne sa chomhad seo agus d'fhéadfadh sé go mbeadh sé téacs simplí nó gzipped.

get_error_message()Link to this definition

A hook for customizing the ValidationError error message. Defaults to "This password is too common.".

get_help_text()Link to this definition

A hook for customizing the validator's help text. Defaults to "Your password can’t be a commonly used password.".

class NumericPasswordValidatorLink to this definition

Bailíochtaigh nach bhfuil an pasfhocal uimhriúil go hiomlán.

get_error_message()Link to this definition

A hook for customizing the ValidationError error message. Defaults to "This password is entirely numeric.".

get_help_text()Link to this definition

A hook for customizing the validator's help text. Defaults to "Your password can’t be entirely numeric.".

Bailíochtú a chomhthLink to this heading

Tá cúpla feidhm i django.contrib.auth.password_validation ar féidir leat glaoch a ghlaoch ó d'fhoirmeacha féin nó ó chód eile chun bailíochtú pasfhocal a chomhtháthú. Is féidir leis seo a bheith úsáideach má úsáideann tú foirmeacha saincheaptha le haghaidh socrú pasfhocal, nó má tá glaonna API agat a cheadaíonn pasfhocail a shocrú, mar shampla.

validate_password(password, user=None, password_validators=None)Link to this definition

Bailíonn sé pasfhocal. Má aimsíonn gach bailíochtóir an pasfhocal bailí, filleann sé None. Má dhiúltaíonn bailíochtóirí amháin nó níos mó don phasfhocal, ardaíonn sé a:exc: ~django.core.exceptions.validationError leis na teachtaireachtaí earráide go léir ó na bailíochtóirí.

Tá an réad ``úsáideoir ``roghnach: mura gcuirtear ar fáil é, b'fhéidir nach mbeidh roinnt bailíochtóirí in ann aon bhailíochtú a dhéanamh agus glacfaidh siad le haon phasfhocal.

password_changed(password, user=None, password_validators=None)Link to this definition

Cuireann gach bailíochtóir ar an eolas go bhfuil an pasfhocal athraithe. Is féidir le bailíochtóirí mar cheann a chuireann cosc ar athúsáid pasfhocal é seo a úsáid. Ba chóir é seo a ghlaoch nuair a athraítear an pasfhocal go rathúil.

Maidir le fo-aicmí de:class: ~Django.Contrib.Auth.Models.AbstractBaseUser, marcálfar an réimse pasfhocal mar “salach” agus tú ag glao:meth: ~django.contrib.auth.models.abstractBaseUser.set_password a spreagann glao ar `password_modified () `tar éis an úsáideoir a shábháil.

password_validators_help_texts(password_validators=None)Link to this definition

Tugann sé liosta de théacsanna cabhrach na mbailíochtóirí go léir ar ais. Míníonn siad seo na riachtanais phasfhocal don úsáideoir.

password_validators_help_text_html(password_validators=None)Link to this definition

Tugann teaghrán HTML ar ais le gach téacs cabhrach i <ul>```. Tá sé seo cabhrach agus bailíochtú pasfhocal á chur le foirmeacha, mar is féidir leat an t-aschur a chur go díreach chuig paraiméadar help_text réimse foirme.

get_password_validators(validator_config)Link to this definition

Tugann sé tacar rudaí bailíochtaithe ar ais bunaithe ar an bparaiméadar validator_config. De réir réamhshocraithe, úsáideann gach feidhm na bailíochtóirí atá sainmhínithe in:setting: AUTH_PASSWORD_VALIDATORS, ach tríd an bhfeidhm seo a ghlaoch le tacar malartach bailíochtóirí agus ansin an toradh a chur isteach i bparaiméadar ``password_validators ``na feidhmeanna eile, úsáidfear do shraith saincheaptha bailíochtóirí ina ionad. Tá sé seo úsáideach nuair a bhíonn tipiciúil tacar bailíochtóirí agat le húsáid don chuid is mó de na cásanna, ach tá cás speisialta agat freisin a éilíonn tacar saincheaptha. Má úsáideann tú an tacar bailíochtóirí céanna i gcónaí, ní gá an fheidhm seo a úsáid, mar úsáidtear an chumraíocht ó:setting: AUTH_PASSWORD_VALIDATORS de réir réamhshocraithe.

Tá struchtúr validator_config comhionann leis an struchtúr de:setting: AUTH_PASSWORD_VALIDATORS. Is féidir luach tuairisceáin na feidhme seo a chur isteach i bparaiméadar ``password_validators ``de na feidhmeanna atá liostaithe thuas.

Tabhair faoi deara, nuair a chuirtear an focal faire chuig ceann de na feidhmeanna seo, ba cheart gurb é seo an pasfhocal téacs soiléir i gcónaí - ní pasfhocal hashed.

Do bhailíochtóir féin a scríobhLink to this heading

Mura leor bailíochtóirí ionsuite Django, is féidir leat do bhailíochtóirí pasfhocal féin a scríobh. Tá comhéadan measartha beag ag bailíochtóirí. Ní mór dóibh dhá mhodh a chur chun feidhme:

  • bailíochtú (féin, pasfhocal, úsáideoir = níl aon duine) ``: bailíochtú pasfhocal. Cuir ar ais ``None má tá an pasfhocal bailí, nó ardaigh a:exc: ~django.core.exceptions.validationError le teachtaireacht earráide mura bhfuil an pasfhocal bailí. Caithfidh tú a bheith in ann déileáil le `úsáideoir ```None - más ciallaíonn sé sin nach féidir le do bhailíochtóir rith, filleadh None ar ais gan aon earráid.

  • ``get_help_text () ``: téacs cabhrach a sholáthar chun na riachtanais a mhíniú don úsáideoir.

Cuirfear aon earraí sa OPTIONS` in:setting: AUTH_PASSWORD_VALIDATORS do bhailíochtaitheoir chuig an tógálaí. Ba chóir go mbeadh luach réamhshocraithe ag gach argóint tógá

Seo sampla bunúsach de bhailíochtóir, le socrú roghnach amháin:

Code
from django.core.exceptions import ValidationError
from django.utils.translation import gettext as _


class MinimumLengthValidator:
    def __init__(self, min_length=8):
        self.min_length = min_length

    def validate(self, password, user=None):
        if len(password) < self.min_length:
            raise ValidationError(
                _("This password must contain at least %(min_length)d characters."),
                code="password_too_short",
                params={"min_length": self.min_length},
            )

    def get_help_text(self):
        return _(
            "Your password must contain at least %(min_length)d characters."
            % {"min_length": self.min_length}
        )

Is féidir leat password_changes (password, user=none) a chur i bhfeidhm freisin, a ghlaofar tar éis athrú pasfhocal rathúil. Is féidir é sin a úsáid chun athúsáid pasfhocal a chosc, mar shampla. Mar sin féin, má shocraíonn tú pasfhocail úsáideora roimhe seo a stóráil, níor cheart duit é sin a dhéanamh riamh i dtéacs soiléir.