CSRF çalakiyek xirab e ku ji hêla êrîşker ve tête kirin, ku li ser navê bikarhênerek pejirandî çalakiyan dike, ku zirarê dide ewlehiya malperê. Xweşbextane, Laravel amûran peyda dike ku pêşî li vê celebê qelsiyê bigire.
CSRF êrîşî danişînên bikarhêneran dike. Ew vê yekê bi xapandina bikarhênerek dikin ku bêyî agahdariya bikarhêner bi navgîniya tagên forma veşartî an URL-yên xerab (wêneyên an girêdan) daxwazek bişînin.
Ev êrîş dibe sedema guherînek di rewşa rûniştina bikarhêner de, diherikin daneyan, û carinan hacker dikarin daneyên bikarhênerê dawî di serîlêdanê de manîpule bikin.
Wêneya li jor senaryoyek ku ewlehiya malperê tê binpêkirin nîşan dide. Mexdûr bi tikandina li ser girêdanek (wergirtin) daxwazek dişîne, daxwazek ji serverek malperê re dişîne ku dê bandorên ku ji hêla hacker ve tê xwestin çêbike, yê ku digihîje agahdariya kêrhatî ji bo gihîştin û manîpulekirina servera malperê.
Ji bo baştirkirina ewlekarî tevna serîlêdanên we, di her danişîna bikarhêner de, Laravel tokenên ewledar çêdike ku ew bikar tîne da ku piştrast bike ku bikarhênerê pejirandî yê ku serlêdanê daxwaz dike ye.
Ji ber ku ev nîşanek her carê ku rûniştek bikarhênerek ji nû ve tê nûve kirin diguhezîne, êrîşkar nikare xwe bigihîne wê.
Kengê ku daxwazek hebe ku agahdariya bikarhêner li ser alîyê serverê (paşgir) biguhezîne mîna POST
, PUT
, PATCH
e DELETE
, divê hûn dîrektîfê têxin nav xwe @csrf
di forma daxwazê de blade
HTML. Ew @csrf
ji ber vê yekê dîrektîfek e Blade
ji bo afirandina tokenek veşartî ku ji hêla serîlêdanê ve hatî pejirandin tê bikar anîn.
Dîrektîfa Blade
hevoksaziya ku di nav motora şablonê Laravel de tê bikar anîn e ku jê re tê gotin Zîl . Ji bo çêkirina pelê blade
divê hûn navekî lê bidin - di forma doza me de - li dû wê dirêjkirina hêlînê. Ev tê wê wateyê ku pel dê navê xwe hebe form.blade.php
.
Pelê tê bikaranîn blade
ji bo dîtina bikarhêneran li ser rûpela webê bidindefihevoksaziya kurteya nite an blade hûn dikarin bikar bînin. Bo nimûne, @if
kontrol bikin ka şertek têr e, @empty
kontrol bikin ka tomar vala ne, @auth
kontrol bikin ka bikarhênerek erêkirî ye û hwd.
Lê em vegerin ser dîrektîfê @csrf
. Li vir e ku hûn wê çawa bikar bînin:
<form method="POST" action="{{route('pay')}}">
@csrf
</form>
Guhertoyên berê yên Laravel xwedan sazûmanek cûda bûn: ew hem dixebitin û hem jî heman tiştî dikin.
<form method="POST" action="{{route('pay')}}">
<input type="hidden" name="_token" value="{{ csrf_token() }}" />
</form>
Dema ku nîşana CSRF ji daxwaznameya formê ya ku tê şandin winda dibe an heke ew nederbasdar xuya dike, Laravel bi kodek statûya 419 re peyamek xeletiyek "Rûpel qediya" derdixe.
Naverast VerifyCsrfToken
verastkirina CSRF di nav serîlêdana Laravel de birêve dibe. Ew middleware
de qeydkirî ye Kernel.php
û di pelrêçê de ye app/Http/Middleware
. Ev tê wê wateyê ku middleware
ew ji bo daxwazên di nav torê de, ne bi API-yan re têkildar e, tê destnîşan kirin.
protected $middlewareGroups = [
'web' => [
.
.
.
.
.
\App\Http\Middleware\VerifyCsrfToken::class,
],
];
Navgîniya VerifyCsrfToken polê dirêj dike Illuminate\Foundation\Http\Middleware\VerifyCsrfToken
, ango verastkirina CSRF ye defidi nav sinifê de hatine bicihkirin.
Ka em kûrtir bikolin da ku fêr bibin ka Laravel çawa verastkirina CSRF-ê dike.
Di hundurê polê de, fonksiyona me heye tokensMatch
.
protected function tokensMatch($request)
{
$token = $this->getTokenFromRequest($request);
return is_string($request->session()->token()) &&
is_string($token) &&
hash_equals($request->session()->token(), $token);
}
di kodê de diyar dike ka danişîn û nîşaneyên têketina CSRF li hev dikin.
Fonksiyon du tiştan dike:
$this->getTokenFromRequest
nîşanek ji daxwaznameya hatî ku bi navgînek veşartî an sernavê daxwazê ve hatî girêdan. Nîşan tê deşîfrekirin û paşê vedigere guhêrbara tokenê.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;
}
Di kodê de ew ji sernavê token digire
2. Hem nîşana daxwazê û hem jî danişînê bavêjin rêzekê û dûv re bikar bînin hash_equals
di PHP-ê de hatî çêkirin da ku hevber bikin ka her du rêzik wekhev in. Encama vê operasyonê her tim e bool (rast) an (derew) .
Ercole Palmeri
Operasyonek ophthalmoplasty bi karanîna temaşekera bazirganî ya Apple Vision Pro li Polyclinic Catania hate kirin…
Pêşxistina jêhatîbûnên motorê yên xweş bi rêya rengînkirinê zarokan ji hunerên tevlihevtir ên mîna nivîsandinê re amade dike. Reng kirin…
Sektora deryayî hêzek aborî ya cîhanî ya rastîn e, ku ber bi bazarek 150 mîlyar ve çûye…
Duşemiya borî, Financial Times peymanek bi OpenAI re ragihand. FT destûr dide rojnamegeriya xwe ya cîhanî…