.htaccess στο Apache: Ρυθμίσεις Ασφάλειας, Redirects και Cache
.htaccess στο Apache: Ρυθμίσεις Ασφάλειας, Redirects και Cache
Το .htaccess είναι αρχείο ρυθμίσεων ανά κατάλογο για τον Apache HTTP Server. Μπορεί να ελέγξει λειτουργίες όπως redirects, πρόσβαση σε αρχεία, headers και caching, εφόσον ο server επιτρέπει τις αντίστοιχες οδηγίες μέσω AllowOverride. Οι ρυθμίσεις του επηρεάζουν τα αιτήματα που εξυπηρετούνται από τον συγκεκριμένο κατάλογο και τους υποκαταλόγους του.
Προσοχή: Πριν αλλάξεις το αρχείο, κράτησε αντίγραφο ασφαλείας και βεβαιώσου ότι έχεις πρόσβαση στο hosting ή στο αρχείο μέσω FTP/SSH. Λανθασμένη σύνταξη ή οδηγία που δεν υποστηρίζεται μπορεί να προκαλέσει HTTP 500. Οι παρακάτω κανόνες είναι παραδείγματα και πρέπει να προσαρμόζονται στην έκδοση Apache και στη διαμόρφωση του server.
Τι μπορείς να ρυθμίσεις μέσω .htaccess
- Προστασία αρχείων και περιορισμός πρόσβασης.
- Ανακατευθύνσεις HTTP και HTTPS.
- Κανόνες URL και permalinks.
- Προστασία καταλόγων και απενεργοποίηση directory listing.
- HTTP security headers, όταν υποστηρίζονται τα αντίστοιχα modules.
- Cache και συμπίεση περιεχομένου, εφόσον επιτρέπονται από τον server.
Απενεργοποίηση directory listing
Η οδηγία Options -Indexes αποτρέπει την εμφάνιση λίστας αρχείων όταν ένας κατάλογος δεν διαθέτει index αρχείο και ο server έχει ενεργοποιημένο το directory listing.
Options -Indexes
Προστασία κρίσιμων αρχείων WordPress
Το wp-config.php περιέχει ρυθμίσεις σύνδεσης στη βάση δεδομένων και κλειδιά ασφαλείας. Μπορείς να περιορίσεις την πρόσβαση HTTP στο αρχείο με σύνταξη συμβατή με Apache 2.4:
<Files "wp-config.php">
Require all denied
</Files>
Για αρχεία που ξεκινούν με τελεία, όπως το .htaccess, η πρόσβαση πρέπει επίσης να περιορίζεται. Έλεγξε ότι οι κανόνες δεν εμποδίζουν νόμιμες λειτουργίες του hosting.
<FilesMatch "^\.">
Require all denied
</FilesMatch>
Περιορισμός πρόσβασης στο xmlrpc.php
Το xmlrpc.php παρέχει λειτουργίες απομακρυσμένης επικοινωνίας στο WordPress. Αν δεν χρησιμοποιείς εφαρμογές ή integrations που το χρειάζονται, μπορείς να εξετάσεις τον περιορισμό του. Μην το απενεργοποιήσεις χωρίς να ελέγξεις πρώτα τις εξαρτήσεις του site.
<Files "xmlrpc.php">
Require all denied
</Files>
Ο περιορισμός του XML-RPC δεν αντικαθιστά το MFA, την προστασία σύνδεσης, τις ενημερώσεις ή την παρακολούθηση. Αν χρειάζεσαι XML-RPC, προτίμησε ελεγχόμενη πρόσβαση αντί για καθολικό αποκλεισμό.
Αποτροπή εκτέλεσης PHP στον φάκελο uploads
Ο φάκελος wp-content/uploads προορίζεται κυρίως για αρχεία πολυμέσων. Αν ο server εκτελεί PHP μέσα σε αυτόν τον φάκελο, ένα κακόβουλο αρχείο που ανέβηκε εκεί θα μπορούσε να εκτελεστεί. Σε Apache 2.4 με ενεργό το κατάλληλο module, ένα αρχείο .htaccess μέσα στον ίδιο τον φάκελο uploads μπορεί να περιλαμβάνει:
<FilesMatch "\.php$">
Require all denied
</FilesMatch>
Η ρύθμιση πρέπει να ελεγχθεί στο πραγματικό περιβάλλον. Σε ορισμένες εγκαταστάσεις PHP-FPM ή Nginx, οι κανόνες .htaccess δεν εφαρμόζονται ή δεν επαρκούν. Η ασφαλέστερη λύση είναι να απαγορεύεται η εκτέλεση script στον συγκεκριμένο κατάλογο και σε επίπεδο server configuration.
Ανακατεύθυνση HTTP σε HTTPS
Αν το πιστοποιητικό TLS είναι σωστά εγκατεστημένο και το site εξυπηρετείται μέσω HTTPS, μπορείς να ανακατευθύνεις τα αιτήματα HTTP. Σε περιβάλλοντα πίσω από proxy ή CDN, επιβεβαίωσε πρώτα πώς μεταφέρεται η πληροφορία του αρχικού πρωτοκόλλου, ώστε να αποφύγεις redirect loops.
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
Βασικά HTTP Security Headers
Τα security headers δίνουν οδηγίες στον browser για το πώς θα χειριστεί το περιεχόμενο. Οι παρακάτω τιμές είναι ενδεικτικές. Πριν ενεργοποιήσεις Content Security Policy ή HSTS, έλεγξε όλες τις λειτουργίες, τα subdomains, τα εξωτερικά scripts και τις ανάγκες του site.
Header always set X-Content-Type-Options "nosniff"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
Header always set X-Frame-Options "SAMEORIGIN"
Το Header απαιτεί το module mod_headers. Για Content-Security-Policy χρειάζεται πολιτική προσαρμοσμένη στους πόρους που φορτώνει πραγματικά η εφαρμογή. Μην αντιγράψεις μια αυστηρή CSP χωρίς δοκιμή, γιατί μπορεί να διακόψει scripts, styles ή ενσωματώσεις.
Περιορισμός πρόσβασης σε συγκεκριμένο αρχείο
Μπορείς να προστατεύσεις συγκεκριμένο αρχείο ή διαδρομή με κανόνες Apache. Για περιορισμό βάσει IP, χρησιμοποίησε τη λειτουργία μόνο όταν η διεύθυνση IP είναι σταθερή και έχεις εναλλακτικό τρόπο διαχείρισης σε περίπτωση αποκλεισμού.
<Files "private-report.txt">
Require ip 203.0.113.10
</Files>
Η διεύθυνση 203.0.113.10 είναι δεσμευμένη για παραδείγματα τεκμηρίωσης και πρέπει να αντικατασταθεί με την πραγματική επιτρεπόμενη IP.
Έλεγχος πριν και μετά την αλλαγή
- Δημιούργησε αντίγραφο του υπάρχοντος .htaccess.
- Έλεγξε την έκδοση Apache και τα modules που είναι ενεργά.
- Πρόσθεσε μία αλλαγή κάθε φορά.
- Έλεγξε την αρχική σελίδα, τη σύνδεση, τις φόρμες, τα REST endpoints και τα permalinks.
- Έλεγξε τα HTTP status codes και τα server error logs.
- Αν εμφανιστεί HTTP 500 ή απρόσμενο redirect, επανάφερε αμέσως το προηγούμενο αρχείο.
Συχνές ερωτήσεις
Ισχύει το .htaccess σε κάθε server;
Όχι. Το .htaccess είναι χαρακτηριστικό του Apache και εφαρμόζεται μόνο όταν ο server επιτρέπει τις σχετικές οδηγίες. Σε Nginx οι αντίστοιχοι κανόνες ορίζονται στη διαμόρφωση του server.
Μπορώ να προστατεύσω ολόκληρο το WordPress μόνο με .htaccess;
Όχι. Το .htaccess είναι ένα μόνο επίπεδο άμυνας. Χρειάζονται ενημερώσεις, ασφαλείς κωδικοί, MFA, περιορισμένα δικαιώματα, backups, ασφαλής κώδικας και παρακολούθηση.
Για περισσότερα σχετικά με την ασφάλεια ιστοσελίδων, δες τον οδηγό Κυβερνοασφάλεια, τις Επιθέσεις Κυβερνοασφάλειας και τα Εργαλεία Κυβερνοασφάλειας.