A CSRF egy támadó által végrehajtott rosszindulatú tevékenység, aki hitelesített felhasználó nevében hajt végre olyan műveleteket, amelyek károsak a webbiztonságra. Szerencsére a Laravel eszközöket biztosít az ilyen típusú sebezhetőségek megelőzésére.
A CSRF megtámadja a felhasználói munkamenetek eltérítését. Ezt úgy teszik meg, hogy ráveszik a felhasználót, hogy a felhasználó tudta nélkül küldjön be kérelmet rejtett űrlapcímkéken vagy rosszindulatú URL-eken (képeken vagy linkeken) keresztül.
Ez a támadás a felhasználói munkamenet állapotának megváltozásához, adatszivárgáshoz vezet, és néha a hackerek manipulálhatják a végfelhasználói adatokat egy alkalmazásban.
A fenti kép egy olyan forgatókönyvet mutat be, amikor a webbiztonság megsérül. Az áldozat egy hivatkozásra kattintva (kapott) kérést küld, amely egy weboldal szerverére küldi el a kérést, amely a hacker által kívánt hatást váltja ki, aki birtokába kerül a webhelyszerver eléréséhez és manipulálásához szükséges információk.
Hogy javítsa a biztonság Az alkalmazások webes felületén a Laravel minden felhasználói munkamenetben biztonságos tokeneket generál, amelyek segítségével biztosítja, hogy a hitelesített felhasználó legyen az, aki kéri az alkalmazást.
Mivel ez a token minden felhasználói munkamenet újragenerálásakor megváltozik, a támadó nem férhet hozzá.
Amikor van egy kérés a felhasználói adatok módosítására a szerver oldalon (backend), mint pl POST
, PUT
, PATCH
e DELETE
, akkor csatolnia kell az irányelvet @csrf
az igénylőlapon blade
HTML. A @csrf
ezért ez egy irányelv Blade
az alkalmazás által jóváhagyott rejtett token generálására szolgál.
Az irányelv Blade
a Laravel sablonmotorban használt szintaxis Penge . Fájl létrehozásához blade
nevet kell adnia – esetünkben – a penge meghosszabbításával. Ez azt jelenti, hogy a fájl neve lesz form.blade.php
.
A fájl használatban van blade
nézeteket jelenít meg a felhasználók számára a weboldalon. Van néhány előzetes irányelvdefinite vagy blade gyorsírási szintaxist használhat. Például, @if
ellenőrizze, hogy egy feltétel teljesül-e, @empty
ellenőrizze, hogy a rekordok nem üresek-e, @auth
ellenőrizze, hogy a felhasználó hitelesített-e és így tovább.
De térjünk vissza az irányelvhez @csrf
. A következőképpen használja:
<form method="POST" action="{{route('pay')}}">
@csrf
</form>
A Laravel korábbi verzióiban más volt a beállítás: mindkettő működik és ugyanazt csinálják.
<form method="POST" action="{{route('pay')}}">
<input type="hidden" name="_token" value="{{ csrf_token() }}" />
</form>
Ha a CSRF token hiányzik a benyújtott űrlapkérésből, vagy érvénytelennek tűnik, a Laravel egy „Oldal lejárt” hibaüzenetet küld a 419-es állapotkóddal.
A köztes szoftver VerifyCsrfToken
kezeli a CSRF ellenőrzést a Laravel alkalmazáson belül. A middleware
be van regisztrálva Kernel.php
és a címtárban található app/Http/Middleware
. Ez azt jelenti, hogy a middleware
a weben belüli kérések esetén aktiválódik, amelyek nem kapcsolódnak az API-khoz.
protected $middlewareGroups = [
'web' => [
.
.
.
.
.
\App\Http\Middleware\VerifyCsrfToken::class,
],
];
A VerifyCsrfToken köztes szoftver kiterjeszti az osztályt Illuminate\Foundation\Http\Middleware\VerifyCsrfToken
, azaz a CSRF ellenőrzés az defiaz osztályon belül.
Ássunk mélyebbre, hogy megtudjuk, hogyan kezeli a Laravel a CSRF-ellenőrzést.
Az osztályon belül megvan a függvény tokensMatch
.
protected function tokensMatch($request)
{
$token = $this->getTokenFromRequest($request);
return is_string($request->session()->token()) &&
is_string($token) &&
hash_equals($request->session()->token(), $token);
}
a kódban meghatározza, hogy a munkamenet és a bemeneti CSRF tokenek egyeznek-e.
A függvény két dolgot végez:
$this->getTokenFromRequest
a bejövő kérelemből származó token egy rejtett mezőn vagy a kérés fejlécén keresztül csatolva. A token visszafejtésre kerül, majd visszakerül a token változóba.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;
}
A kódban a fejlécből kap tokent
2. Öntse mind a kérésjogkivonatot, mind a munkamenetet egy karakterláncba, majd használja hash_equals
PHP-be építve összehasonlítani, ha mindkét karakterlánc egyenlő. Ennek a műveletnek az eredménye mindig bool (igaz) vagy (hamis) .
Ercole Palmeri
Szemplasztikai műtétet végeztek az Apple Vision Pro reklámmegjelenítővel a Catania Poliklinikán…
A finom motoros készségek színezéssel történő fejlesztése felkészíti a gyerekeket olyan összetettebb készségekre, mint az írás. Kiszínezni…
A haditengerészeti szektor igazi világgazdasági hatalom, amely egy 150 milliárdos piac felé navigált...
Múlt hétfőn a Financial Times bejelentette, hogy megállapodást köt az OpenAI-val. Az FT engedélyezi világszínvonalú újságírását…