εμπορεύματα

Laravel Web Security: Τι είναι το Cross-Site Request Forgery (CSRF);

Σε αυτό το σεμινάριο Laravel μιλάμε για την Ασφάλεια Ιστού και πώς να προστατέψετε μια εφαρμογή Ιστού από επιθέσεις πλαστογράφησης αιτημάτων μεταξύ ιστότοπων ή CSRF.

Το CSRF είναι μια κακόβουλη δραστηριότητα που εκτελείται από έναν εισβολέα, ο οποίος εκτελεί ενέργειες για λογαριασμό ενός πιστοποιημένου χρήστη, επιζήμιες για την ασφάλεια ιστού. Ευτυχώς, η Laravel παρέχει τα εργαλεία για την πρόληψη αυτού του τύπου ευπάθειας.

Τι είναι το CSRF;

Οι επιθέσεις CSRF παραβιάζουν τις συνεδρίες χρήστη. Αυτό το κάνουν εξαπατώντας έναν χρήστη να υποβάλει αίτημα μέσω κρυφών ετικετών φόρμας ή κακόβουλων διευθύνσεων URL (εικόνες ή συνδέσμους) χωρίς να το γνωρίζει ο χρήστης.

Αυτή η επίθεση οδηγεί σε αλλαγή της κατάστασης περιόδου λειτουργίας χρήστη, διαρροές δεδομένων και μερικές φορές οι χάκερ μπορούν να χειριστούν τα δεδομένα τελικού χρήστη σε μια εφαρμογή.

Η παραπάνω εικόνα απεικονίζει ένα σενάριο όπου παραβιάζεται η ασφάλεια ιστού. Το θύμα στέλνει ένα αίτημα κάνοντας κλικ σε έναν σύνδεσμο (λήφθηκε), στέλνοντας ένα αίτημα σε έναν διακομιστή ιστότοπου που θα παράγει αποτελέσματα που επιθυμεί ο χάκερ, ο οποίος έχει στην κατοχή του τις χρήσιμες πληροφορίες για την πρόσβαση και τον χειρισμό του διακομιστή ιστότοπου.

Πώς να αποτρέψετε αιτήματα CSRF

Για τη βελτίωση του ασφάλεια web των εφαρμογών σας, σε κάθε περίοδο λειτουργίας χρήστη, η Laravel δημιουργεί ασφαλή διακριτικά τα οποία χρησιμοποιεί για να διασφαλίσει ότι ο χρήστης που έχει πιστοποιηθεί είναι αυτός που ζητά την εφαρμογή.

Επειδή αυτό το διακριτικό αλλάζει κάθε φορά που αναδημιουργείται μια περίοδος σύνδεσης χρήστη, ένας εισβολέας δεν μπορεί να έχει πρόσβαση σε αυτό.

Κάθε φορά που υπάρχει αίτημα για αλλαγή των πληροφοριών χρήστη από την πλευρά του διακομιστή (backend), όπως POSTPUTPATCHDELETE, πρέπει να συμπεριλάβετε την οδηγία @csrf στη φόρμα αίτησης blade HTML. ο @csrf είναι επομένως οδηγία Blade χρησιμοποιείται για τη δημιουργία ενός κρυφού διακριτικού που επικυρώνεται από την εφαρμογή.

Η οδηγία Blade ονομάζεται η σύνταξη που χρησιμοποιείται στη μηχανή προτύπων Laravel Λεπίδα . Για να δημιουργήσετε ένα αρχείο blade πρέπει να του δώσετε ένα όνομα – στην περίπτωσή μας – ακολουθούμενο από την επέκταση της λεπίδας. Αυτό σημαίνει ότι το αρχείο θα έχει το όνομα form.blade.php.

Το αρχείο χρησιμοποιείται blade για απόδοση προβολών για τους χρήστες στην ιστοσελίδα. Υπάρχουν μερικές προκαταρκτικές οδηγίεςdefiμπορείτε να χρησιμοποιήσετε τη σύνταξη nite ή blade. Για παράδειγμα, @if ελέγξτε εάν ικανοποιείται μια συνθήκη, @empty ελέγξτε αν οι εγγραφές δεν είναι κενές, @auth ελέγξτε εάν ένας χρήστης έχει πιστοποιηθεί και ούτω καθεξής.

Ας επιστρέψουμε όμως στην οδηγία @csrf. Δείτε πώς το χρησιμοποιείτε:

<form method="POST" action="{{route('pay')}}">

    @csrf
    
</form>

Οι προηγούμενες εκδόσεις του Laravel είχαν διαφορετική ρύθμιση: και οι δύο λειτουργούν και κάνουν το ίδιο πράγμα.

Ενημερωτικό δελτίο καινοτομίας
Μην χάσετε τα πιο σημαντικά νέα για την καινοτομία. Εγγραφείτε για να τα λάβετε μέσω email.
<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

Ενημερωτικό δελτίο καινοτομίας
Μην χάσετε τα πιο σημαντικά νέα για την καινοτομία. Εγγραφείτε για να τα λάβετε μέσω email.

Πρόσφατα άρθρα

Τα οφέλη των σελίδων χρωματισμού για παιδιά - ένας κόσμος μαγείας για όλες τις ηλικίες

Η ανάπτυξη λεπτών κινητικών δεξιοτήτων μέσω του χρωματισμού προετοιμάζει τα παιδιά για πιο σύνθετες δεξιότητες όπως η γραφή. Να χρωματίσω…

2 Μαΐου 2024

Το μέλλον είναι εδώ: Πώς η ναυτιλιακή βιομηχανία φέρνει επανάσταση στην παγκόσμια οικονομία

Ο ναυτικός τομέας είναι μια πραγματική παγκόσμια οικονομική δύναμη, η οποία έχει προσανατολιστεί προς μια αγορά 150 δισεκατομμυρίων...

1 Μαΐου 2024

Οι εκδότες και το OpenAI υπογράφουν συμφωνίες για τη ρύθμιση της ροής πληροφοριών που επεξεργάζεται η τεχνητή νοημοσύνη

Την περασμένη Δευτέρα, οι Financial Times ανακοίνωσαν συμφωνία με το OpenAI. Η FT αδειοδοτεί την παγκόσμιας κλάσης δημοσιογραφία της…

Απρίλιος 30 2024

Ηλεκτρονικές πληρωμές: Δείτε πώς οι υπηρεσίες ροής σας κάνουν να πληρώνετε για πάντα

Εκατομμύρια άνθρωποι πληρώνουν για υπηρεσίες ροής, πληρώνοντας μηνιαίες συνδρομές. Είναι κοινή γνώμη ότι…

Απρίλιος 29 2024

Διαβάστε την Καινοτομία στη γλώσσα σας

Ενημερωτικό δελτίο καινοτομίας
Μην χάσετε τα πιο σημαντικά νέα για την καινοτομία. Εγγραφείτε για να τα λάβετε μέσω email.

Seguici