---
title: "Iarratas ar Trasláithreán Cosaint Fholsaíochta"
version: 5.2
locale: ga
source: https://docs.djangoproject.com/ga/5.2/ref/csrf/
canonical: https://djangodocs.dev/ga/5.2/ref/csrf/
---
# Iarratas ar Trasláithreán Cosaint Fholsaíochta

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](https://owasp.org/www-community/attacks/csrf#overview). 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é

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](https://www.breachattack.com/), 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).

> **An ceanntásc Referer a bhaint**
>
> \<a\>Chun URL an atreoraithe a nochtadh chuig suíomhanna tríú páirtí a sheachaint, b'fhéidir gur mhaith leat an réiteoir a dhíchumasú ar chlibeanna ```` `do shuíomh. Mar shampla, d'fhéadfá an chlib ```a úsáid nó an ceannteideal <meta name="referrer" content="no-referrer">``Refrer-Policy: no-atreor ```` a chur san áireamh. Mar gheall ar sheiceáil dhian atreoraithe na cosanta CSRF ar iarratais HTTPS, is cúis le teip CSRF ar iarratais le modhanna 'neamhshábháilte' ar na teicnící sin. Ina áit sin, bain úsáid as roghanna eile mar `<a rel="noreferrer" ...>“` le haghaidh naisc chuig suíomhanna tríú páirtí.

## Teorainneacha

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óntais

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

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

Decorator that provides the protection of
[`CsrfViewMiddleware`](/ga/5.2/ref/middleware/#django.middleware.csrf.CsrfViewMiddleware) to 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)`

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:

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

Cuireann an maisitheoir seo iallach ar dhearcadh an fianán CSRF a sheoladh.

## Socruithe

Is féidir roinnt socruithe a úsáid chun iompar CSRF Django a rialú:

- [`CSRF_COOKIE_AGE`](/ga/5.2/ref/settings/#std-setting-CSRF_COOKIE_AGE)
- [`CSRF_COOKIE_DOMAIN`](/ga/5.2/ref/settings/#std-setting-CSRF_COOKIE_DOMAIN)
- [`CSRF_COOKIE_HTTPONLY`](/ga/5.2/ref/settings/#std-setting-CSRF_COOKIE_HTTPONLY)
- [`CSRF_COOKIE_NAME`](/ga/5.2/ref/settings/#std-setting-CSRF_COOKIE_NAME)
- [`CSRF_COOKIE_PATH`](/ga/5.2/ref/settings/#std-setting-CSRF_COOKIE_PATH)
- [`CSRF_COOKIE_SAMESITE`](/ga/5.2/ref/settings/#std-setting-CSRF_COOKIE_SAMESITE)
- [`CSRF_COOKIE_SECURE`](/ga/5.2/ref/settings/#std-setting-CSRF_COOKIE_SECURE)
- [`CSRF_FAILURE_VIEW`](/ga/5.2/ref/settings/#std-setting-CSRF_FAILURE_VIEW)
- [`CSRF_HEADER_NAME`](/ga/5.2/ref/settings/#std-setting-CSRF_HEADER_NAME)
- [`CSRF_TRUSTED_ORIGINS`](/ga/5.2/ref/settings/#std-setting-CSRF_TRUSTED_ORIGINS)
- [`CSRF_USE_SESSIONS`](/ga/5.2/ref/settings/#std-setting-CSRF_USE_SESSIONS)

## Ceisteanna Coitianta

### An leochaileacht é péire comhartha treallach CSRF a phostáil (sonraí fianán agus POST)?

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?

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?

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.
