Το πακέτο Spatie/Laravel-CSP χειρίζεται τις δυναμικές Nonces για ενσωματωμένα σενάρια και στυλ δημιουργώντας μια μοναδική τιμή Nonce ανά αίτημα HTTP και αυτόματα έγχυση στις κεφαλίδες της πολιτικής ασφαλείας περιεχομένου (CSP) και τα σχετικά στοιχεία HTML. Εδώ είναι μια λεπτομερής εξήγηση για το πώς λειτουργεί:
γενιά μη
- Το πακέτο χρησιμοποιεί μια διασύνδεση noncegenator για να δημιουργήσει δυναμικά μια συμβολοσειρά nonce για κάθε αίτημα.
- Από προεπιλογή, μπορείτε να εφαρμόσετε τη δική σας κλάση Nonce Generator που επιστρέφει μια μοναδική τυχαία συμβολοσειρά. Για παράδειγμα, μπορείτε να ενσωματώσετε με το σύστημα Nonce του Laravel Vite, δημιουργώντας μια κλάση όπως το `laravelvitenonceGenerator` που χρησιμοποιεί το` vite :: cspnonce () `για να πάρει το nonce που παράγεται από το VITE κατά τη συλλογή περιουσιακών στοιχείων.
- Καθορίζετε την κλάση Nonce Generator στο κλειδί `nonce_generator` του αρχείου διαμόρφωσης` csp.php` του πακέτου.
Εφαρμογή των μη ΚΕΝΕΣ ΣΕ ΠΟΛΙΤΙΚΕΣ
-Στην κλάση πολιτικής CSP (η οποία συνήθως επεκτείνει το `spatie \ csp \ policies \ basic '), χρησιμοποιείτε μεθόδους όπως το addnoncefordirective (directive :: script)` και `addNoncefordirective (directive :: style)` για να υποδείξετε ότι ένα nonce πρέπει να προστίθενται στο script-src` και `style-src` directives.
- Αυτό εξασφαλίζει ότι η παραγόμενη NONCE περιλαμβάνεται στην κεφαλίδα του CSP για αυτές τις οδηγίες, επιτρέποντας την εκτέλεση σενάρια και στυλ που φέρουν το αντίστοιχο χαρακτηριστικό.
middleware και έγχυση κεφαλίδας
- Το πακέτο παρέχει middleware (`spatie \ csp \ addcspheaders ') που εγγραφείτε στον πυρήνα HTTP ή σε συγκεκριμένες διαδρομές.
- Αυτό το middleware δημιουργεί το NONCE για το αίτημα, εφαρμόζει την πολιτική CSP, συμπεριλαμβανομένων των οδηγιών NONCE και προσθέτει τις κατάλληλες κεφαλίδες CSP στην απάντηση HTTP.
- Η τιμή NONCE είναι συνεπής στο αίτημα, ώστε να μπορείτε να χρησιμοποιήσετε οδηγίες λεπίδων όπως "@nonce" ή βοηθητικές λειτουργίες όπως το `csp_nonce ()` στις απόψεις σας για να εξάγετε το χαρακτηριστικό nonce στις inline `` ή `` ετικέτες.
Ενσωμάτωση με Laravel Vite
- Όταν χρησιμοποιείτε το Laravel Vite, το πακέτο μπορεί να εκμεταλλευτεί την ενσωματωμένη γενιά Nonce Vite μέσω του `vite :: cspnonce ()`.
- Μπορείτε να δημιουργήσετε μια προσαρμοσμένη κλάση γεννήτριας Nonce που επιστρέφει το nonce από το VITE, εξασφαλίζοντας ότι το NONCE που χρησιμοποιείται στην κεφαλίδα CSP ταιριάζει με το nonce που εφαρμόζεται σε σενάρια και στυλ που χρησιμοποιούνται από το VITE.
- Αυτό αποφεύγει τις παραβιάσεις του CSP που προκαλούνται από τις αναντιστοιχίες NonCe και επιτρέπει ασφαλή σενάρια/στυλ σε εφαρμογές Laravel.
Πρόσθετες λειτουργίες
- Το πακέτο υποστηρίζει επίσης την απόδοση πολιτικών CSP ως μετα -ετικέτες (μέσω της οδηγίας Blade "@cspmetatag` όταν δεν μπορείτε να ελέγξετε τις κεφαλίδες HTTP.
- Υποστηρίζει τη λειτουργία μόνο για τις αναφορές για τη δοκιμή πολιτικών CSP χωρίς να εμποδίζει τους πόρους.
- Μπορείτε να προσαρμόσετε πολιτικές για διαφορετικά περιβάλλοντα (ανάπτυξη έναντι παραγωγής).
Πρακτικές σημειώσεις
- Πρέπει να διασφαλίσετε ότι το NONCE είναι έξοδος σε inline scripts/styles χρησιμοποιώντας την οδηγία Blade `@nonce` ή` csp_nonce () `helper; Διαφορετικά, το πρόγραμμα περιήγησης θα τα εμποδίσει.
- Τα προγράμματα περιήγησης όπως το Chrome μπορούν να απογυμνώσουν τα χαρακτηριστικά nonce από ετικέτες σεναρίου που εγχέονται δυναμικά, οπότε χρησιμοποιήστε προσεκτικά το nonce και δοκιμή συμπεριφοράς.
- Το NONCE είναι μια τυχαία συμβολοσειρά που παράγεται ανά αίτημα, καθιστώντας ασφαλέστερα τα σενάρια/στυλ, επιτρέποντας μόνο σε εκείνους με το σωστό nonce να εκτελούν.
Συνοπτικά, το spatie/laravel-csp δημιουργεί δυναμικά ένα nonce ανά αίτημα μέσω μιας διαμορφώσιμης γεννήτριας nonce, περιλαμβάνει αυτό το nonce στις κεφαλίδες CSP για scripts και στυλ και παρέχει οδηγίες και βοηθούς λεπίδων για την εξάτμιση του χαρακτηριστικού nonce στα inline στοιχεία. Αυτή η ενσωμάτωση, ειδικά με το Laravel VITE, εξασφαλίζει ότι τα σενάρια και τα στυλ επιτρέπονται με ασφάλεια από το CSP χωρίς να χρησιμοποιούν μη ασφαλή-ευρετήριο, ενισχύοντας την ασφάλεια των εφαρμογών διατηρώντας τη λειτουργικότητα [1] [2] [3] [4] [6].
Αναφορές:
[1] https://github.com/spatie/laravel-csp
[2] https://laravel.io/forum/laravel-mix-and-content-security-policy
[3] https://laravel-news.com/package/spatie-laravel-csp
[4] https://stackoverflow.com/questions/75106343/nonce-is-always-empty-when-us-spatie-laravel-csp-with-laravel-and-vite-js
[5] https://github.com/spatie/laravel-csp/discussions/96
[6] https://stackoverflow.com/questions/77459507/how-to-add-csp-nonce-in-inline style-and script-injected-by-vue-in-a-laravel-
[7] https://www.stackhawk.com/blog/laravel-content-security-policy-guide-hat-it-is-and-how-to-enable-it/
[8] https://stackoverflow.com/questions/78864184/enable-nonce-to-laravel-official-packages
[9] https://developer.mozilla.org/en-us/docs/web/http/headers/content-security-policy/script-src