Content Security Policy και CMP: πώς συνεργάζονται το CSP και η συναίνεση

Δύο επίπεδα ασφάλειας που πρέπει να συμφωνούν

Μια Content Security Policy (CSP) λέει στο πρόγραμμα περιήγησης από ποιες πηγές μπορεί μια σελίδα να φορτώνει scripts, στυλ, εικόνες, frames και αιτήματα δικτύου. Μια πλατφόρμα διαχείρισης συναίνεσης κάνει την αντίθετη δουλειά: αποφασίζει ποια από αυτά τα scripts επιτρέπεται να εκτελεστούν με βάση την επιλογή του χρήστη. Όταν τα δύο ρυθμίζονται ξεχωριστά, συγκρούονται. Το CMP αποτυγχάνει να φορτώσει επειδή το CSP το μπλοκάρει, ή το CSP χαλαρώνει τόσο πολύ για να φιλοξενήσει το CMP και τα ad tags ώστε δεν προστατεύει πια τίποτα.

Αυτός ο οδηγός εξηγεί ποιες οδηγίες CSP χρειάζεται συνήθως ένα CMP, πώς αλληλεπιδρούν τα nonces με την εισαγωγή scripts και πώς να κάνετε αλλαγές χωρίς να χαλάσετε το banner.

Τι χρειάζεται συνήθως ένα CMP από το CSP

Οι ακριβείς απαιτήσεις εξαρτώνται από τον προμηθευτή, επομένως ξεκινάτε πάντα από την τεκμηρίωση του δικού σας CMP. Γενικά, ελέγξτε αυτές τις οδηγίες:

Σε ιστότοπους TCF, θυμηθείτε ότι το CMP δημιουργεί επίσης στη σελίδα ένα frame εντοπισμού με όνομα __tcfapiLocator. Αυτό το frame δημιουργείται χωρίς απομακρυσμένη πηγή, οπότε κανονικά δεν χρειάζεται εγγραφή στο frame-src, αλλά αξίζει να το επιβεβαιώσετε στις δοκιμές.

Το πρόβλημα του inline stub

Τα περισσότερα CMP σας ζητούν να τοποθετήσετε ένα μικρό inline script — το stub — στο head της σελίδας, ώστε άλλα scripts να βάζουν κλήσεις σε ουρά πριν φορτώσει το κύριο CMP. Μια αυστηρή CSP μπλοκάρει τα inline scripts εκτός αν τα επιτρέψετε ρητά. Έχετε τρεις επιλογές:

  1. Ένα nonce. Δημιουργήστε μια τυχαία τιμή ανά απάντηση, προσθέστε την στην κεφαλίδα CSP ως 'nonce-...' και στο <script> tag του stub. Είναι η πιο ευέλικτη επιλογή για δυναμικές σελίδες.
  2. Ένα hash. Προσθέστε το hash SHA-256 των ακριβών περιεχομένων του stub στο script-src. Λειτουργεί καλά για στατικούς ιστότοπους, αλλά κάθε αλλαγή στο stub, ακόμη και σε κενό διάστημα, το χαλάει.
  3. Self-hosting του stub ως εξωτερικό αρχείο στο δικό σας domain, που καλύπτεται από το 'self'. Χρειάζεται προσοχή ώστε να φορτώνει αρκετά νωρίς.

Αποφύγετε το 'unsafe-inline' ως συντόμευση. Επιτρέπει κάθε inline script, κάτι που αφαιρεί μεγάλο μέρος της προστασίας που προσφέρει το CSP.

Nonces και scripts που εισάγει το CMP

Ένα CMP που μπλοκάρει scripts μέχρι να δοθεί συναίνεση συχνά λειτουργεί κρατώντας τα πίσω και εισάγοντάς τα αργότερα. Υπό μια CSP βασισμένη σε nonce, και αυτά τα εισαγόμενα scripts πρέπει να επιτρέπονται. Υπάρχουν δύο συνηθισμένες προσεγγίσεις:

Οι tag managers θέτουν το ίδιο ζήτημα. Αν φορτώνετε ad και analytics tags μέσω tag manager, ακολουθήστε την τεκμηρίωσή του για τα nonces και βεβαιωθείτε ότι το CMP και ο tag manager χρησιμοποιούν συνεπή προσέγγιση.

Τα ad tags δυσκολεύουν το CSP

Η προγραμματική διαφήμιση φορτώνει scripts και frames από πολλά domains, και η λίστα αλλάζει όσο αλλάζουν οι συνεργάτες ζήτησης. Οι εκδότες συνήθως κάνουν μία από δύο επιλογές:

Με όποιον τρόπο, το CMP πρέπει να βρίσκεται στη ρητή λίστα επιτρεπόμενων, όχι να καλύπτεται μόνο από wildcard, ώστε μια αλλαγή στο CSP να μην απενεργοποιεί αθόρυβα το banner.

Ανάπτυξη με λειτουργία Report-Only

Χρησιμοποιήστε πρώτα την κεφαλίδα Content-Security-Policy-Report-Only. Το πρόγραμμα περιήγησης αναφέρει παραβιάσεις χωρίς να μπλοκάρει τίποτα, ώστε να δείτε τι θα χαλούσε μια νέα πολιτική.

  1. Αναπτύξτε την πολιτική σε λειτουργία report-only με ένα endpoint αναφορών.
  2. Φορτώστε σελίδες σε καθαρά προφίλ προγράμματος περιήγησης και περάστε από ολόκληρη τη ροή συναίνεσης: πρώτη επίσκεψη, αποδοχή όλων, απόρριψη όλων, προσαρμοσμένη επιλογή, ανάκληση.
  3. Εξετάστε τις αναφορές παραβιάσεων και την κονσόλα του προγράμματος περιήγησης για μπλοκαρισμένους πόρους του CMP.
  4. Προσαρμόστε την πολιτική και μετά περάστε σε επιβολή.
  5. Διατηρήστε τις αναφορές ενεργές μετά την επιβολή για να εντοπίζετε οπισθοδρομήσεις.

Συμπτώματα σύγκρουσης με το CSP

Βασικά συμπεράσματα

← Ιστolόγιo Διαβάστε όλα →