Defaults.Exposed › Διορθώσεις › Content-Security-Policy (CSP)
Πώς να διορθώσετε Content-Security-Policy (CSP)
Μια Content Security Policy είναι κανόνας ασφαλείας που ο ιστότοπός σας παραδίδει στο πρόγραμμα περιήγησης κάθε επισκέπτη, λέγοντάς του ακριβώς ποιος κώδικας επιτρέπεται να εκτελεστεί. Χωρίς αυτήν, αν κάτι κακόβουλο καταλήξει ποτέ σε μια σελίδα — μέσω πεδίου σχολίου, χακαρισμένου plugin ή script τρίτου — το πρόγραμμα περιήγησης θα το εκτελέσει ελεύθερα, συμπεριλαμβανομένου κώδικα που αθόρυβα αντιγράφει αριθμούς κάρτας και κωδικούς των πελατών σας καθώς πληκτρολογούν, με το λουκέτο ακόμα να εμφανίζεται.
Ουσία για την επιχείρησή σας: Αν ο ιστότοπός σας παραποιηθεί ποτέ, κακόβουλος κώδικας μπορεί να διαβάσει τα στοιχεία κάρτας πληρωμής και σύνδεσης των πελατών σας κατευθείαν από το checkout σας ενώ όλα φαίνονται εντελώς κανονικά — αφήνοντάς σας με chargebacks, αξιώσεις απάτης, αναφερτέα παραβίαση δεδομένων και μια ευρεσιλογία ελέγχου που ομάδες ασφαλείας μεγαλύτερων πελατών χρησιμοποιούν για να σταματήσουν ή να ακυρώσουν μια συμφωνία.
Τι μπορεί να σας κοστίσει αυτό
- Κρυφός κώδικας γλιστρά σε μια σελίδα σας και αθόρυβα αντιγράφει κάθε αριθμό κάρτας και κωδικό που εισάγουν οι πελάτες σας στο checkout, στέλνοντάς τον σε εισβολέα ενώ ο ιστότοπος φαίνεται εντελώς κανονικός — μαθαίνετε γι' αυτό μόνο όταν φτάνουν τα παράπονα για απάτη.
- Ένας απατεώνας φυτεύει ψεύτικη 'πληρώστε εδώ' φόρμα στον πραγματικό σας ιστότοπο που καταγράφει πληρωμές στο λογαριασμό του· οι πελάτες νομίζουν ότι πλήρωσαν εσάς, σας κατηγορούν όταν τα αγαθά δεν φτάνουν.
- Η ομάδα ασφαλείας μεγαλύτερου πελάτη σαρώνει τον ιστότοπό σας, βλέπει αυτή τη βασική προστασία απενεργοποιημένη, και την επισημαίνει — σταματώντας ή χάνοντας τη σύμβαση μέχρι να αποδείξετε ότι έχει διορθωθεί.
- Παραβίαση που ιχνηλατείται σε ελλείπον τυπικό μέτρο ασφαλείας γίνεται αναφερτέο συμβάν: ερωτήσεις ρυθμιστικής αρχής, ειδοποιήσεις πελατών και πλήγμα φήμης που κοστίζει πολύ περισσότερο από τη δωρεάν διόρθωση.
Γιατί έχει σημασία. Το λουκέτο αποδεικνύει ότι η σύνδεση με τον ιστότοπό σας είναι ιδιωτική, αλλά δεν κάνει τίποτα για να ελέγξει ποιος κώδικας εκτελείται μόλις ένας επισκέπτης βρίσκεται στη σελίδα. Μια Content Security Policy είναι η διασφάλιση που το κάνει αυτό — λέει στα προγράμματα περιήγησης να αγνοούν οποιοδήποτε script δεν προήλθε από πηγή που εμπιστεύεστε, ώστε ένα μόνο παραποιημένο πεδίο, διαφήμιση ή plugin να μην μπορεί να μετατραπεί σε εργαλείο για κλοπή χρημάτων και δεδομένων πελατών. Είναι βαθμολογούμενος έλεγχος στην κάρτα αποτελεσμάτων σας, αξίζει πραγματικούς βαθμούς, και είναι ένα από τα πρώτα πράγματα που αναζητά μια επαγγελματική ανασκόπηση ασφαλείας.
Με απλά λόγια
Όταν κάποιος επισκέπτεται τον ιστότοπό σας, το πρόγραμμα περιήγησής του κατεβάζει τη σελίδα και εκτελεί οποιονδήποτε κώδικα υπάρχει σε αυτήν. Από προεπιλογή, το πρόγραμμα περιήγησης εμπιστεύεται όλα. Δεν έχει τρόπο να γνωρίζει ποιος κώδικας είναι πραγματικά δικός σας και ποιος εισχώρησε από κάποιον άλλο.
Μια Content Security Policy (συχνά συντομογραφείται σε CSP) είναι μια σύντομη λίστα κανόνων που ο ιστότοπός σας επισυνάπτει σε κάθε σελίδα, λέγοντας στο πρόγραμμα περιήγησης: «εκτέλεσε κώδικα μόνο από αυτές τις πηγές που έχω εγκρίνει, και αρνήσου τα υπόλοιπα.» Είναι η διαφορά μεταξύ ενός νυχτερινού κέντρου που αφήνει όλους να μπουν και ενός με λίστα επισκεπτών στην πόρτα.
Τι μπορεί να σας κοστίσει
-
Αόρατο skimmer checkout. Ένας εισβολέας βάζει μερικές γραμμές κώδικα στη σελίδα checkout σας μέσω ευάλωτου plugin. Κάθε αριθμός κάρτας, όνομα και CVV που πληκτρολογούν οι πελάτες αντιγράφεται και αποστέλλεται στον εισβολέα σε πραγματικό χρόνο. Ο ιστότοπος φαίνεται και λειτουργεί τέλεια· το λουκέτο είναι εκεί. Το ανακαλύπτετε εβδομάδες αργότερα όταν ο πάροχος πληρωμών σας τηλεφωνεί.
-
Η ψεύτικη φόρμα πληρωμής. Ένας απατεώνας εισάγει πειστικό «πληρώστε εδώ» πλαίσιο στον πραγματικό σας ιστότοπο. Οι πελάτες εισάγουν τα στοιχεία τους εμπιστευόμενοι το brand σας· τα χρήματα και τα δεδομένα πηγαίνουν στον εισβολέα.
-
Η χαμένη σύμβαση. Η ομάδα ασφαλείας μεγαλύτερου υποψήφιου εκτελεί αυτοματοποιημένη σάρωση. Μια ελλείπουσα Content Security Policy εμφανίζεται αμέσως ως κενό υψηλής σοβαρότητας.
-
Η αναφερτέα παραβίαση. Όταν παραβίαση δεδομένων ιχνηλατείται σε ελλείπον, τυπικό, δωρεάν μέτρο ασφαλείας, σταματά να είναι ατυχία και αρχίζει να μοιάζει με αμέλεια.
Τι είναι στην πραγματικότητα
Μια Content Security Policy παραδίδεται ως μια header HTTP απόκρισης. Η τιμή της είναι σύνολο directives, καθεμία που ονομάζει τύπο περιεχομένου και τις επιτρεπόμενες πηγές. Για παράδειγμα:
Content-Security-Policy: default-src 'self'; script-src 'self'; object-src 'none'; frame-ancestors 'self'
Πώς μοιάζει το «καλό». Ο έλεγχός μας δεν απλώς ψάχνει για την παρουσία της header — διαβάζει την πολιτική directive-directive και βαθμολογεί πόσο ισχυρή είναι πραγματικά. Ισχυρή πολιτική:
- Ορίζει περιοριστική βάση (
default-src 'self') και μόνο τη διευρύνει για συγκεκριμένα αξιόπιστα third parties που πραγματικά χρησιμοποιείτε. - Αποφεύγει τα παραθυράκια. Δεν χρησιμοποιεί
'unsafe-inline'ή'unsafe-eval'για scripts, και δεν χρησιμοποιεί wildcard ή bare scheme πηγές για scripts — αυτά επαν-ανοίγουν ακριβώς αυτό που η πολιτική σκοπεύει να κλείσει. - Κλειδώνει framing με
frame-ancestors 'self'και απενεργοποιεί legacy plugins μεobject-src 'none'. - Επιβάλλεται, δεν είναι report-only. Μια header
Content-Security-Policy-Report-Onlyμόνο παρακολουθεί· παρέχει μηδενική runtime προστασία.
Πώς να το διορθώσετε (δωρεάν, ~1-2 ώρες)
Δώστε αυτό στο άτομο ΙΤ σας ή σε όποιον εκτελεί τον ιστότοπό σας — η ίδια η διόρθωση είναι εντελώς δωρεάν.
-
Ξεκινήστε σε λειτουργία report-only — μην επιβάλλετε ακόμα. Προσθέστε header
Content-Security-Policy-Report-Only. Αυτό παρακολουθεί και καταγράφει τι θα μπλοκαριστεί χωρίς πράγματι να μπλοκάρει τίποτα. -
Χτίστε την πολιτική από αυτό που πραγματικά χρησιμοποιεί ο ιστότοπός σας. Ελέγξτε τις αναφορές για να βρείτε κάθε νόμιμη πηγή scripts, styles, fonts και εικόνων.
-
Αποφύγετε τα παραθυράκια που νικούν τον σκοπό. Αποφύγετε
'unsafe-inline'και'unsafe-eval'για scripts, και wildcard πηγές όπως*. -
Κλειδώστε framing και plugins. Προσθέστε
frame-ancestors 'self'καιobject-src 'none'. -
Αλλάξτε από report-only σε επιβαλλόμενο. Αλλάξτε το όνομα header από
Content-Security-Policy-Report-OnlyσεContent-Security-Policy. Αυτό είναι το βήμα που παρέχει πραγματικά προστασία.Ανά πλατφόρμα:
- Cloudflare: Rules → Transform Rules → Modify Response Header
- Nginx:
add_header Content-Security-Policy "default-src 'self'; script-src 'self'; object-src 'none'; frame-ancestors 'self';" always; - Apache:
Header always set Content-Security-Policy "default-src 'self'; script-src 'self'; object-src 'none'; frame-ancestors 'self';"
-
Ελέγξτε ξανά το domain για να επιβεβαιώσετε ότι η πολιτική τώρα εμφανίζεται ενεργοποιημένη και επιβαλλόμενη.
Συνηθισμένα λάθη
- Σταμάτημα στη λειτουργία report-only. Το πιο κοινό σφάλμα: η πολιτική προστίθεται σε λειτουργία report-only και κανείς δεν προχωράει στο επόμενο βήμα.
- Χρήση
'unsafe-inline'για «να λειτουργεί απλώς». Αυτό επαν-ανοίγει ακριβώς αυτό που η πολιτική ήταν σχεδιασμένη να κλείσει. - Χρήση wildcard. Ένα
*σεscript-srcεπιτρέπει scripts από οπουδήποτε. - Λήθη πηγών τρίτων. Η επιβολή αυστηρής πολιτικής χωρίς προηγουμένως να καταγράψετε τα νόμιμα εξωτερικά services μπορεί να σπάσει μέρη του ιστότοπού σας.
- Αντικατάσταση αντί ενίσχυσης HTTPS/HSTS. Μια CSP και HTTPS/HSTS προστατεύουν διαφορετικά πράγματα. Θέλετε όλα μαζί.
Συχνές Ερωτήσεις
Δεν είμαι τεχνικός — μπορώ να το χειριστώ μόνος μου;
Δεν χρειάζεται να καταλαβαίνετε λεπτομέρειες. Αυτή είναι μια ρύθμιση που προσθέτει όποιος εκτελεί τον ιστότοπο ή τη φιλοξενία σας, και σε υπηρεσίες όπως το Cloudflare οδηγείται σε μεγάλο βαθμό. Δώστε την ενότητα 'Πώς να το διορθώσετε' παρακάτω. Είναι δωρεάν· μια προειδοποίηση είναι ότι πρέπει να εισαχθεί προσεκτικά σε δοκιμαστική λειτουργία παρακολούθησης πρώτα ώστε να μην μπλοκάρει τυχαία μέρη του ίδιου σας του ιστότοπου.
Έχω ήδη το λουκέτο και πιστοποιητικό SSL — δεν είναι ο ιστότοπός μου ασφαλής;
Το λουκέτο ασφαλίζει την παράδοση της σελίδας σας· δεν ελέγχει τι εκτελείται μέσα σε αυτήν. Αν κακόβουλος κώδικας καταλήξει ποτέ σε μια σελίδα — μέσω χακαρισμένου plugin, παραβιασμένης διαφήμισης ή εγχυμένου πεδίου — το λουκέτο δεν θα τον σταματήσει από το να κλέψει δεδομένα. Μια Content Security Policy είναι το επίπεδο που περιορίζει τι επιτρέπεται να εκτελεστεί εξ αρχής.
Θα μπορούσε η ενεργοποίηση αυτού να σπάσει τον ιστότοπό μου;
Μπορεί αν ενεργοποιηθεί επιθετικά με τη μία, επειδή μπορεί να μπλοκάρει νόμιμα scripts που πραγματικά χρησιμοποιείτε. Γι' αυτό η τυπική προσέγγιση είναι να ξεκινήσετε σε λειτουργία 'report-only' που παρακολουθεί χωρίς να μπλοκάρει, να διορθώσετε οτιδήποτε επισημαίνει, και μόνο μετά να το επιβάλλετε.
Το βάλαμε ήδη σε λειτουργία 'report-only' — είμαστε καλυμμένοι;
Όχι, και αυτή είναι η πιο κοινή ψεύτικη αίσθηση ασφάλειας. Η λειτουργία report-only παρακολουθεί και καταγράφει τι θα μπλοκαριστεί, αλλά δεν μπλοκάρει τίποτα — οι επισκέπτες δεν έχουν μηδενική πραγματική προστασία. Είναι μόνο το ασφαλές πρώτο βήμα. Ο έλεγχός μας δίνει στη λειτουργία report-only ένα μικρό κλάσμα της αξίας μιας πραγματικής πολιτικής.
Επηρεάζει αυτό τη βαθμολογία μας, ή είναι απλώς συμβουλευτικό;
Επηρεάζει τη βαθμολογία σας. Ο έλεγχος Content Security Policy βαθμολογείται και αξίζει έως 25 βαθμούς στην κατηγορία Web Security. Μια ελλείπουσα ή αδύναμη πολιτική επισημαίνεται ως υψηλής σοβαρότητας.
Ο developer μας πρόσθεσε πολιτική αλλά η βαθμολογία εξακολουθεί να είναι χαμηλή — γιατί;
Μια πολιτική μπορεί να υπάρχει και να είναι αδύναμη. Τα πιο κοινά αίτια είναι παραθυράκια όπως 'unsafe-inline' και 'unsafe-eval' για scripts, ή wildcard πηγές (ένα απλό *), που επαν-ανοίγουν ακριβώς το κενό που η πολιτική σκοπεύει να κλείσει. Ο έλεγχός μας διαβάζει την πολιτική directive-directive και βαθμολογεί χαμηλά αυτές τις αδυναμίες.