Articles

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 POSTPUTPATCHDELETE, 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 do luchd-cleachdaidh air an duilleag-lìn.Tha ro-stiùiridh no dhà anndefico-chòrdadh làmh-ghoirid nite no 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.

Leabhar-latha ùr-ghnàthachaidh
Na caill na naidheachdan as cudromaiche mu ùr-ghnàthachadh. Clàraich gus am faighinn air post-d.

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 dearbhadh CSRF defitaobh 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:

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

Leabhar-latha ùr-ghnàthachaidh
Na caill na naidheachdan as cudromaiche mu ùr-ghnàthachadh. Clàraich gus am faighinn air post-d.