מאמרים

Laravel Web Security: מהו זיוף בקשות חוצות אתרים (CSRF)?

במדריך זה של Laravel אנו מדברים על אבטחת אינטרנט וכיצד להגן על יישום אינטרנט מפני זיוף בקשות חוצות אתרים או התקפות CSRF.

CSRF היא פעילות זדונית המבוצעת על ידי תוקף, המבצע פעולות בשם משתמש מאומת, הפוגעות באבטחת האינטרנט. למרבה המזל, Laravel מספקת את הכלים למניעת פגיעות מסוג זה.

מה זה CSRF?

התקפות CSRF חוטפות הפעלות של משתמשים. הם עושים זאת על ידי הטעיית משתמש להגיש בקשה באמצעות תגי טופס נסתרים או כתובות URL זדוניות (תמונות או קישורים) ללא ידיעת המשתמש.

התקפה זו מובילה לשינוי במצב ההפעלה של המשתמש, דליפות נתונים, ולפעמים האקרים יכולים לתפעל את נתוני משתמש הקצה באפליקציה.

התמונה למעלה ממחישה תרחיש שבו אבטחת האינטרנט נפרצה. הקורבן שולח בקשה על ידי לחיצה על קישור (התקבל), שליחת בקשה לשרת אתר אינטרנט אשר תייצר אפקטים הרצויים על ידי ההאקר, אשר מגיע לידיו המידע המועיל לגישה ולתמרון שרת האתר.

כיצד למנוע בקשות CSRF

לשפר את בטחון אינטרנט של היישומים שלך, בכל הפעלת משתמש, Laravel מייצר אסימונים מאובטחים שבהם היא משתמשת כדי להבטיח שהמשתמש המאומת הוא זה שמבקש את האפליקציה.

מכיוון שהאסימון הזה משתנה בכל פעם שהפעלת משתמש נוצרת מחדש, תוקף לא יכול לגשת אליו.

בכל פעם שיש בקשה לשנות את פרטי המשתמש בצד השרת (גבי) כמו POSTPUTPATCHDELETE, עליך לכלול את ההנחיה @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.

כיצד והיכן מתרחש אימות ה-CSRF

התווך 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 הקלט תואמים.

הפונקציה עושה שני דברים:

  1. לקבל $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 כדי...

14 מאי 2024

ניתוח רבעוני של Cisco Talos: הודעות דוא"ל ארגוניות הממוקדות על ידי פושעים ייצור, חינוך ושירותי בריאות הם המגזרים המושפעים ביותר

הפשרה של אימיילים של החברה גדלה יותר מכפול בשלושת החודשים הראשונים של 2024 בהשוואה לרבעון האחרון של...

14 מאי 2024

עיקרון הפרדת ממשק (ISP), עקרון SOLID רביעי

עקרון הפרדת הממשק הוא אחד מחמשת העקרונות המוצקים של עיצוב מונחה עצמים. לכיתה צריכה להיות…

14 מאי 2024

כיצד לארגן בצורה הטובה ביותר נתונים ונוסחאות באקסל, לניתוח מוצלח

Microsoft Excel הוא כלי ההתייחסות לניתוח נתונים, מכיוון שהוא מציע תכונות רבות לארגון מערכי נתונים,...

14 מאי 2024

מסקנה חיובית לשני פרויקטים חשובים של Walliance Equity Crowdfunding: Jesolo Wave Island ו-Milano Via Ravenna

Walliance, SIM ופלטפורמה בין המובילות באירופה בתחום מימון המונים בנדל"ן מאז 2017, מכריזה על השלמת...

13 מאי 2024

מהו פילאמנט וכיצד להשתמש ב-Laravel Filament

Filament הוא מסגרת פיתוח "מואצת" של Laravel, המספקת מספר רכיבים מלאים. זה נועד לפשט את התהליך של...

13 מאי 2024

תחת שליטה של ​​בינה מלאכותית

"אני חייב לחזור כדי להשלים את האבולוציה שלי: אני אשליך את עצמי בתוך המחשב ואהפוך לאנרגיה טהורה. לאחר שהתמקמו…

10 מאי 2024

הבינה המלאכותית החדשה של גוגל יכולה לדגמן DNA, RNA ו"כל מולקולות החיים"

Google DeepMind מציגה גרסה משופרת של מודל הבינה המלאכותית שלה. הדגם החדש המשופר מספק לא רק...

9 מאי 2024

קרא חדשנות בשפה שלך

ניוזלטר חדשנות
אל תחמיצו את החדשות החשובות ביותר בנושא חדשנות. הירשם כדי לקבל אותם במייל.

Seguici