CSRF on haitallista toimintaa, jonka suorittaa hyökkääjä, joka suorittaa toimintoja todetun käyttäjän puolesta, mikä vahingoittaa verkkoturvallisuutta. Onneksi Laravel tarjoaa työkalut tämän tyyppisten haavoittuvuuksien estämiseen.
CSRF hyökkää kaappaamaan käyttäjien istuntoja. He tekevät tämän huijaamalla käyttäjän lähettämään pyynnön piilotettujen lomaketunnisteiden tai haitallisten URL-osoitteiden (kuvien tai linkkien) kautta käyttäjän tietämättä.
Tämä hyökkäys johtaa muutokseen käyttäjän istunnon tilassa, tietovuotoon, ja joskus hakkerit voivat manipuloida loppukäyttäjän tietoja sovelluksessa.
Yllä oleva kuva havainnollistaa tilannetta, jossa verkkoturvallisuus rikotaan. Uhri lähettää pyynnön napsauttamalla linkkiä (vastaanotettu) ja lähettää pyynnön verkkosivuston palvelimelle, joka tuottaa hakkerin toivomia vaikutuksia, kun hän saa haltuunsa verkkosivustopalvelimelle pääsyä ja sen manipulointia varten hyödyllisiä tietoja.
Parantaaksesi turvallisuus sovellustesi verkkoon, Laravel luo jokaisessa käyttäjäistunnossa suojattuja tunnuksia, joita se käyttää varmistaakseen, että todennettu käyttäjä on se, joka pyytää sovellusta.
Koska tämä tunnus muuttuu aina, kun käyttäjän istunto luodaan uudelleen, hyökkääjä ei voi käyttää sitä.
Aina kun on pyyntö muuttaa käyttäjätietoja palvelimen puolella (backend), kuten POST
, PUT
, PATCH
e DELETE
, sinun on sisällytettävä direktiivi @csrf
pyyntölomakkeessa blade
HTML. The @csrf
se on siis direktiivi Blade
käytetään sovelluksen vahvistaman piilotetun tunnuksen luomiseen.
Direktiivi Blade
on syntaksi, jota käytetään Laravel-mallimoottorissa nimeltä Terä . Luodaksesi tiedoston blade
sinun on annettava sille nimi – meidän tapauksessamme – ja sen jälkeen terän jatke. Tämä tarkoittaa, että tiedostolla on nimi form.blade.php
.
Tiedostoa käytetään blade
näkymää käyttäjille verkkosivulla. On olemassa muutamia esiohjeitadefinite- tai blade shorthand -syntaksia, jota voit käyttää. Esimerkiksi, @if
tarkista, täyttyykö ehto, @empty
tarkista, etteivät tietueet ole tyhjiä, @auth
tarkista onko käyttäjä todennettu ja niin edelleen.
Mutta palataanpa direktiiviin @csrf
. Näin käytät sitä:
<form method="POST" action="{{route('pay')}}">
@csrf
</form>
Laravelin aiemmissa versioissa oli erilainen kokoonpano: ne molemmat toimivat ja tekevät saman asian.
<form method="POST" action="{{route('pay')}}">
<input type="hidden" name="_token" value="{{ csrf_token() }}" />
</form>
Kun CSRF-tunnus puuttuu lähetettävästä lomakepyynnöstä tai jos se näyttää virheelliseltä, Laravel lähettää "Sivu vanhentunut" -virhesanoman, jossa on tilakoodi 419.
Väliohjelmisto VerifyCsrfToken
käsittelee CSRF-vahvistuksen Laravel-sovelluksessa. The middleware
on rekisteröity Kernel.php
ja sijaitsee hakemistossa app/Http/Middleware
. Tämä tarkoittaa, että middleware
se käynnistetään verkon sisäisille pyynnöille, jotka eivät liity API:ihin.
protected $middlewareGroups = [
'web' => [
.
.
.
.
.
\App\Http\Middleware\VerifyCsrfToken::class,
],
];
VerifyCsrfToken-väliohjelmisto laajentaa luokkaa Illuminate\Foundation\Http\Middleware\VerifyCsrfToken
, eli CSRF-varmennus on defiillalla luokassa.
Kaivataanpa syvemmälle, kuinka Laravel käsittelee CSRF-todennusta.
Luokan sisällä meillä on toiminto tokensMatch
.
protected function tokensMatch($request)
{
$token = $this->getTokenFromRequest($request);
return is_string($request->session()->token()) &&
is_string($token) &&
hash_equals($request->session()->token(), $token);
}
koodissa määrittää, täsmäävätkö istunto ja syötetyt CSRF-tunnukset.
Toiminto tekee kaksi asiaa:
$this->getTokenFromRequest
saapuvan pyynnön tunniste, joka on liitetty piilokentän tai pyynnön otsikon kautta. Tokenin salaus puretaan ja palautetaan sitten tunnusmuuttujaan.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;
}
Koodissa se saa tokenin otsikosta
2. Suoratoista sekä pyyntötunnus että istunto merkkijonoon ja käytä sitten hash_equals
sisäänrakennettu PHP vertaamaan, ovatko molemmat merkkijonot samat. Tämän toimenpiteen tulos on aina bool (tosi) tai (epätosi) .
Ercole Palmeri
Veeamin Coveware tarjoaa jatkossakin kyberkiristystapahtumien reagointipalveluita. Coveware tarjoaa rikosteknisiä ja korjaavia ominaisuuksia…
Ennakoiva huolto mullistaa öljy- ja kaasualan innovatiivisella ja ennakoivalla lähestymistavalla laitosten hallintaan.…
Britannian CMA on antanut varoituksen Big Techin käyttäytymisestä tekoälymarkkinoilla. Siellä…
Euroopan unionin rakennusten energiatehokkuuden parantamiseksi laatima "Green Houses" -asetus on saanut lainsäädäntöprosessinsa päätökseen…