Zimanî babet

Ewlekariya Malpera Laravel: Daxwaza Daxwaza Xaçerê ya Malperê (CSRF) çi ye?

Di vê dersa Laravel de em li ser Ewlehiya Webê diaxivin û meriv çawa serîlêdanek malperê ji êrişên Daxwaza Daxwaza Cross-Site an CSRF biparêze.

CSRF çalakiyek xirab e ku ji hêla êrîşker ve tête kirin, ku li ser navê bikarhênerek pejirandî çalakiyan dike, ku zirarê dide ewlehiya malperê. Xweşbextane, Laravel amûran peyda dike ku pêşî li vê celebê qelsiyê bigire.

CSRF çi ye?

CSRF êrîşî danişînên bikarhêneran dike. Ew vê yekê bi xapandina bikarhênerek dikin ku bêyî agahdariya bikarhêner bi navgîniya tagên forma veşartî an URL-yên xerab (wêneyên an girêdan) daxwazek bişînin.

Ev êrîş dibe sedema guherînek di rewşa rûniştina bikarhêner de, diherikin daneyan, û carinan hacker dikarin daneyên bikarhênerê dawî di serîlêdanê de manîpule bikin.

Wêneya li jor senaryoyek ku ewlehiya malperê tê binpêkirin nîşan dide. Mexdûr bi tikandina li ser girêdanek (wergirtin) daxwazek dişîne, daxwazek ji serverek malperê re dişîne ku dê bandorên ku ji hêla hacker ve tê xwestin çêbike, yê ku digihîje agahdariya kêrhatî ji bo gihîştin û manîpulekirina servera malperê.

Meriv çawa pêşî li daxwazên CSRF digire

Ji bo baştirkirina ewlekarî tevna serîlêdanên we, di her danişîna bikarhêner de, Laravel tokenên ewledar çêdike ku ew bikar tîne da ku piştrast bike ku bikarhênerê pejirandî yê ku serlêdanê daxwaz dike ye.

Ji ber ku ev nîşanek her carê ku rûniştek bikarhênerek ji nû ve tê nûve kirin diguhezîne, êrîşkar nikare xwe bigihîne wê.

Kengê ku daxwazek hebe ku agahdariya bikarhêner li ser alîyê serverê (paşgir) biguhezîne mîna POSTPUTPATCHDELETE, divê hûn dîrektîfê têxin nav xwe @csrf di forma daxwazê ​​de blade HTML. Ew @csrf ji ber vê yekê dîrektîfek e Blade ji bo afirandina tokenek veşartî ku ji hêla serîlêdanê ve hatî pejirandin tê bikar anîn.

Dîrektîfa Blade hevoksaziya ku di nav motora şablonê Laravel de tê bikar anîn e ku jê re tê gotin Zîl . Ji bo çêkirina pelê blade divê hûn navekî lê bidin - di forma doza me de - li dû wê dirêjkirina hêlînê. Ev tê wê wateyê ku pel dê navê xwe hebe form.blade.php.

Pelê tê bikaranîn blade ji bo dîtina bikarhêneran li ser rûpela webê bidindefihevoksaziya kurteya nite an blade hûn dikarin bikar bînin. Bo nimûne, @if kontrol bikin ka şertek têr e, @empty kontrol bikin ka tomar vala ne, @auth kontrol bikin ka bikarhênerek erêkirî ye û hwd.

Lê em vegerin ser dîrektîfê @csrf. Li vir e ku hûn wê çawa bikar bînin:

<form method="POST" action="{{route('pay')}}">

    @csrf
    
</form>

Guhertoyên berê yên Laravel xwedan sazûmanek cûda bûn: ew hem dixebitin û hem jî heman tiştî dikin.

nûçenameya Innovation
Nûçeyên herî girîng ên li ser nûjeniyê ji bîr nekin. Sign up ji bo wergirtina wan bi e-nameyê.
<form method="POST" action="{{route('pay')}}">
    
    <input type="hidden" name="_token" value="{{ csrf_token() }}" />
    
</form>

Dema ku nîşana CSRF ji daxwaznameya formê ya ku tê şandin winda dibe an heke ew nederbasdar xuya dike, Laravel bi kodek statûya 419 re peyamek xeletiyek "Rûpel qediya" derdixe.

Çawa û li ku derê verastkirina CSRF pêk tê

Naverast VerifyCsrfToken verastkirina CSRF di nav serîlêdana Laravel de birêve dibe. Ew middleware de qeydkirî ye Kernel.php û di pelrêçê de ye app/Http/Middleware. Ev tê wê wateyê ku middleware ew ji bo daxwazên di nav torê de, ne bi API-yan re têkildar e, tê destnîşan kirin.

protected $middlewareGroups = [
        'web' => [
           .
           .
           .
           .
           .
            \App\Http\Middleware\VerifyCsrfToken::class,
        ],
    ];

Navgîniya VerifyCsrfToken polê dirêj dike Illuminate\Foundation\Http\Middleware\VerifyCsrfToken, ango verastkirina CSRF ye defidi nav sinifê de hatine bicihkirin.

Ka em kûrtir bikolin da ku fêr bibin ka Laravel çawa verastkirina CSRF-ê dike.

Di hundurê polê de, fonksiyona me heye tokensMatch.

protected function tokensMatch($request)
{
     $token = $this->getTokenFromRequest($request);

     return is_string($request->session()->token()) &&
            is_string($token) &&
            hash_equals($request->session()->token(), $token);
}

di kodê de diyar dike ka danişîn û nîşaneyên têketina CSRF li hev dikin.

Fonksiyon du tiştan dike:

  1. stendin $this->getTokenFromRequest nîşanek ji daxwaznameya hatî ku bi navgînek veşartî an sernavê daxwazê ​​ve hatî girêdan. Nîşan tê deşîfrekirin û paşê vedigere guhêrbara tokenê.
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;
}

Di kodê de ew ji sernavê token digire

2. Hem nîşana daxwazê ​​û hem jî danişînê bavêjin rêzekê û dûv re bikar bînin hash_equals di PHP-ê de hatî çêkirin da ku hevber bikin ka her du rêzik wekhev in. Encama vê operasyonê her tim e bool (rast) an (derew) .

Ercole Palmeri

nûçenameya Innovation
Nûçeyên herî girîng ên li ser nûjeniyê ji bîr nekin. Sign up ji bo wergirtina wan bi e-nameyê.

Gotarên dawî

Destwerdana nûjen di Rastiya Zêdekirî de, bi temaşevanek Apple re li Polyclinic Catania

Operasyonek ophthalmoplasty bi karanîna temaşekera bazirganî ya Apple Vision Pro li Polyclinic Catania hate kirin…

3 May 2024

Feydeyên Rûpelên Rengdêr ji bo Zarokan - cîhanek sêrbaz ji bo her temenî

Pêşxistina jêhatîbûnên motorê yên xweş bi rêya rengînkirinê zarokan ji hunerên tevlihevtir ên mîna nivîsandinê re amade dike. Reng kirin…

2 May 2024

Pêşeroj li vir e: Pîşesaziya Keştiyê Çawa Şoreşa Aboriya Gerdûnî diafirîne

Sektora deryayî hêzek aborî ya cîhanî ya rastîn e, ku ber bi bazarek 150 mîlyar ve çûye…

1 May 2024

Weşanxane û OpenAI peymanan îmze dikin da ku herikîna agahdariya ku ji hêla îstîxbarata hunerî ve hatî hilberandin birêkûpêk bikin.

Duşemiya borî, Financial Times peymanek bi OpenAI re ragihand. FT destûr dide rojnamegeriya xwe ya cîhanî…

30 Nîsana 2024