Conas cosaint CSRF Django a úsáidLink to this heading
Chun leas a bhaint as cosaint CSRF i do thuairimí, lean na céimeanna seo:
The CSRF middleware is activated by default in the
MIDDLEWAREsetting. If you override that setting, remember that'django.middleware.csrf.CsrfViewMiddleware'should come before any view middleware that assumes that CSRF attacks have been dealt with.Má dhíchumasaigh tú é, nach moltar, is féidir leat: func: ~django.views.decorators.csrf.csrf_protect a úsáid ar thuairimí áirithe ar mhaith leat a chosaint (féach thíos).
In aon teimpléad a úsáideann foirm POST, bain úsáid as an clibe:ttag: csrf_token taobh istigh den eilimint ```má tá an fhoirm le haghaidh URL inmheánach, <form>m.sh.:
<form method="post">{% csrf_token %}Níor cheart é seo a dhéanamh le haghaidh foirmeacha POST a dhíríonn ar URLanna seachtracha, mar go mbeadh sé sin ina chúis le sceitheadh an chomhartha CSRF, rud a d’fhágfadh go mbeadh leochaileacht ann.
Sna feidhmeanna amharc comhfhreagracha, cinntigh go n-úsáidtear: class: ~django.template.requestContext chun an freagra a thabhairt ionas go n-oibreoidh
{% csrf_token%} `i gceart. Má tá tú ag úsáid an fheidhme:func: `~django.shortcuts.render`, tuairimí cineálacha, nó aipeanna contrib, tá tú clúdaithe cheana ós rud é go n-úsáideann siad seo go léir ``RequestContext.
Cosaint CSRF a úsáid le AJAXLink to this heading
Cé gur féidir an modh thuas a úsáid le haghaidh iarratais AJAX POST, tá roinnt míchompordach aige: caithfidh tú cuimhneamh an comhartha CSRF a chur isteach mar shonraí POST le gach iarratas POST. Ar an gcúis seo, tá modh malartach ann: ar gach XMLHttpRequest, socraigh ceannteideal saincheaptha ``X-CSRFToken` (mar a shonraítear leis an socrú:setting: CSRF_HEADER_NAME) le luach an chomhartha CSRF. Is minic a bhíonn sé seo níos éasca toisc go soláthraíonn go leor creataí JavaScript crúcaí a cheadaíonn ceanntásca a shocrú ar gach iarratas.
Ar dtús, ní mór duit an comhartha CSRF a fháil. Braitheann conas é sin a dhéanamh ar an bhfuil na socruithe: 'CSRF_USE_SESSIONS` agus:setting: CSRF_COOKIE_HTTPONLY cumasaithe nó nach bhfuil.
An comhartha a shocrú ar an iarratas AJAXLink to this heading
Faoi dheireadh, beidh ort an ceanntásc a shocrú ar d'iarratas AJAX. Ag baint úsáide as an API `fetch () `_:
const request = new Request(
/* URL */,
{
method: 'POST',
headers: {'X-CSRFToken': csrftoken},
mode: 'same-origin' // Do not send CSRF token to another domain.
}
);
fetch(request).then(function(response) {
// ...
});
Cosaint CSRF a úsáid i dteimpléid Jinja2Link to this heading
Django's:class: ~django.template.backends.jinja2.jinja2 cuireann cúltaca teimpléad {{csrf_input}} le comhthéacs na teimpléid go léir atá comhionann le {% csrf_token%} sa teanga teimpléid Django. Mar shampla:
<form method="post">{{ csrf_input }}
An modh maisitheora a úsáidLink to this heading
Seachas ``csrfViewMiddleware` a chur leis mar chosaint blaincéid, is féidir leat an maisitheoir: func: ~django.views.decorators.csrf.csrf_protect a úsáid, a bhfuil an fheidhmiúlacht chéanna díreach aige, ar thuairimí áirithe a dteastaíonn an cosaint uathu. Caithfear é a úsáid**an bheath** ar thuairimí a chuireann an comhartha CSRF isteach san aschur, agus ar na tuairimí a ghlacann leis na sonraí foirme POST. (Is minic gurb iad seo an fheidhm radharc céanna, ach ní i gcónaí).
Ní mholtar an maisitheoir a úsáid leis féin **, ós rud é má dhéanann tú dearmad é a úsáid, beidh poll slándála agat. Tá an straitéis 'crios agus brísea' chun an dá cheann a úsáid go breá, agus beidh lasbhreas íosta ann.
Iarrataí a dhiúltaitheLink to this heading
De réir réamhshocraithe, seoltar freagra '403 Forbidden' chuig an úsáideoir má theipeann ar iarratas isteach ar na seiceálacha a dhéanann ``CSRFViewMiddleware`. Níor cheart é seo a fheiceáil de ghnáth ach nuair a bhíonn fíorbhóideacht Iarratas Tras-Láithreáin ann, nó nuair nach bhfuil an comhartha CSRF san áireamh le foirm POST mar gheall ar earráid cláraithe.
Níl an leathanach earráide an-chairdiúil, áfach, mar sin b'fhéidir gur mhaith leat do dhearcadh féin a sholáthar chun an riocht seo a láimhseáil. Chun seo a dhéanamh, socraigh an socrú: setting: CSRF_FAILURE_VIEW.
<django-security-logger>Déantar teipeanna CSRF a logáil mar rabhaidh don logger: ref: `django.security.csrf `.
Cosaint CSRF a úsáid le cachingLink to this heading
Má úsáideann teimpléad an chlib teimpléad:ttag: csrf_token (nó tugtar bealach eile ar an bhfeidhm get_token), cuirfidh CSRFViewMiddleware` fianán agus ceannteideal Vary: Cookie leis an bhfreagra. Ciallaíonn sé seo go n-imrífidh an middleware go maith leis an middleware taisce má úsáidtear é mar a threoraítear (téann ``UpdateCacheMiddleware` roimh gach meán-earraí eile).
Mar sin féin, má úsáideann tú maisitheoirí taisce ar thuairimí aonair, ní bheidh an middleware CSRF in ann an ceannteideal Vary nó an fianán CSRF a shocrú fós, agus cuirfear an freagra a chosc gan ceachtar ceann amháin. Sa chás seo, ar aon tuairimí a éilíonn comhartha CSRF a chur isteach ba chóir duit an maisitheoir: func: django.views.decorators.csrf.csrf_protect a úsáid ar dtús:
from django.views.decorators.cache import cache_page
from django.views.decorators.csrf import csrf_protect
@cache_page(60 * 15)
@csrf_protect
def my_view(request): ...
<decorating-class-based-views>Má tá tuairimí bunaithe ar rang-bhunaithe á úsáid agat, is féidir leat tagairt a thabhairt do:ref: `Tuairimí rangbhunaithe a mhaisiú `.
Tástáil agus cosaint CSRFLink to this heading
De ghnáth beidh an CSRFViewMiddleware 'ina bhac mór ar fheidhmeanna radhairc a thástáil, mar gheall ar an ngá atá leis an gcomhartha CSRF nach mór a sheoladh le gach iarratas POST. Ar an gcúis seo, modhnaíodh cliant HTTP Django le haghaidh tástálacha chun bratach a shocrú ar iarratais a mhaolann an middleware agus an maisitheoir csrf_protect` ionas nach dhiúltaíonn siad iarratais a thuilleadh. I ngach leith eile (m.sh. fianáin a sheoladh srl.), iompraíonn siad mar an gcéanna.
Más mian leat, ar chúis éigin, * an cliant tástála seiceálacha CSRF a dhéanamh, is féidir leat sampla den chliant tástála a chruthú a fhorfheidhmíonn seiceálacha CSRF:
>>> from django.test import Client
>>> csrf_client = Client(enforce_csrf_checks=True)
Cásanna imeallLink to this heading
Is féidir go mbeadh riachtanais neamhghnácha ag tuairimí áirithe a chiallaíonn nach n-oireann siad don ghnáthphatrún Is féidir le roinnt fóntais a bheith úsáideach sna cásanna seo. Déantar cur síos ar na cásanna a d'fhéadfadh a bheith ag teastáil iontu sa chuid seo a leanas.
Cosaint CSRF a dhíchumasú le haghaidh ach cúpla tuairimLink to this heading
Éilíonn cosaint CSRF ar an gcuid is mó de na tuairimí, ach níl cúpla ceann acu.
Réiteach: seachas an middleware a dhíchumasú agus csrf_protect` a chur i bhfeidhm ar na tuairimí go léir a theastaíonn uathu, cumasaigh an middleware agus úsáide:func: ~django.views.decorators.csrf.csrf_exempt.
An comhartha a shocrú nuair nach n-úsáidtear ``CSRFViewMiddleware.process_view () ``Link to this heading
Tá cásanna ann nuair nach raibh CSRFViewMiddleware.process_view` rith sula ndéantar do radharc a reáchtáil - 404 agus 500 láimhseálaí, mar shampla - ach teastaíonn an comhartha CSRF uait fós i bhfoirm.
Réiteach: úsáid: func: ~django.views.decorators.csrf.requires_csrf_token
An comhartha CSRF san áireamh i radharc gan chosaintLink to this heading
D'fhéadfadh go mbeadh roinnt tuairimí ann nach bhfuil gan chosaint agus a bhfuil díolmhaithe orthu ag csrf_exempt`, ach ní mór an comhartha CSRF a áireamh fós.
Réiteach: úsáid: func: ~django.views.decorators.csrf.csrf_exempt ina dhiaidh sin: func: ~django.views.decorators.csrf.requires_csrf_token. (ie, ba chóir go mbeadh requires_csrf_token` an maisitheoir is istigh).
Radharc a chosaint le haghaidh cosán amháin amháinLink to this heading
Teastaíonn cosaint CSRF ó dhearcadh faoi shraith amháin coinníollacha amháin, agus níor cheart dó é a bheith aige don chuid eile den am.
Réiteach: úsáid: func: ~django.views.decorators.csrf.csrf_exempt don fheidhm amharc iomlán, agus:func: ~django.views.decorators.csrf.csrf_protect don chosán laistigh de dhíth a chosaint air. Sampla:
from django.views.decorators.csrf import csrf_exempt, csrf_protect
@csrf_exempt
def my_view(request):
@csrf_protect
def protected_path(request):
do_something()
if some_condition():
return protected_path(request)
else:
do_something_else()
Leathanach a chosaint a úsáideann AJAX gan foirm HTMLLink to this heading
Déanann leathanach iarratas POST trí AJAX, agus níl foirm HTML ag an leathanach le a:ttag: csrf_token a chuirfeadh an fianán CSRF riachtanach a sheoladh.
Réiteach: úsáid: func: ~django.views.decorators.csrf.ensure_csrf_cookie ar an radharc a sheolann an leathanach.
Cosaint CSRF in iarratais in-athúsáidteLink to this heading
Toisc go bhfuil sé indéanta don fhorbróir an CSRFViewMiddleware a mhúchadh, úsáideann gach tuairim ábhartha in aipeanna contrib an maisitheoir csrf_protect` chun slándáil na bhfeidhmchlár seo i gcoinne CSRF a chinntiú. Moltar go n-úsáideann forbróirí aipeanna in-athúsáidte eile a dteastaíonn na ráthaíochtaí céanna uathu an maisitheoir csrf_protect` ar a dtuairimí.