CSRF er en ondsindet aktivitet udført af en angriber, som udfører handlinger på vegne af en godkendt bruger, hvilket er skadeligt for websikkerheden. Heldigvis leverer Laravel værktøjerne til at forhindre denne type sårbarhed.
CSRF-angreb kaprer brugersessioner. Det gør de ved at narre en bruger til at indsende en anmodning via skjulte formular-tags eller ondsindede URL'er (billeder eller links) uden brugerens viden.
Dette angreb fører til en ændring i brugersessionstilstand, datalæk, og nogle gange kan hackere manipulere slutbrugerdata i en applikation.
Billedet ovenfor illustrerer et scenarie, hvor websikkerheden er brudt. Offeret sender en anmodning ved at klikke på et link (modtaget), og sender en anmodning til en webstedsserver, som vil frembringe effekter, som hackeren ønsker, og som kommer i besiddelse af de oplysninger, der er nyttige til at få adgang til og manipulere webstedsserveren.
For at forbedre sikkerhed web af dine applikationer, i hver brugersession genererer Laravel sikre tokens, som den bruger til at sikre, at den autentificerede bruger er den, der anmoder om applikationen.
Fordi dette token ændres, hver gang en brugersession gendannes, kan en angriber ikke få adgang til det.
Hver gang der er en anmodning om at ændre brugeroplysninger på serversiden (backend) f.eks POST
, PUT
, PATCH
e DELETE
, skal du medtage direktivet @csrf
i anmodningsformularen blade
HTML. Det @csrf
det er derfor et direktiv Blade
bruges til at generere et skjult token, der er valideret af applikationen.
Direktivet Blade
kaldes den syntaks, der bruges i Laravel-skabelonmotoren Blade . For at oprette en fil blade
du skal give den et navn – i vores tilfældeform – efterfulgt af forlængelsen af bladet. Det betyder, at filen vil have navnet form.blade.php
.
Filen er brugt blade
for at gengive visninger for brugere på websiden. Der er et par præ-direktiverdefinite eller blade stenografi syntaks, du kan bruge. For eksempel, @if
kontrollere, om en betingelse er opfyldt, @empty
kontrollere, om posterne ikke er tomme, @auth
kontrollere, om en bruger er godkendt og så videre.
Men lad os gå tilbage til direktivet @csrf
. Sådan bruger du det:
<form method="POST" action="{{route('pay')}}">
@csrf
</form>
Tidligere versioner af Laravel havde en anden opsætning: de både virker og gør det samme.
<form method="POST" action="{{route('pay')}}">
<input type="hidden" name="_token" value="{{ csrf_token() }}" />
</form>
Når CSRF-tokenet mangler i den formularanmodning, der indsendes, eller hvis det ser ud til at være ugyldigt, sender Laravel en "Page Expired"-fejlmeddelelse med en 419-statuskode.
Mellemvare VerifyCsrfToken
håndterer CSRF-verifikation i Laravel-applikationen. Det middleware
er registreret i Kernel.php
og er placeret i mappen app/Http/Middleware
. Det betyder, at middleware
den udløses for anmodninger på nettet, der ikke er relateret til API'erne.
protected $middlewareGroups = [
'web' => [
.
.
.
.
.
\App\Http\Middleware\VerifyCsrfToken::class,
],
];
VerifyCsrfToken-middlewaren udvider klassen Illuminate\Foundation\Http\Middleware\VerifyCsrfToken
, dvs. CSRF-verifikation er defiaften i klassen.
Lad os grave dybere for at finde ud af, hvordan Laravel håndterer CSRF-verifikation.
Inde i klassen har vi funktionen tokensMatch
.
protected function tokensMatch($request)
{
$token = $this->getTokenFromRequest($request);
return is_string($request->session()->token()) &&
is_string($token) &&
hash_equals($request->session()->token(), $token);
}
i koden bestemmer, om sessionen og input CSRF tokens matcher.
Funktionen gør to ting:
$this->getTokenFromRequest
tokenet fra den indgående anmodning vedhæftet via et skjult felt eller anmodningshovedet. Tokenet dekrypteres og returneres derefter til token-variablen.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;
}
I koden får den token fra header
2. Kast både anmodningstokenet og sessionen til en streng og brug derefter hash_equals
indbygget i PHP for at sammenligne, hvis begge strenge er ens. Resultatet af denne operation er altid bool (sand) eller (falsk) .
Ercole Palmeri
Coveware by Veeam vil fortsætte med at levere responstjenester til cyberafpresning. Coveware vil tilbyde kriminaltekniske og afhjælpende funktioner...
Forudsigende vedligeholdelse revolutionerer olie- og gassektoren med en innovativ og proaktiv tilgang til anlægsstyring...
Det britiske CMA har udsendt en advarsel om Big Techs adfærd på markedet for kunstig intelligens. Der…
Dekretet om "grønne huse", der er formuleret af Den Europæiske Union for at øge bygningers energieffektivitet, har afsluttet sin lovgivningsproces med...