Γεννήτρια Content Security Policy
Δημιουργήστε κεφαλίδα Content-Security-Policy, ετικέτα meta και έκδοση Report-Only με προρυθμίσεις, nonce και hash SHA-256, και ελέγξτε υπάρχουσα πολιτική.
Ξεκινήστε από μια προρύθμιση
Οι διακομιστές της Google είναι παραδείγματα από τις οδηγίες CSP της Google για το Google tag. Η Google τους αλλάζει κατά καιρούς: ελέγξτε την τρέχουσα τεκμηρίωση και αφαιρέστε όσους δεν χρησιμοποιείτε.
Σε ετικέτα <meta> τα προγράμματα περιήγησης αγνοούν τα frame-ancestors, report-uri, report-to και sandbox, ενώ το Report-Only δεν υποστηρίζεται. Τοποθετήστε την ετικέτα στην αρχή του <head>: ισχύει μόνο για το περιεχόμενο που ακολουθεί.
Έλεγχος αυτής της πολιτικής
Αυτοί οι έλεγχοι δεν εντόπισαν αδυναμίες.
Αξιολόγηση υπάρχουσας πολιτικής
Πώς δημιουργείτε μια πολιτική
- Επιλέξτε σημείο εκκίνησης στο Ξεκινήστε από μια προρύθμιση: Αυστηρή (nonce + strict-dynamic), Στατικός ιστότοπος με πλήρη περιορισμό, Τυπικός ιστότοπος ή Τυπικός + Google Analytics / Ads. Ο επεξεργαστής ανοίγει με την προρύθμιση του τυπικού ιστότοπου.
- Προσαρμόστε τις Οδηγίες. Κάθε πεδίο δέχεται πηγές χωρισμένες με κενά· ένα κενό πεδίο παραλείπει την οδηγία.
- Με τη Γρήγορη προσθήκη προσθέτετε μια λέξη-κλειδί στην Οδηγία που επιλέξατε:
'self','none','unsafe-inline','strict-dynamic',https:,data:… Η Προσθήκη nonce εισάγει ένα τυχαίο nonce 128 bit. - Για να επιτρέψετε ένα συγκεκριμένο ενσωματωμένο script χωρίς
'unsafe-inline', επικολλήστε το (ή το HTML γύρω από αυτό) στο Κατακερματισμός ενσωματωμένου script ή στυλ και πατήστε Υπολογισμός SHA-256 και προσθήκη. - Επιλέξτε το upgrade-insecure-requests αν κάποιες παλιές διευθύνσεις χρησιμοποιούν ακόμη
http://και, προαιρετικά, συμπληρώστε το URL τελικού σημείου αναφορών (προαιρετικό). - Αντιγράψτε την Κεφαλίδα HTTP, την Κεφαλίδα Report-Only ή την Ετικέτα HTML . Ο Έλεγχος αυτής της πολιτικής ενημερώνεται καθώς πληκτρολογείτε.
Για να ελέγξετε μια πολιτική που ήδη έχετε, επικολλήστε την στο Αξιολόγηση υπάρχουσας πολιτικής και πατήστε Αξιολόγηση πολιτικής· το Φόρτωση στον επεξεργαστή την αντιγράφει στα πεδία. Όλα γίνονται στο πρόγραμμα περιήγησής σας: τίποτα από όσα πληκτρολογείτε δεν στέλνεται σε διακομιστή.
Τι κάνει μια Content Security Policy
Η CSP λέει στο πρόγραμμα περιήγησης από ποιες προελεύσεις επιτρέπεται να φορτώνει μια σελίδα scripts, στυλ, εικόνες, γραμματοσειρές, πλαίσια και συνδέσεις. Βασικός της στόχος είναι ο περιορισμός του cross-site scripting (XSS): ακόμη κι αν ένας επιτιθέμενος εισαγάγει κώδικα στη σελίδα σας, μια καλή πολιτική εμποδίζει την εκτέλεση του script που εισήχθη. Ελέγχει επίσης ποιος μπορεί να ενσωματώσει τη σελίδα σας (frame-ancestors), πού μπορούν να υποβληθούν οι φόρμες (form-action) και σε τι μπορεί να δείχνει το <base> (base-uri).
Οι οδηγίες φόρτωσης πόρων, όπως τα img-src ή font-src, ανατρέχουν στο default-src όταν λείπουν. Τα base-uri, form-action και frame-ancestors δεν ανατρέχουν πουθενά, γι’ αυτό ο έλεγχος τα ζητά ρητά.
Nonce, hash και strict-dynamic
Η αναγραφή επιτρεπόμενων διακομιστών (script-src https://cdn.example.com) φαίνεται ασφαλής, αλλά συχνά παρακάμπτεται: μεγάλοι τομείς φιλοξενούν σημεία JSONP και παλιές βιβλιοθήκες που ένας επιτιθέμενος μπορεί να εκμεταλλευτεί. Η προσέγγιση που προτείνουν οι ομάδες ασφάλειας των προγραμμάτων περιήγησης είναι η αυστηρή CSP: κάθε νόμιμο <script> φέρει ένα nonce που παράγει ο διακομιστής για κάθε απόκριση ή επιτρέπεται μέσω του hash του, και το 'strict-dynamic' αφήνει αυτά τα αξιόπιστα scripts να φορτώνουν όσα άλλα χρειάζονται. Έτσι, τα https: και 'unsafe-inline' λειτουργούν μόνο ως εφεδρική λύση για πολύ παλιά προγράμματα περιήγησης· τα σύγχρονα τα αγνοούν.
Ένα nonce λειτουργεί μόνο αν αλλάζει σε κάθε απόκριση και δεν μπορεί να προβλεφθεί. Το nonce που εισάγει η Προσθήκη nonce είναι παράδειγμα: ο διακομιστής ή το framework σας πρέπει να παράγει το δικό του. Το hash καλύπτει τα ακριβή byte του ενσωματωμένου κώδικα, οπότε αν αλλάξετε τη μορφοποίηση του script χρειάζεστε νέο hash.
Κεφαλίδα, Report-Only και ετικέτα meta
Όποτε μπορείτε, στείλτε την πολιτική ως κεφαλίδα απόκρισης HTTP. Εφαρμόστε την πρώτα ως Content-Security-Policy-Report-Only: τα προγράμματα περιήγησης αναφέρουν τις παραβιάσεις (στην κονσόλα και, αν έχετε ορίσει τελικό σημείο, σε αυτό) χωρίς να αποκλείουν τίποτα, ώστε να διορθώσετε τις σελίδες σας πριν την επιβολή. Οι ρυθμίσεις αναφορών προσθέτουν report-uri για παλαιότερα προγράμματα και report-to με κεφαλίδα Reporting-Endpoints.
Η έκδοση <meta http-equiv> είναι βολική σε στατική φιλοξενία, όμως τα προγράμματα περιήγησης αγνοούν σε αυτήν τα frame-ancestors, report-uri, report-to και sandbox, και δεν υπάρχει ετικέτα meta Report-Only. Το εργαλείο αφαιρεί αυτές τις οδηγίες από την ετικέτα και σας το αναφέρει.
Συχνές ερωτήσεις
Αποτελεί πρόβλημα το 'unsafe-inline' στο style-src;
Είναι λιγότερο επικίνδυνο απ’ ό,τι στο script-src και πολύ συνηθισμένο, επειδή πολλές βιβλιοθήκες ορίζουν ενσωματωμένα στυλ. Ωστόσο, το CSS που εισάγεται μπορεί να παραμορφώσει μια σελίδα ή να διαρρεύσει δεδομένα, γι’ αυτό ο έλεγχος το καταγράφει ως χαμηλής σοβαρότητας.
Είναι πλήρεις οι διακομιστές του Google Analytics;
Είναι παραδείγματα από τις οδηγίες CSP της Google για το Google tag. Η Google τα προσαρμόζει με τον καιρό και μπορεί να χρειάζονται περιφερειακοί τομείς· ελέγξτε την τρέχουσα τεκμηρίωση της Google και αφαιρέστε όσα δεν χρησιμοποιείτε. Το ενσωματωμένο απόσπασμα gtag.js χρειάζεται επίσης nonce ή hash.
Γιατί η πολιτική μου αποκλείει τα δικά μου ενσωματωμένα scripts;
Μόλις οριστεί το script-src χωρίς 'unsafe-inline', αποκλείεται κάθε ενσωματωμένο <script> και κάθε χαρακτηριστικό onclick=. Μετακινήστε τον κώδικα σε αρχείο ή προσθέστε nonce ή hash.
Αντικαθιστά η CSP τον έλεγχο (escaping) των δεδομένων του χρήστη;
Όχι. Η CSP είναι δεύτερη γραμμή άμυνας. Συνεχίστε να κάνετε escaping στην έξοδο και να επικυρώνετε την είσοδο· η πολιτική περιορίζει τη ζημιά όταν κάτι ξεφύγει.
Μπορώ να έχω περισσότερες από μία πολιτικές;
Ναι: αν μια σελίδα λάβει πολλές κεφαλίδες CSP, ένας πόρος πρέπει να ικανοποιεί όλες. Επικολλήστε μία πολιτική τη φορά στην αξιολόγηση.
Σχετικά εργαλεία
- Γεννήτρια ανακατευθύνσεων .htaccess Δημιουργήστε ανακατευθύνσεις 301 και 302 για .htaccess ή Nginx, επιβάλετε HTTPS και www, μετακινήστε domain και ελέγξτε για βρόχους και αλυσίδες.
- Γεννήτρια meta tags Δωρεάν γεννήτρια meta tags για τίτλο, meta description, canonical URL, robots και viewport, με έλεγχο μήκους και σωστά escaped HTML.
- Δημιουργός hash Δημιουργήστε hash MD5, SHA-1, SHA-256 και SHA-512 για κείμενο ή αρχεία οποιουδήποτε μεγέθους και επαληθεύστε αθροίσματα ελέγχου στο πρόγραμμα περιήγησής σας.
- Γεννήτρια robots.txt Δημιουργήστε έγκυρο αρχείο robots.txt με ομάδες user-agent, κανόνες Allow και Disallow, sitemap και crawl-delay, με έλεγχο για συνηθισμένα λάθη.