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:

  1. Fianán CSRF atá ina luach rúnda randamach é, nach mbeidh rochtain ag suíomhanna eile air.

    Seolann csrfViewMiddleware an 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.

  2. 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.

  3. 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.

  4. Fíoraíonn CSRFViewMiddleware an 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.

  5. Ina theannta sin, maidir le hiarratais HTTPS, mura gcuirtear an ceannteideal Origin` ar fáil, déanann `CSRFViewMiddleware seiceá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 Referer iontaofa 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` agus api.example.com. Mura bhfuil an socrú socraithe, ansin caithfidh an tagairteoir an ceannteideal HTTP Host a 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:

Code
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 CsrfViewMiddleware to a view.

Úsáid:

Code
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_view nó coibhéis cosúil le csrf_protect`. Is féidir an maisitheoir amharc requires_csrf_token a ú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:

Code
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)

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 leochaileacht é péire comhartha treallach CSRF a phostáil (sonraí fianán agus POST)?Link to this heading

Níl, tá sé seo de réir dearaidh. Gan ionsaí fear sa lár, níl aon bhealach ann d'ionsaitheoir fianán comhartha CSRF a sheoladh chuig brabhsálaí íospartaigh, mar sin bheadh le hionsaí rathúil fianán brabhsálaí an íospartaigh a fháil trí XSS nó dá leithéid, sa chás sin de ghnáth ní theastaíonn ionsaithe CSRF d'ionsaitheoir.

Cuireann roinnt uirlisí iniúchta slándála mar fhadhb seo ach mar a luadh cheana, ní féidir le hionsaitheoir fianán CSRF brabhsálaí úsáideora a ghoid. Ní leochaileacht é “goid” nó do chomharthaí* féin* a mhodhnú ag baint úsáide as Firebug, uirlisí déanta Chrome, srl.

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.