HSTS και κεφαλίδες ασφαλείας για τον ιστότοπό σας
Σε κάθε σελίδα ο web server σας στέλνει headers: σύντομες γραμμές με οδηγίες για το browser. Καθορίζουν εν μέρει πόσο ασφαλώς χειρίζεται ο browser την ιστοσελίδα σας. Εδώ διαβάζετε τι είναι το HSTS, ποιες άλλες επικεφαλίδες ασφαλείας υπάρχουν και πώς τις ρυθμίζετε και τις ελέγχετε.
Πρώτα η ιστοσελίδα σας πρέπει να διαθέτει λειτουργικό πιστοποιητικό και να στέλνει τους επισκέπτες σε https. Αυτό μπορείτε να το διαβάσετε στα άρθρα Ενεργοποίηση, ανανέωση και επίλυση προβλημάτων πιστοποιητικού SSL και Υποχρεωτική ανακατεύθυνση επισκεπτών σε https.
Τι κάνει το HSTS;
Η ανακατεύθυνση σε https έχει ένα αδύναμο σημείο: το πρώτο αίτημα μέσω http εξακολουθεί να γίνεται χωρίς κρυπτογράφηση. Κάποιος στο ίδιο δίκτυο, για παράδειγμα σε δημόσιο wifi, μπορεί να υποκλέψει αυτό το αίτημα. Το HSTS (HTTP Strict Transport Security) λύνει αυτό το πρόβλημα. Η ιστοσελίδα σας στέλνει μέσω https την εξής επικεφαλίδα:
Strict-Transport-Security: max-age=31536000
Ο browser θυμάται τότε ότι επιτρέπεται να ανοίγει την ιστοσελίδα σας μόνο μέσω https. Αν ένας επισκέπτης πληκτρολογήσει αργότερα http://, ο browser το μετατρέπει μόνος του σε https, προτού καν σταλεί οτιδήποτε μέσω του δικτύου. Μια επικεφαλίδα HSTS που φτάνει μέσω απλού http αγνοείται από τον browser.
| Στοιχείο | Σημασία |
|---|---|
max-age | Για πόσο χρόνο το θυμάται ο browser, σε δευτερόλεπτα. Ο έλεγχος του internet.nl θεωρεί τουλάχιστον έναν χρόνο (31536000) ως επαρκή. |
includeSubDomains | Ισχύει και για όλα τα subdomains, όπως shop.τοδικοσαςdomain.nl και mail.τοδικοσαςdomain.nl. |
preload | Ζητάτε την ένταξη στη λίστα που είναι ενσωματωμένη στους browsers (hstspreload.org). Τότε προστατεύεται ακόμη και η πρώτη επίσκεψη. Για αυτό απαιτούνται, μεταξύ άλλων, ένας χρόνος, includeSubDomains και https σε όλα τα subdomains. Η αφαίρεση από τη λίστα διαρκεί πολύ. |
max-age=0 | Διαγράφει ξανά την αποθηκευμένη οδηγία, κατά την επόμενη επίσκεψη μέσω https. |
includeSubDomains αυτό ισχύει και για κάθε subdomain, όπως μια παλιά σελίδα κάμερας ή εκτυπωτή χωρίς πιστοποιητικό. Γι' αυτό προχωρήστε σταδιακά: ξεκινήστε με σύντομη τιμή max-age, για παράδειγμα μία ημέρα (86400), ελέγξτε ότι όλα λειτουργούν και αυξήστε σταδιακά σε έναν χρόνο.Ο διακόπτης HSTS στο DirectAdmin
Στο DirectAdmin μεταβαίνετε στο Domains και κάνετε κλικ στο όνομα domain σας. Αν η επιλογή Secure SSL Connection είναι ενεργοποιημένη, θα δείτε στο HSTS τον διακόπτη Enable HTTP Strict Transport Security. Κάντε κλικ στη συνέχεια στο Save για να αποθηκεύσετε. Πώς γίνεται αυτό βήμα προς βήμα, διαβάστε στο άρθρο Πάντα ανακατεύθυνση επισκεπτών σε https.
Αν θέλετε να δείτε ποιο max-age στέλνει η ιστοσελίδα σας, κοιτάξτε στα εργαλεία προγραμματιστή (developer tools) του browser σας ή στον έλεγχο του internet.nl (δείτε παρακάτω). Ρυθμίστε το HSTS σε ένα μόνο σημείο: στο DirectAdmin ή στο .htaccess, όχι και στα δύο. Αν ο browser λάβει δύο επικεφαλίδες HSTS, χρησιμοποιεί μόνο την πρώτη.
Οι άλλες επικεφαλίδες ασφαλείας
| Επικεφαλίδα | Έναντι τίνος | Τιμή για να ξεκινήσετε |
|---|---|---|
X-Content-Type-Options | Ο browser μαντεύει μόνος του τι είδους αρχείο είναι, με αποτέλεσμα μια ανεβασμένη "εικόνα" να μπορεί να εκτελεστεί ως script. | nosniff (η μόνη έγκυρη τιμή) |
Content-Security-Policy: frame-ancestors ή X-Frame-Options | Clickjacking: μια άλλη ιστοσελίδα φορτώνει τη δική σας σελίδα αόρατα μέσα σε ένα frame, έτσι ώστε οι επισκέπτες να κάνουν κλικ στα δικά σας κουμπιά χωρίς να το αντιλαμβάνονται. | frame-ancestors 'self', ή η παλαιότερη επικεφαλίδα X-Frame-Options: SAMEORIGIN |
Referrer-Policy | Όταν γίνεται κλικ προς μια άλλη ιστοσελίδα, ο browser στέλνει τη διεύθυνση της προηγούμενης σελίδας, μερικές φορές μαζί με έναν όρο αναζήτησης ή έναν αριθμό παραγγελίας. | strict-origin-when-cross-origin, ή πιο αυστηρά same-origin ή no-referrer. Το internet.nl θεωρεί σωστές μόνο τις αυστηρές τιμές. |
Permissions-Policy | Καθορίζει ποιες λειτουργίες του browser επιτρέπεται να χρησιμοποιούν η σελίδα σας και τα ενσωματωμένα frames, όπως κάμερα, μικρόφωνο και τοποθεσία. | camera=(), microphone=(), geolocation=() απενεργοποιεί αυτά τα τρία. Αν η ιστοσελίδα σας χρησιμοποιεί κάποια από αυτές τις λειτουργίες, παραλείψτε την. |
Content-Security-Policy (πλήρης) | Περιορίζει από ποια σημεία επιτρέπεται να φορτώνουν scripts, στυλ και εικόνες. Αυτό δυσκολεύει πολύ την εισαγωγή κακόβουλων scripts (XSS). | Προσαρμοσμένο ανά ιστοσελίδα. Αποφύγετε τα unsafe-inline, unsafe-eval και τα wildcards. |
Ρύθμιση στο .htaccess
Τοποθετήστε αυτές τις γραμμές στην αρχή του αρχείου .htaccess στον φάκελο public_html του domain σας. Δημιουργήστε πρώτα ένα αντίγραφο του αρχείου.
<IfModule mod_headers.c> Header always set X-Content-Type-Options "nosniff" Header always set Content-Security-Policy "frame-ancestors 'self'" Header always set Referrer-Policy "strict-origin-when-cross-origin" Header always set Permissions-Policy "camera=(), microphone=(), geolocation=()" # Μόνο αν ο διακόπτης HSTS στο DirectAdmin είναι απενεργοποιημένος: # Header always set Strict-Transport-Security "max-age=31536000" </IfModule>
Προσθέστε το includeSubDomains μόνο όταν είστε βέβαιοι ότι κάθε subdomain διαθέτει https. Αν χρησιμοποιείτε WordPress, μπορείτε να ρυθμίσετε τις επικεφαλίδες και με ένα plugin. Επιλέξτε ένα γνωστό plugin που ενημερώνεται ακόμη, και ρυθμίστε κάθε επικεφαλίδα σε ένα μόνο σημείο: στο plugin ή στο .htaccess.
Content-Security-Policy-Report-Only. Αυτή δεν μπλοκάρει τίποτα, αλλά δείχνει στην κονσόλα του browser τι θα είχε μπλοκαριστεί. Σε περίπτωση αμφιβολίας, αφήστε αυτό στον web developer σας, ή ξεκινήστε μόνο με το frame-ancestors.Έλεγχος
- Internet.nl: συμπληρώστε το domain σας στον έλεγχο ιστοσελίδας στο internet.nl.
- Ο browser σας: ανοίξτε την ιστοσελίδα σας, πατήστε F12 (ή επιλέξτε Επιθεώρηση), μεταβείτε στην καρτέλα Δίκτυο (Network), φορτώστε ξανά τη σελίδα και κάντε κλικ στο πρώτο αίτημα. Κάτω από τις Επικεφαλίδες απάντησης (Response Headers) βλέπετε όλα όσα στέλνει ο server σας.
- Η γραμμή εντολών: η εντολή
curl -sI https://τοδικοσαςdomain.nl/εμφανίζει τις επικεφαλίδες.
Ελέγξτε μετά από κάθε αλλαγή ότι η ιστοσελίδα σας, οι φόρμες και η σελίδα πληρωμής εξακολουθούν να λειτουργούν. Φροντίστε επίσης να διατηρείτε ενημερωμένα το CMS, τα plugins και τα themes σας. Δείτε το άρθρο Ασφάλιση του wp-login.php στο WordPress.
Περαιτέρω ανάγνωση
- MDN: Strict-Transport-Security (Αγγλικά)
- MDN: Content-Security-Policy (Αγγλικά)
- MDN: Permissions-Policy (Αγγλικά)
- Λίστα preload HSTS (Αγγλικά)
