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:
<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:
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:
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.tomlDjango).Athraigh: Socrú: PASSWORD_HASHERS chun Argon2PasswordHasher` a liostáil ar dtús. Is é sin, i do chomhad socruithe, chuirfeá:
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:
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.tomlDjango).Athraigh: Socrú: PASSWORD_HASHERS chun bCryptSha256PasswordHasher` a liostáil ar dtús. Is é sin, i do chomhad socruithe, chuirfeá:
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
Tá 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:
Athraigh: Socrú: PASSWORD_HASHERS chun ScryptPasswordHasher` a liostáil ar dtús. Is é sin, i do chomhad socruithe:
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ú:
Cruthaigh fo-aicme de django.contrib.auth.hashers.pbkdf2PasswordHasher`:
from django.contrib.auth.hashers import PBKDF2PasswordHasher class MyPBKDF2PasswordHasher(PBKDF2PasswordHasher): """ A subclass of PBKDF2PasswordHasher that uses 100 times more iterations. """ iterations = PBKDF2PasswordHasher.iterations * 100Sábháil seo áit éigin i do thionscadal. Mar shampla, b'fhéidir go gcuirfeá é seo i gcomhad mar
myproject/hashers.py.Cuir do hasher nua leis mar an gcéad iontráil in:setting: PASSWORD_HASHERS:
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:
Rialaíonn
time_costlíon na n-athrá laistigh den hash.Rialaíonn
memory_costméid na cuimhne nach mór a úsáid le linn ríomh an hash.Rialaíonn
parallelismcé 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:
Roghnaigh paralelism` mar líon na snáitheanna is féidir leat a spáráil a ríomh an hash.
Roghnaigh memory_cost` chun a bheith mar an KiB de chuimhne is féidir leat a spáráil.
Coigeartaigh
time_costagus tomhas an t-am a thógann hashú pasfhocal. Roghnaightime_costa thógann am inghlactha duit. Má tátime_costsocraithe go 1 go neamhghlactha go mall, íslighmemory_cost.
scríptLink to this heading
Tá na tréithe seo a leanas ag scrypt is féidir a shaincheapadh:
Rialaíonn ``work_factor ``líon na n-athrá laistigh den hash.
Bloc_sizeRialaíonn
parallelismcé mhéad snáitheanna a bheidh ag rith go comhthreomhar.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.pyfrom 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.pyfrom 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.pyPASSWORD_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:
[
"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_sha256pbkdf2_sha1Argon2bcrypt_sha256bcryptscríptmd5
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,
Falsear shlí eile. Go roghnach, is féidir leatsetteringhlaonta a rith a thógann an pasfhocal agus a ghlaofar air nuair is gá duit é a athghiniúint. Is féidir leatpreferreda rith freisin chun algartam hashing a athrú mura dteastaíonn uait an réamhshocrú a úsáid (an chéad iontráil de shuíomhPASSWORD_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 éNonean 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
Falsemá 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:
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
ValidationErrorerror 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_attributesina 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 ónuser_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
ValidationErrorerror 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
ValidationErrorerror 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
ValidationErrorerror 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_textré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_configcomhionann 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 ``Nonemá 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, filleadhNonear 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:
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.