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