Utilia

Γεννήτρια Content Security Policy

Δημιουργήστε κεφαλίδα Content-Security-Policy, ετικέτα meta και έκδοση Report-Only με προρυθμίσεις, nonce και hash SHA-256, και ελέγξτε υπάρχουσα πολιτική.

Ξεκινήστε από μια προρύθμιση

Οι διακομιστές της Google είναι παραδείγματα από τις οδηγίες CSP της Google για το Google tag. Η Google τους αλλάζει κατά καιρούς: ελέγξτε την τρέχουσα τεκμηρίωση και αφαιρέστε όσους δεν χρησιμοποιείτε.

Οδηγίες

Πηγές χωρισμένες με κενά. Αφήστε ένα πεδίο κενό για να παραλειφθεί η οδηγία (οι οδηγίες φόρτωσης πόρων τότε ανατρέχουν στο default-src).

Γρήγορη προσθήκη

Το nonce πρέπει να είναι νέα τυχαία τιμή σε κάθε απόκριση, που παράγεται από τον διακομιστή σας και επαναλαμβάνεται σε κάθε <script nonce="…">. Ένα σταθερό nonce δεν προστατεύει τίποτα.

Κατακερματισμός ενσωματωμένου script ή στυλ

Το hash καλύπτει ακριβώς το κείμενο ανάμεσα στις ετικέτες, μαζί με τα κενά και τις αλλαγές γραμμής: κάθε αλλαγή απαιτεί νέο hash. Οι ενσωματωμένοι χειριστές συμβάντων (onclick=…) χρειάζονται επίσης 'unsafe-hashes'.

Αναφορές παραβιάσεων

Προσθέτει report-uri (για παλαιότερα προγράμματα περιήγησης) και report-to με κεφαλίδα Reporting-Endpoints.

Σε ετικέτα <meta> τα προγράμματα περιήγησης αγνοούν τα frame-ancestors, report-uri, report-to και sandbox, ενώ το Report-Only δεν υποστηρίζεται. Τοποθετήστε την ετικέτα στην αρχή του <head>: ισχύει μόνο για το περιεχόμενο που ακολουθεί.

Έλεγχος αυτής της πολιτικής

Αξιολόγηση υπάρχουσας πολιτικής

Πώς δημιουργείτε μια πολιτική

  1. Επιλέξτε σημείο εκκίνησης στο Ξεκινήστε από μια προρύθμιση: Αυστηρή (nonce + strict-dynamic), Στατικός ιστότοπος με πλήρη περιορισμό, Τυπικός ιστότοπος ή Τυπικός + Google Analytics / Ads. Ο επεξεργαστής ανοίγει με την προρύθμιση του τυπικού ιστότοπου.
  2. Προσαρμόστε τις Οδηγίες. Κάθε πεδίο δέχεται πηγές χωρισμένες με κενά· ένα κενό πεδίο παραλείπει την οδηγία.
  3. Με τη Γρήγορη προσθήκη προσθέτετε μια λέξη-κλειδί στην Οδηγία που επιλέξατε: 'self', 'none', 'unsafe-inline', 'strict-dynamic', https:, data:… Η Προσθήκη nonce εισάγει ένα τυχαίο nonce 128 bit.
  4. Για να επιτρέψετε ένα συγκεκριμένο ενσωματωμένο script χωρίς 'unsafe-inline', επικολλήστε το (ή το HTML γύρω από αυτό) στο Κατακερματισμός ενσωματωμένου script ή στυλ και πατήστε Υπολογισμός SHA-256 και προσθήκη.
  5. Επιλέξτε το upgrade-insecure-requests αν κάποιες παλιές διευθύνσεις χρησιμοποιούν ακόμη http:// και, προαιρετικά, συμπληρώστε το URL τελικού σημείου αναφορών (προαιρετικό).
  6. Αντιγράψτε την Κεφαλίδα 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, ένας πόρος πρέπει να ικανοποιεί όλες. Επικολλήστε μία πολιτική τη φορά στην αξιολόγηση.