CSRF ir ļaunprātīga darbība, ko veic uzbrucējs, kurš veic darbības autentificēta lietotāja vārdā, kas kaitē tīmekļa drošībai. Par laimi, Laravel nodrošina rīkus, lai novērstu šāda veida ievainojamību.
CSRF uzbrūk lietotāju sesiju nolaupīšanai. Viņi to dara, maldinot lietotāju iesniegt pieprasījumu, izmantojot slēptos veidlapu tagus vai ļaunprātīgus URL (attēlus vai saites), lietotājam nezinot.
Šis uzbrukums izraisa izmaiņas lietotāja sesijas stāvoklī, datu noplūdi, un dažreiz hakeri var manipulēt ar galalietotāja datiem lietojumprogrammā.
Augšējā attēlā ir parādīts scenārijs, kurā tiek pārkāpta tīmekļa drošība. Cietušais nosūta pieprasījumu, noklikšķinot uz saites (saņemts), nosūtot pieprasījumu vietnes serverim, kas radīs hakera vēlamos efektus, kuru rīcībā nonāk informācija, kas ir noderīga, lai piekļūtu vietnes serverim un ar to manipulētu.
Lai uzlabotu drošība Jūsu lietojumprogrammu tīmeklī, katrā lietotāja sesijā Laravel ģenerē drošus marķierus, kurus tā izmanto, lai nodrošinātu, ka autentificētais lietotājs ir tas, kurš pieprasa lietojumprogrammu.
Tā kā šis marķieris mainās ikreiz, kad tiek atjaunota lietotāja sesija, uzbrucējs nevar tai piekļūt.
Ikreiz, kad ir pieprasījums mainīt lietotāja informāciju servera pusē (backend), piemēram POST
, PUT
, PATCH
e DELETE
, jums ir jāiekļauj direktīva @csrf
pieprasījuma veidlapā blade
HTML. The @csrf
tāpēc tā ir direktīva Blade
izmanto, lai ģenerētu slēptu marķieri, ko apstiprinājusi lietojumprogramma.
Direktīva Blade
ir sintakse, ko izmanto Laravel veidņu dzinējā Asmens . Lai izveidotu failu blade
jums ir jāpiešķir tam nosaukums — mūsu gadījumā —, kam seko asmens pagarinājums. Tas nozīmē, ka failam būs nosaukums form.blade.php
.
Fails tiek izmantots blade
lai atveidotu tīmekļa lapas lietotāju skatījumus. Ir dažas iepriekšējas direktīvasdefinite vai blade saīsināto sintakse, ko varat izmantot. Piemēram, @if
pārbaudiet, vai nosacījums ir izpildīts, @empty
pārbaudiet, vai ieraksti nav tukši, @auth
pārbaudiet, vai lietotājs ir autentificēts un tā tālāk.
Bet atgriezīsimies pie direktīvas @csrf
. Lūk, kā jūs to izmantojat:
<form method="POST" action="{{route('pay')}}">
@csrf
</form>
Iepriekšējām Laravel versijām bija atšķirīgs uzstādījums: tās abas darbojas un dara vienu un to pašu.
<form method="POST" action="{{route('pay')}}">
<input type="hidden" name="_token" value="{{ csrf_token() }}" />
</form>
Ja iesniegtajā veidlapas pieprasījumā trūkst CSRF marķiera vai ja tas šķiet nederīgs, Laravel parāda kļūdas ziņojumu “Lapas derīguma termiņš beidzies” ar statusa kodu 419.
Starpprogrammatūra VerifyCsrfToken
apstrādā CSRF verifikāciju Laravel lietojumprogrammā. The middleware
ir reģistrēts Kernel.php
un atrodas direktorijā app/Http/Middleware
. Tas nozīmē, ka middleware
tas tiek aktivizēts pieprasījumiem tīmeklī, kas nav saistīti ar API.
protected $middlewareGroups = [
'web' => [
.
.
.
.
.
\App\Http\Middleware\VerifyCsrfToken::class,
],
];
VerifyCsrfToken starpprogrammatūra paplašina klasi Illuminate\Foundation\Http\Middleware\VerifyCsrfToken
, t.i., CSRF verifikācija ir defivakars klasē.
Padziļināsimies, lai uzzinātu, kā Laravel apstrādā CSRF verifikāciju.
Klasē mums ir funkcija tokensMatch
.
protected function tokensMatch($request)
{
$token = $this->getTokenFromRequest($request);
return is_string($request->session()->token()) &&
is_string($token) &&
hash_equals($request->session()->token(), $token);
}
kodā nosaka, vai sesija un ievades CSRF marķieri sakrīt.
Funkcija veic divas lietas:
$this->getTokenFromRequest
marķieris no ienākošā pieprasījuma, kas pievienots, izmantojot slēptu lauku vai pieprasījuma galveni. Tokens tiek atšifrēts un pēc tam atgriezts marķiera mainīgajā.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;
}
Kodā tas saņem pilnvaru no galvenes
2. Apraidiet gan pieprasījuma pilnvaru, gan sesiju virknē un pēc tam izmantojiet hash_equals
iebūvēts PHP, lai salīdzinātu, vai abas virknes ir vienādas. Šīs operācijas rezultāts vienmēr ir bool (patiess) vai (false) .
Ercole Palmeri
Google DeepMind ievieš uzlabotu sava mākslīgā intelekta modeļa versiju. Jaunais uzlabotais modelis nodrošina ne tikai…
Laravel, kas slavena ar savu eleganto sintaksi un jaudīgām funkcijām, nodrošina arī stabilu pamatu moduļu arhitektūrai. Tur…
Cisco un Splunk palīdz klientiem paātrināt viņu ceļu uz nākotnes drošības operāciju centru (SOC), izmantojot…
Ransomware ir dominējusi ziņās pēdējos divus gadus. Lielākā daļa cilvēku labi apzinās, ka uzbrukumi…
Katānijas poliklīnikā tika veikta oftalmoplastikas operācija, izmantojot Apple Vision Pro komerciālo skatītāju…
Smalko motoriku attīstīšana, izmantojot krāsošanu, sagatavo bērnus sarežģītākām prasmēm, piemēram, rakstīšanai. Lai krāsotu…
Jūras flotes nozare ir patiess globāls ekonomikas spēks, kas ir virzījies uz 150 miljardu tirgu...
Pagājušajā pirmdienā Financial Times paziņoja par darījumu ar OpenAI. FT licencē savu pasaules līmeņa žurnālistiku…