Tèarainteachd lìn Laravel: Dè a th’ ann an Forgery Iarrtas Tar-Làraich (CSRF)?
Anns an oideachadh Laravel seo bidh sinn a’ bruidhinn air Tèarainteachd Lìn agus mar as urrainn dhut tagradh lìn a dhìon bho Thar-làraich Iarrtas Forgery no ionnsaighean CSRF.
Is e gnìomh droch-rùnach a th’ ann an CSRF a nì neach-ionnsaigh, a bhios a’ dèanamh ghnìomhan às leth neach-cleachdaidh dearbhte, a’ dèanamh cron air tèarainteachd lìn. Gu fortanach, tha Laravel a’ toirt seachad na h-innealan gus casg a chuir air an seòrsa so-leòntachd seo.
Ùine leughaidh tuairmseach: 5 minuti
Dè a th’ ann an CSRF?
Bidh CSRF a’ toirt ionnsaigh air seiseanan luchd-cleachdaidh hijack. Bidh iad a’ dèanamh seo le bhith a’ mealladh neach-cleachdaidh gu bhith a’ cur a-steach iarrtas tro thagaichean foirm falaichte no URLan droch-rùnach (ìomhaighean no ceanglaichean) gun fhios don neach-cleachdaidh.
Bidh an ionnsaigh seo a’ leantainn gu atharrachadh ann an staid seisean luchd-cleachdaidh, dàta ag aoidion, agus uaireannan faodaidh luchd-hackers dàta cleachdaiche deireannach a làimhseachadh ann an tagradh.
Tha an dealbh gu h-àrd a’ sealltainn suidheachadh far a bheilear a’ briseadh tèarainteachd lìn. Bidh an neach-fulang a’ cur iarrtas le bhith a’ cliogadh air ceangal (a fhuaireadh), a’ cur iarrtas gu frithealaiche làrach-lìn a bheir a-mach buaidhean a dh’ iarras an neach-tarraing, aig a bheil seilbh air an fhiosrachadh a tha feumail airson faighinn gu frithealaiche na làraich-lìn agus a làimhseachadh.
Mar a chuireas tu casg air iarrtasan CSRF
Gus piseach a thoirt air an tèarainteachd lìn de na tagraidhean agad, anns gach seisean cleachdaiche, bidh Laravel a’ gineadh comharran tèarainte a bhios e a’ cleachdadh gus dèanamh cinnteach gur e an neach-cleachdaidh dearbhte am fear a dh’ iarras an tagradh.
Leis gu bheil an comharra seo ag atharrachadh a h-uile uair a thèid seisean cleachdaiche ath-nuadhachadh, chan urrainn dha neach-ionnsaigh faighinn thuige.
Nuair a bhios iarrtas ann airson fiosrachadh cleachdaiche atharrachadh air taobh an fhrithealaiche (backend) mar POST
, PUT
, PATCH
e DELETE
, feumaidh tu an stiùireadh a thoirt a-steach @csrf
anns an fhoirm iarrtais blade
HTML. Tha an @csrf
mar sin tha e na stiùireadh Blade
air a chleachdadh gus comharra falaichte a ghineadh a chaidh a dhearbhadh leis an tagradh.
An stiùir Blade
is e an co-chòrdadh a thathas a’ cleachdadh taobh a-staigh einnsean teamplaid Laravel ris an canar Blade . Gus faidhle a chruthachadh blade
feumaidh tu ainm a thoirt dha - anns an fhoirm cùise againn - agus an uairsin leudachadh air an lann. Tha seo a’ ciallachadh gum bi an t-ainm air an fhaidhle form.blade.php
.
Tha am faidhle air a chleachdadh blade
gus beachdan a thoirt seachad do luchd-cleachdaidh air an duilleag-lìn Tha dà stiùireadh ro-mhìnichte no co-chòrdadh làmh-ghoirid lann as urrainn dhut a chleachdadh. Mar eisimpleir, @if
feuch a bheil suidheachadh air a choileanadh, @empty
dèan cinnteach nach eil na clàran falamh, @auth
thoir sùil a bheil neach-cleachdaidh air a dhearbhadh agus mar sin air adhart.
Ach rachamaid air ais chun stiùireadh @csrf
. Seo mar a chleachdas tu e:
<form method="POST" action="{{route('pay')}}">
@csrf
</form>
Tionndaidhean roimhe de Laravel
bha dòigh-obrach eadar-dhealaichte aca: they both work and do the same thing.
<form method="POST" action="{{route('pay')}}">
<input type="hidden" name="_token" value="{{ csrf_token() }}" />
</form>
Nuair a bhios an comharra CSRF
nach eil an làthair anns an iarrtas foirm a thathar a’ cur a-steach no ma tha coltas ann gu bheil e neo-dhligheach, bidh Laravel a’ gineadh teachdaireachd mearachd “Page Expired” le còd inbhe 419.
Ciamar agus càite an tèid an dearbhadh CSRF a chumail
Am bathar meadhanach VerifyCsrfToken
a’ riaghladh an dearbhaidh CSRF
taobh a-staigh tagradh Laravel. Tha an middleware
air a chlàradh ann an Kernel.php
agus tha e suidhichte anns an eòlaire app/Http/Middleware
. Tha seo a’ ciallachadh gu bheil an middleware
tha e air a phiobrachadh airson iarrtasan taobh a-staigh an lìn, nach eil co-cheangailte ris na APIan.
protected $middlewareGroups = [
'web' => [
.
.
.
.
.
\App\Http\Middleware\VerifyCsrfToken::class,
],
];
Am bathar meadhanach VerifyCsrfToken
a’ leudachadh a’ chlas Illuminate\Foundation\Http\Middleware\VerifyCsrfToken
, ie tha an sgrùdadh CSRF air a mhìneachadh taobh a-staigh a’ chlas.
Dèanamaid dàibheadh nas doimhne gus faighinn a-mach mar a làimhsicheas Laravel dearbhadh CSRF
.
Taobh a-staigh a’ chlas, tha an gnìomh againn tokensMatch
.
protected function tokensMatch($request)
{
$token = $this->getTokenFromRequest($request);
return is_string($request->session()->token()) &&
is_string($token) &&
hash_equals($request->session()->token(), $token);
}
anns a’ chòd a’ dearbhadh a bheil an seisean agus na comharran CSRF a-steach a’ maidseadh.
Bidh an gnìomh a’ dèanamh dà rud:
- faigh
$this->getTokenFromRequest
an comharra bhon iarrtas a tha a’ tighinn a-steach ceangailte tro raon falaichte no bann-cinn an iarrtais. Tha an tòcan air a dhì-chrioptachadh agus an uairsin air a thilleadh chun chaochladair tòcan.
protected function getTokenFromRequest($request)
{
$token = $request->input('_token') ?: $request->header('X-CSRF-TOKEN');
if (! $token && $header = $request->header('X-XSRF-TOKEN')) {
try {
$token = CookieValuePrefix::remove($this->encrypter->decrypt($header, static::serialized()));
} catch (DecryptException $e) {
$token = '';
}
}
return $token;
}
Anns a’ chòd gheibh e comharra bhon bhann-cinn
2. Tilg an dà chuid an tòcan iarrtas agus an seisean gu sreang agus an uairsin cleachd hash_equals
air a thogail ann am PHP gus coimeas a dhèanamh ma tha an dà shreath co-ionann. Tha toradh an obrachaidh seo an-còmhnaidh bool (fìor) no (meallta) .
Às aonais URIs bho dhìon CSRF
Is dòcha gum feum sinn seata de URIan a thoirmeasg bho dhìon CSRF. Mar eisimpleir, ma chleachdas sinn PayPal gus pàighidhean a phròiseasadh agus an siostam cuibhle-lìn aca a chleachdadh, feumaidh tu an t-slighe làimhseachaidh PayPal a chuir a-mach à dìon CSRF oir cha bhith fios aig PayPal dè an tòcan CSRF a chuireas tu chun na slighean agad.
Mar as trice, feumaidh tu na slighean sin a chuir air taobh a-muigh na buidhne web
meadhan-bathair sin Laravel a’ buntainn ris a h-uile slighe san fhaidhle routes/web.php
. Faodaidh sinn cuideachd slighean sònraichte a thoirmeasg le bhith a’ toirt seachad an URIan don dòigh validateCsrfTokens
ann am faidhle an tagraidh bootstrap/app.php
:
->withMiddleware(function (Middleware $middleware) {
$middleware->validateCsrfTokens(except: [
'stripe/*',
'http://example.com/foo/bar',
'http://example.com/foo/*',
]);
})
Leughaidhean Co-cheangailte
Ercole Palmeri