CSRF היא פעילות זדונית המבוצעת על ידי תוקף, המבצע פעולות בשם משתמש מאומת, הפוגעות באבטחת האינטרנט. למרבה המזל, Laravel מספקת את הכלים למניעת פגיעות מסוג זה.
התקפות CSRF חוטפות הפעלות של משתמשים. הם עושים זאת על ידי הטעיית משתמש להגיש בקשה באמצעות תגי טופס נסתרים או כתובות URL זדוניות (תמונות או קישורים) ללא ידיעת המשתמש.
התקפה זו מובילה לשינוי במצב ההפעלה של המשתמש, דליפות נתונים, ולפעמים האקרים יכולים לתפעל את נתוני משתמש הקצה באפליקציה.
התמונה למעלה ממחישה תרחיש שבו אבטחת האינטרנט נפרצה. הקורבן שולח בקשה על ידי לחיצה על קישור (התקבל), שליחת בקשה לשרת אתר אינטרנט אשר תייצר אפקטים הרצויים על ידי ההאקר, אשר מגיע לידיו המידע המועיל לגישה ולתמרון שרת האתר.
לשפר את בטחון אינטרנט של היישומים שלך, בכל הפעלת משתמש, Laravel מייצר אסימונים מאובטחים שבהם היא משתמשת כדי להבטיח שהמשתמש המאומת הוא זה שמבקש את האפליקציה.
מכיוון שהאסימון הזה משתנה בכל פעם שהפעלת משתמש נוצרת מחדש, תוקף לא יכול לגשת אליו.
בכל פעם שיש בקשה לשנות את פרטי המשתמש בצד השרת (גבי) כמו POST
, PUT
, PATCH
e DELETE
, עליך לכלול את ההנחיה @csrf
בטופס הבקשה blade
HTML. ה @csrf
לכן זו הנחיה Blade
משמש ליצירת אסימון נסתר מאומת על ידי האפליקציה.
ההנחיה Blade
הוא התחביר המשמש בתוך מנוע התבנית של Laravel שנקרא להב . כדי ליצור קובץ blade
אתה צריך לתת לזה שם - בטופס המקרה שלנו - ואחריו הארכת הלהב. זה אומר שלקובץ יהיה השם form.blade.php
.
נעשה שימוש בקובץ blade
כדי להציג תצוגות עבור משתמשים בדף האינטרנט. יש כמה הנחיות מקדימותdefiתחביר של nite או להב קיצור אתה יכול להשתמש. לדוגמה, @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 חסר בבקשת הטופס הנשלחת או אם הוא נראה לא חוקי, Laravel זורק הודעת שגיאה "פג תוקף" עם קוד סטטוס 419.
התווך VerifyCsrfToken
מטפל באימות CSRF בתוך אפליקציית Laravel. ה 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 כדי להשוות אם שתי המחרוזות שוות. התוצאה של הפעולה הזו היא תמיד bool (נכון) או (לא נכון) .
Ercole Palmeri
כל פעולה עסקית מייצרת הרבה נתונים, אפילו בצורות שונות. הזן את הנתונים האלה באופן ידני מגיליון Excel כדי...
הפשרה של אימיילים של החברה גדלה יותר מכפול בשלושת החודשים הראשונים של 2024 בהשוואה לרבעון האחרון של...
עקרון הפרדת הממשק הוא אחד מחמשת העקרונות המוצקים של עיצוב מונחה עצמים. לכיתה צריכה להיות…
Microsoft Excel הוא כלי ההתייחסות לניתוח נתונים, מכיוון שהוא מציע תכונות רבות לארגון מערכי נתונים,...
Walliance, SIM ופלטפורמה בין המובילות באירופה בתחום מימון המונים בנדל"ן מאז 2017, מכריזה על השלמת...
Filament הוא מסגרת פיתוח "מואצת" של Laravel, המספקת מספר רכיבים מלאים. זה נועד לפשט את התהליך של...
"אני חייב לחזור כדי להשלים את האבולוציה שלי: אני אשליך את עצמי בתוך המחשב ואהפוך לאנרגיה טהורה. לאחר שהתמקמו…
Google DeepMind מציגה גרסה משופרת של מודל הבינה המלאכותית שלה. הדגם החדש המשופר מספק לא רק...