CSRF എന്നത് ഒരു ആക്രമണകാരി നടത്തുന്ന ക്ഷുദ്രകരമായ പ്രവർത്തനമാണ്, ഒരു അംഗീകൃത ഉപയോക്താവിന് വേണ്ടിയുള്ള പ്രവർത്തനങ്ങൾ ചെയ്യുന്നു, ഇത് വെബ് സുരക്ഷയ്ക്ക് ഹാനികരമാണ്. ഭാഗ്യവശാൽ, ഇത്തരത്തിലുള്ള അപകടസാധ്യത തടയുന്നതിനുള്ള ഉപകരണങ്ങൾ Laravel നൽകുന്നു.
CSRF ആക്രമണങ്ങൾ ഉപയോക്തൃ സെഷനുകൾ ഹൈജാക്ക് ചെയ്യുന്നു. ഉപയോക്താവിന്റെ അറിവില്ലാതെ മറഞ്ഞിരിക്കുന്ന ഫോം ടാഗുകൾ അല്ലെങ്കിൽ ക്ഷുദ്രകരമായ URL-കൾ (ചിത്രങ്ങൾ അല്ലെങ്കിൽ ലിങ്കുകൾ) വഴി ഒരു അഭ്യർത്ഥന സമർപ്പിക്കുന്നതിന് ഒരു ഉപയോക്താവിനെ കബളിപ്പിച്ചാണ് അവർ ഇത് ചെയ്യുന്നത്.
ഈ ആക്രമണം ഉപയോക്തൃ സെഷൻ അവസ്ഥയിലെ മാറ്റത്തിനും ഡാറ്റ ചോർച്ചയ്ക്കും ചിലപ്പോൾ ഹാക്കർമാർക്കും ഒരു ആപ്ലിക്കേഷനിൽ അന്തിമ ഉപയോക്തൃ ഡാറ്റ കൈകാര്യം ചെയ്യാൻ കഴിയും.
വെബ് സുരക്ഷ ലംഘിക്കപ്പെടുന്ന ഒരു സാഹചര്യം മുകളിലെ ചിത്രം വ്യക്തമാക്കുന്നു. വെബ്സൈറ്റ് സെർവർ ആക്സസ് ചെയ്യുന്നതിനും കൈകാര്യം ചെയ്യുന്നതിനും ഉപയോഗപ്രദമായ വിവരങ്ങൾ കൈവശം വയ്ക്കുന്ന ഹാക്കർ ആഗ്രഹിക്കുന്ന ഇഫക്റ്റുകൾ സൃഷ്ടിക്കുന്ന വെബ്സൈറ്റ് സെർവറിലേക്ക് ഒരു അഭ്യർത്ഥന അയച്ചുകൊണ്ട് ഇര ഒരു ലിങ്കിൽ ക്ലിക്കുചെയ്ത് ഒരു അഭ്യർത്ഥന അയയ്ക്കുന്നു.
മെച്ചപ്പെടുത്താൻ സുരക്ഷ നിങ്ങളുടെ ആപ്ലിക്കേഷനുകളുടെ വെബ്, ഓരോ ഉപയോക്തൃ സെഷനിലും, ആധികാരികതയുള്ള ഉപയോക്താവാണ് ആപ്ലിക്കേഷൻ അഭ്യർത്ഥിക്കുന്നതെന്ന് ഉറപ്പാക്കാൻ ഉപയോഗിക്കുന്ന സുരക്ഷിത ടോക്കണുകൾ Laravel സൃഷ്ടിക്കുന്നു.
ഒരു ഉപയോക്തൃ സെഷൻ പുനഃസൃഷ്ടിക്കുമ്പോഴെല്ലാം ഈ ടോക്കൺ മാറുന്നതിനാൽ, ആക്രമണകാരിക്ക് അത് ആക്സസ് ചെയ്യാൻ കഴിയില്ല.
സെർവർ വശത്ത് (ബാക്കെൻഡ്) പോലെ ഉപയോക്തൃ വിവരങ്ങൾ മാറ്റാനുള്ള അഭ്യർത്ഥന ഉണ്ടാകുമ്പോഴെല്ലാം POST
, PUT
, PATCH
e DELETE
, നിങ്ങൾ നിർദ്ദേശം ഉൾപ്പെടുത്തണം @csrf
അഭ്യർത്ഥന ഫോമിൽ blade
HTML. ദി @csrf
അതിനാൽ ഇത് ഒരു നിർദ്ദേശമാണ് Blade
ആപ്ലിക്കേഷൻ സാധൂകരിച്ച ഒരു മറഞ്ഞിരിക്കുന്ന ടോക്കൺ സൃഷ്ടിക്കാൻ ഉപയോഗിക്കുന്നു.
നിർദ്ദേശം Blade
ലാറവെൽ ടെംപ്ലേറ്റ് എഞ്ചിനിനുള്ളിൽ ഉപയോഗിക്കുന്ന വാക്യഘടനയാണ് അരം . ഒരു ഫയൽ സൃഷ്ടിക്കാൻ blade
നിങ്ങൾ അതിന് ഒരു പേര് നൽകണം - ഞങ്ങളുടെ കേസ് രൂപത്തിൽ - തുടർന്ന് ബ്ലേഡിന്റെ വിപുലീകരണം. അതായത് ഫയലിന് പേര് ഉണ്ടായിരിക്കും form.blade.php
.
ഫയൽ ഉപയോഗിക്കുന്നു blade
വെബ്പേജിൽ ഉപയോക്താക്കൾക്കായി കാഴ്ചകൾ റെൻഡർ ചെയ്യുന്നതിനായി രണ്ട് മുൻകൂർ നിർദ്ദേശങ്ങളുണ്ട്defiനൈറ്റ് അല്ലെങ്കിൽ ബ്ലേഡ് ഷോർട്ട്ഹാൻഡ് വാക്യഘടന നിങ്ങൾക്ക് ഉപയോഗിക്കാം. ഉദാഹരണത്തിന്, @if
ഒരു വ്യവസ്ഥ തൃപ്തികരമാണോയെന്ന് പരിശോധിക്കുക, @empty
രേഖകൾ ശൂന്യമല്ലേയെന്ന് പരിശോധിക്കുക, @auth
ഒരു ഉപയോക്താവിന് ആധികാരികതയുണ്ടോ എന്നും മറ്റും പരിശോധിക്കുക.
എന്നാൽ നമുക്ക് നിർദ്ദേശത്തിലേക്ക് മടങ്ങാം @csrf
. നിങ്ങൾ ഇത് എങ്ങനെ ഉപയോഗിക്കുന്നു എന്നത് ഇതാ:
<form method="POST" action="{{route('pay')}}">
@csrf
</form>
Laravel-ന്റെ മുൻ പതിപ്പുകൾക്ക് വ്യത്യസ്തമായ ഒരു സജ്ജീകരണമുണ്ടായിരുന്നു: അവ രണ്ടും പ്രവർത്തിക്കുകയും ഒരേ കാര്യം ചെയ്യുകയും ചെയ്യുന്നു.
<form method="POST" action="{{route('pay')}}">
<input type="hidden" name="_token" value="{{ csrf_token() }}" />
</form>
സമർപ്പിക്കുന്ന ഫോം അഭ്യർത്ഥനയിൽ CSRF ടോക്കൺ കാണാതെ വരികയോ അല്ലെങ്കിൽ അത് അസാധുവാണെന്ന് തോന്നുകയോ ചെയ്യുമ്പോൾ, 419 സ്റ്റാറ്റസ് കോഡുള്ള "പേജ് കാലഹരണപ്പെട്ടു" എന്ന പിശക് സന്ദേശം Laravel എറിയുന്നു.
മിഡിൽവെയർ VerifyCsrfToken
Laravel ആപ്ലിക്കേഷനിൽ CSRF പരിശോധന കൈകാര്യം ചെയ്യുന്നു. ദി middleware
എന്നതിൽ രജിസ്റ്റർ ചെയ്തിട്ടുണ്ട് Kernel.php
കൂടാതെ ഡയറക്ടറിയിൽ സ്ഥിതി ചെയ്യുന്നു app/Http/Middleware
. ഇതിനർത്ഥം ദി middleware
API-കളുമായി ബന്ധമില്ലാത്ത, വെബിനുള്ളിലെ അഭ്യർത്ഥനകൾക്കായി ഇത് പ്രവർത്തനക്ഷമമാക്കിയിരിക്കുന്നു.
protected $middlewareGroups = [
'web' => [
.
.
.
.
.
\App\Http\Middleware\VerifyCsrfToken::class,
],
];
VerifyCsrfToken മിഡിൽവെയർ ക്ലാസ് വിപുലീകരിക്കുന്നു Illuminate\Foundation\Http\Middleware\VerifyCsrfToken
, അതായത് CSRF പരിശോധന ആണ് defiക്ലാസ്സിനുള്ളിൽ രാത്രി.
Laravel CSRF പരിശോധന എങ്ങനെ കൈകാര്യം ചെയ്യുന്നു എന്നറിയാൻ നമുക്ക് കൂടുതൽ ആഴത്തിൽ പരിശോധിക്കാം.
ക്ലാസ്സിനുള്ളിൽ, ഞങ്ങൾക്ക് ഫംഗ്ഷൻ ഉണ്ട് tokensMatch
.
protected function tokensMatch($request)
{
$token = $this->getTokenFromRequest($request);
return is_string($request->session()->token()) &&
is_string($token) &&
hash_equals($request->session()->token(), $token);
}
സെഷനും ഇൻപുട്ട് CSRF ടോക്കണുകളും പൊരുത്തപ്പെടുന്നുണ്ടോ എന്ന് കോഡിൽ നിർണ്ണയിക്കുന്നു.
പ്രവർത്തനം രണ്ട് കാര്യങ്ങൾ ചെയ്യുന്നു:
$this->getTokenFromRequest
ഇൻകമിംഗ് അഭ്യർത്ഥനയിൽ നിന്നുള്ള ടോക്കൺ ഒരു മറഞ്ഞിരിക്കുന്ന ഫീൽഡ് അല്ലെങ്കിൽ അഭ്യർത്ഥന തലക്കെട്ട് വഴി അറ്റാച്ചുചെയ്യുന്നു. ടോക്കൺ ഡീക്രിപ്റ്റ് ചെയ്യുകയും പിന്നീട് ടോക്കൺ വേരിയബിളിലേക്ക് തിരികെ നൽകുകയും ചെയ്യുന്നു.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;
}
കോഡിൽ ഇതിന് തലക്കെട്ടിൽ നിന്ന് ടോക്കൺ ലഭിക്കും
2. അഭ്യർത്ഥന ടോക്കണും സെഷനും ഒരു സ്ട്രിംഗിലേക്ക് കാസ്റ്റ് ചെയ്ത് ഉപയോഗിക്കുക hash_equals
രണ്ട് സ്ട്രിംഗുകളും തുല്യമാണെങ്കിൽ താരതമ്യം ചെയ്യാൻ PHP-യിൽ നിർമ്മിച്ചിരിക്കുന്നു. ഈ പ്രവർത്തനത്തിന്റെ ഫലം എപ്പോഴും ബൂൾ (ശരി) അല്ലെങ്കിൽ (തെറ്റ്) .
Ercole Palmeri
ആപ്പിൾ വിഷൻ പ്രോ കൊമേഴ്സ്യൽ വ്യൂവർ ഉപയോഗിച്ചുള്ള ഒഫ്താൽമോപ്ലാസ്റ്റി ഓപ്പറേഷൻ കാറ്റാനിയ പോളിക്ലിനിക്കിൽ നടത്തി.
കളറിംഗ് വഴി മികച്ച മോട്ടോർ കഴിവുകൾ വികസിപ്പിക്കുന്നത് എഴുത്ത് പോലെയുള്ള കൂടുതൽ സങ്കീർണ്ണമായ കഴിവുകൾക്ക് കുട്ടികളെ സജ്ജമാക്കുന്നു. നിറം കൊടുക്കാൻ...
നാവിക മേഖല ഒരു യഥാർത്ഥ ആഗോള സാമ്പത്തിക ശക്തിയാണ്, അത് 150 ബില്യൺ വിപണിയിലേക്ക് നാവിഗേറ്റ് ചെയ്തു...
കഴിഞ്ഞ തിങ്കളാഴ്ച, ഫിനാൻഷ്യൽ ടൈംസ് ഓപ്പൺഎഐയുമായി ഒരു കരാർ പ്രഖ്യാപിച്ചു. FT അതിൻ്റെ ലോകോത്തര പത്രപ്രവർത്തനത്തിന് ലൈസൻസ് നൽകുന്നു…