Iarratas ar Trasláithreán Cosaint FholsaíochtaLink to this heading
Soláthraíonn an clib meán-earraí agus teimpléad CSRF cosaint atá éasca le húsáid i gcoinne Forgeasaithe Iarratais Tras-Láithreacha. Tarlaíonn an cineál ionsaithe seo nuair a bhíonn nasc, cnaipe foirme nó roinnt JavaScript i láithreán gréasáin mailíseach atá beartaithe chun gníomh éigin a dhéanamh ar do shuíomh Gréasáin, ag úsáid dintiúir úsáideora logáilte isteach a thugann cuairt ar an suíomh mailíseach ina mbrabhsálaí. Clúdaítear cineál ionsaí gaolmhar, 'logáil isteach CSRF', áit a gcuireann suíomh ionsaitheach brabhsálaí úsáideora isteach i suíomh le dintiúir duine eile, clúdaithe freisin.
Is é an chéad chosaint i gcoinne ionsaithe CSRF ná a chinntiú go bhfuil iarratais GET (agus modhanna 'sábháilte' eile, mar a shainmhínítear ag: rfc: 9110 #section -9.2.1) saor ó fho-iarsmaí. Is féidir iarratais trí mhodhanna 'neamhshábháilte', mar shampla POST, PUT, agus DELETE, a chosaint leis na céimeanna a leagtar amach in:ref: using-csrf.
Conas a oibríonn séLink to this heading
Tá cosaint CSRF bunaithe ar na rudaí seo a leanas:
Fianán CSRF atá ina luach rúnda randamach é, nach mbeidh rochtain ag suíomhanna eile air.
Seolann
csrfViewMiddlewarean fianán seo leis an bhfreagra aon uair a thugtar ``django.middleware.csrf.get_token () ``. Féadfaidh sé é a sheoladh i gcásanna eile freisin. Ar chúiseanna slándála, athraítear luach an rúnda gach uair a logálann úsáideoir isteach.Réimse foirme i bhfolach leis an ainm 'csrfmiddlewaretoken', atá i láthair i ngach foirm POST atá ag imeacht.
D'fhonn cosaint a dhéanamh ar ionsaithe BREACH, ní hé luach an réimse seo ach an rún. Déantar é a scrampáil go difriúil le gach freagra ag baint úsáide as masc. Gintear an masc go randamach ar gach glao chuig ``get_token () ``, mar sin tá luach réimse na foirme difriúil gach uair.
Déantar an chuid seo ag an gclib teimpléad:ttag: csrf_token.
Maidir le gach iarratas atá ag teacht isteach nach n-úsáideann HTTP GET, HEAD, OPTIONS nó TRACE, caithfidh fianán CSRF a bheith i láthair, agus caithfidh an réimse 'csrfmiddlewaretoken' a bheith i láthair agus ceart. Mura bhfuil sé, gheobhaidh an t-úsáideoir earráid 403.
Agus luach réimse 'csrfmiddlewaretoken' á bhailíochtú, ní dhéantar ach an rún, ní an comhartha iomlán, a chur i gcomparáid leis an rún sa luach fianán. Ligeann sé seo comharthaí atá ag athrú i gcónaí a úsáid. Cé go bhféadfaidh gach iarratas a chomhartha féin a úsáid, fós an rún coitianta do gach duine.
Déanann an seiceáil seo ag
CSRFViewMiddleware.Fíoraíonn
CSRFViewMiddlewarean ceannteideal Origin `_, má sholáthraíonn an brabhsálaí, i gcoinne an óstach reatha agus an socrú:setting: `CSRF_TRUSTED_ORIGINS. Soláthraíonn sé seo cosaint i gcoinne ionsaithe trasfho-fearainn.Ina theannta sin, maidir le hiarratais HTTPS, mura gcuirtear an ceannteideal
Origin` ar fáil, déanann `CSRFViewMiddlewareseiceáil docht atreoraithe. Ciallaíonn sé seo fiú más féidir le fo-fhearann fianáin a shocrú nó a mhodhnú ar do fhearann, ní féidir leis iallach a chur ar úsáideoir postáil chuig d'iarratas ós rud é nach dtiocfaidh an t-iarratas sin ó do fhearann cruinn féin.Tugann sé seo aghaidh freisin ar ionsaí fear in-the-lár atá indéanta faoi HTTPS agus rún neamhspleách seisiúin á úsáid, toisc go nglacann cliaint (ar an drochuair) ceannteidil HTTP Set-Cookie fiú nuair a bhíonn siad ag caint le suíomh faoi HTTPS. (Ní dhéantar seiceáil atreoraithe le haghaidh iarratais HTTP toisc nach bhfuil láithreacht an cheanntásc
Refereriontaofa go leor faoi HTTP.)Má tá an socrú: setting: CSRF_COOKIE_DOMAIN socraithe, déantar an tagairteoir i gcomparáid ina choinne. Is féidir leat iarratais tras-fho-fhearann a cheadú trí phríomhphointe a áireamh. Mar shampla, ceadóidh
CSRF_COOKIE_DOMAIN = '.example.com'iarratais POST ó www.example.com` agusapi.example.com. Mura bhfuil an socrú socraithe, ansin caithfidh an tagairteoir an ceannteideal HTTPHosta mheaitseáil.Is féidir na tagairteoirí a nglactar leo a leathnú thar an bhfearann óstach nó fianán reatha a dhéanamh leis an socrú: setting: CSRF_TRUSTED_ORIGINS.
Cinntíonn sé seo nach féidir ach foirmeacha a tháinig ó fearainn iontaofa a úsáid chun sonraí POST ar ais.
Déanann sé neamhaird d'aon ghnó ar iarratais GET (agus iarratais eile a shainmhínítear mar 'sábháilte' ag: rfc: 9110 #section -9.2.1). Níor cheart go mbeadh aon fho-iarsmaí a d'fhéadfadh a bheith contúirteach a bheith ag na hiarratais seo riamh, agus mar sin ba chóir go mbeadh ionsaí CSRF le hiarratas GET ne :rfc: Sainmhíníonn 9110 #section -9.2.1 POST, PUT, agus DELETE mar 'neamhshábháilte', agus glactar leis go bhfuil gach modh eile neamhshábháilte, chun an chosaint is mó.
<security-recommendation-ssl>Ní féidir leis an gcosaint CSRF cosaint a dhéanamh i gcoinne ionsaithe an duine sa lár, mar sin bain úsáid as: ref: HTTPS `le: ref: `http-strict-transport-security. Glacann sé freisin: ref: `bailíochtú ceanntásc HOST <host-headers-virtual-hosting>`agus nach bhfuil aon leochaileachtaí scrip <cross-site-scripting>teanna tras-láithreáin ann ar do shuíomh (toisc go ligeann leochaileachtaí XSS d'ionsaitheoir aon rud a cheadaíonn leochaileacht CSRF a dhéanamh agus i bhfad níos measa).
TeorainneachaLink to this heading
Beidh fo-fearainn laistigh de shuíomh in ann fianáin a shocrú ar an gcliant don fhearann iomlán. Trí an fianán a shocrú agus comhartha comhfhreagrach a úsáid, beidh fo-fhearann in ann cosaint CSRF a sheachaint. Is é an t-aon bhealach chun é seo a sheachaint ná a chinntiú go bhfuil fo-fhearann á rialú ag úsáideoirí iontaofa (nó, ar a laghad nach bhfuil siad in ann fianáin a shocrú). Tabhair faoi deara go bhfuil leochaileachtaí eile ann, mar shampla socrú seisiúin, fiú gan CSRF, a fhágann gur droch-smaoineamh é fo-fhearann a thabhairt do pháirtithe neamhiontaofa, agus ní féidir na leochaileachtaí seo a shocrú go héasca le brabhsálaithe reatha.
fóntaisLink to this heading
Glacann na samplaí thíos go bhfuil tuairimí bunaithe ar fheidhm á úsáid agat <decorating-class-based-views>Má tá tú ag obair le tuairimí rang-bhunaithe, is féidir leat tagairt a dhéanamh u:ref: `Tuairimí rangbhunaithe a mhaisiú `.
- csrf_exempt(view)Link to this definition
Marcann an maisitheoir seo go bhfuil dearcadh díolmhaithe ón gcosaint a chinntíonn na meánearraí. Sampla:
from django.http import HttpResponse from django.views.decorators.csrf import csrf_exempt @csrf_exempt def my_view(request): return HttpResponse("Hello world")
- csrf_protect(view)Link to this definition
Decorator that provides the protection of
CsrfViewMiddlewareto a view.Úsáid:
from django.shortcuts import render from django.views.decorators.csrf import csrf_protect @csrf_protect def my_view(request): c = {} # ... return render(request, "a_template.html", c)
- requires_csrf_token(view)Link to this definition
De ghnáth ní oibreoidh an chlib teimpléad:ttag: csrf_token mura ritheann
csrfViewMiddleware.process_viewnó coibhéis cosúil le csrf_protect`. Is féidir an maisitheoir amharcrequires_csrf_tokena úsáid chun a chinntiú go n-oibríonn an chlib teimpléid. Oibríonn an maisitheoir seo ar an gcéanna le csrf_protect`, ach ní dhiúltaíonn sé iarratas isteach riamh.Sampla:
from django.shortcuts import render from django.views.decorators.csrf import requires_csrf_token @requires_csrf_token def my_view(request): c = {} # ... return render(request, "a_template.html", c)
- ensure_csrf_cookie(view)Link to this definition
Cuireann an maisitheoir seo iallach ar dhearcadh an fianán CSRF a sheoladh.
SocruitheLink to this heading
Is féidir roinnt socruithe a úsáid chun iompar CSRF Django a rialú:
Ceisteanna CoitiantaLink to this heading
An fadhb í nach bhfuil cosaint CSRF Django nasctha le seisiún de réir réamhshocraithe?Link to this heading
Níl, tá sé seo de réir dearaidh. Gan chosaint CSRF a nascadh le seisiún is féidir an chosaint a úsáid ar shuíomhanna cosúil* pastebin* a cheadaíonn aighneachtaí ó úsáideoirí gan ainm nach bhfuil seisiún acu.
Más mian leat an comhartha CSRF a stóráil i seisiún an úsáideora, bain úsáid as an socrú:setting: CSRF_USE_SESSIONS.
Cén fáth a d'fhéadfadh teip bailíochtaithe CSRF a bheith ag úsáideoir tar éis logáil isteach?Link to this heading
Ar chúiseanna slándála, rothlaítear comharthaí CSRF gach uair a logálann úsáideoir isteach. Beidh sean-chomhartha CSRF neamhbhailí ag aon leathanach le foirm a ghintear roimh logáil isteach agus caithfear é a athluchtú. D'fhéadfadh sé seo tarlú má úsáideann úsáideoir an cnaipe ar ais tar éis logáil isteach nó má logálann siad isteach i gcluaisín brabhsálaí difriúil.