Μετάβαση στο περιεχόμενο

Ρυθμίσεις cookies

Επιλέξτε ανά κατηγορία ποια cookies επιτρέπετε. Μπορείτε να αλλάξετε την επιλογή σας οποιαδήποτε στιγμή μέσω των Ρυθμίσεων cookies στο κάτω μέρος κάθε σελίδας. Δήλωση απορρήτου

Απαραίτητα

Πάντα ενεργά

Χρειάζονται για τη σύνδεση, για να διατηρείται το καλάθι σας και για να θυμόμαστε τις επιλογές σας. Είναι πάντα ενεργά.

Ποια cookies;
  • weboke_sessie, weboke_klant, weboke_remember: η συνεδρία σας και η παραμονή σε σύνδεση
  • weboke_basket: το καλάθι σας
  • wkBtwIncl: εμφάνιση τιμών με ή χωρίς ΦΠΑ
  • wok_cookies: η επιλογή σας για τα cookies, 12 μήνες

Μετρούν ποια διαφήμιση οδηγεί σε επίσκεψη ή παραγγελία, ώστε να μην πληρώνουμε για διαφημίσεις που δεν αποδίδουν.

Ποια cookies;
  • Google Ads μέσω Google Tag Manager (_gcl_au, _gcl_aw), έως 90 ημέρες
  • OpenAI Ads, διαφημίσεις στο ChatGPT
  • wok_aff: μέσω ποιου συνεργάτη ήρθατε σε εμάς (πρόγραμμα συνεργατών), 60 ημέρες

4,6

Χώρα και γλώσσα

Κάθε χώρα έχει τη δική της ιστοσελίδα, με τιμές και ΦΠΑ της χώρας αυτής.

Προβολή

Ενίσχυση ασφάλειας του ιστοτόπου: δικαιώματα, κεφαλίδες και πρόσθετα ασφαλείας @@ΟΜΣΧΡΙΨΗ@@

Ενότητα 7: Ασφάλεια · Χρόνος ανάγνωσης: 10 λεπτά

Μαθησιακός στόχος: Μετά από αυτό το μάθημα θα μπορείτε να ενισχύσετε την ασφάλεια ενός ιστοτόπου WordPress με δικαιώματα, ρυθμίσεις και κεφαλίδες ασφαλείας, και να αξιολογείτε σωστά την αξία των πρόσθετων ασφαλείας.

Βασικές έννοιες: ενίσχυση ασφάλειας (hardening), δικαιώματα αρχείων (644, 755), DISALLOW_FILE_EDIT, καμία εκτέλεση PHP στα uploads, λίστα φακέλων, απόκρυψη έκδοσης, X-Powered-By, κεφαλίδες ασφαλείας, αρχεία αντιγράφων ασφαλείας και .git στον φάκελο ιστού, WAF στον server, WAF σε πρόσθετο, σαρωτής κακόβουλου λογισμικού

Τι σημαίνει ενίσχυση ασφάλειας

Η ενίσχυση ασφάλειας σημαίνει: να ρυθμίσετε τον ιστότοπο έτσι ώστε ένα σφάλμα ή μια παραβίαση να προκαλεί λιγότερη ζημιά. Δεν αντικαθιστά τις ενημερώσεις και τους ισχυρούς κωδικούς πρόσβασης (μάθημα 7.2 και 7.3), αλλά μειώνει τις συνέπειες. Σκεφτείτε ένα σπίτι: οι ενημερώσεις είναι οι κλειδαριές, η ενίσχυση ασφάλειας είναι να φροντίσετε ώστε ένας διαρρήκτης που μπήκε παρόλα αυτά μέσα, να μην μπορεί να φτάσει στο χρηματοκιβώτιο.

Δικαιώματα αρχείων

Κάθε αρχείο και κάθε φάκελος στον server έχει δικαιώματα: ποιος μπορεί να διαβάσει, να γράψει και να εκτελέσει. Γράφονται ως τρία ψηφία, για τον ιδιοκτήτη, την ομάδα και τον υπόλοιπο κόσμο. Η κατευθυντήρια γραμμή από την τεκμηρίωση του WordPress:

ΤιΔικαιώματαΣημασία
Φάκελοι755Ο ιδιοκτήτης μπορεί τα πάντα, οι άλλοι μπορούν να διαβάσουν και να ανοίξουν
Αρχεία644Ο ιδιοκτήτης μπορεί να διαβάσει και να γράψει, οι άλλοι μόνο να διαβάσουν
wp-config.phpαυστηρότερα, για παράδειγμα 600 ή 640Μόνο ο ιδιοκτήτης (και ενδεχομένως η ομάδα του web server) μπορεί να διαβάσει

Ποια τιμή λειτουργεί για το wp-config.php εξαρτάται από το πώς εκτελεί ο πάροχός σας το PHP: στην πλειονότητα της κοινόχρηστης φιλοξενίας (hosting) το PHP εκτελείται ως ο δικός σας χρήστης, οπότε το 600 είναι αρκετό. Δοκιμάστε το και ελέγξτε αν ο ιστότοπος εξακολουθεί να λειτουργεί.

Ποτέ 777. Αυτό σημαίνει: όλοι στον server μπορούν να γράψουν. Ένας οδηγός που λέει «ορίστε τον φάκελο σε 777 αν το ανέβασμα δεν λειτουργεί», λύνει το πρόβλημα με λάθος τρόπο. Σε καλή φιλοξενία αυτό δεν χρειάζεται ποτέ.

Ρυθμίσεις στο wp-config.php

Μερικές γραμμές που κάνουν μεγάλη διαφορά (πάνω από το «σταματήστε την επεξεργασία»):

// Καμία επεξεργασία αρχείων από τον Πίνακα Ελέγχου (Εμφάνιση > Επεξεργαστής θέματος και Πρόσθετα > Επεξεργαστής πρόσθετων).
define( 'DISALLOW_FILE_EDIT', true );

// Μηνύματα σφάλματος ποτέ στην οθόνη των επισκεπτών (μάθημα 5.4).
define( 'WP_DEBUG', false );

Με το DISALLOW_FILE_EDIT εξαφανίζεται ο επεξεργαστής με τον οποίο μπορείτε να τροποποιήσετε στον Πίνακα Ελέγχου αρχεία PHP θεμάτων εμφάνισης και πρόσθετων. Ένας διαρρήκτης που καταλαμβάνει έναν λογαριασμό διαχειριστή, δεν μπορεί τότε με δύο κλικ να βάλει κακόβουλο κώδικα στο θέμα εμφάνισής σας. Μπορείτε ακόμα να εγκαθιστάτε πρόσθετα· αν θέλετε να απαγορεύσετε και αυτό (για παράδειγμα σε έναν ιστότοπο που διαχειρίζεστε για έναν πελάτη), υπάρχει το DISALLOW_FILE_MODS, αλλά τότε δεν λειτουργούν πλέον ούτε οι ενημερώσεις μέσω του Πίνακα Ελέγχου.

Καμία εκτέλεση PHP στα uploads, καμία λίστα φακέλων

Στον φάκελο wp-content/uploads ανήκουν εικόνες και έγγραφα, ποτέ αρχεία PHP. Διαρρήκτες που μέσω μιας παραβίασης μπορούν να ανεβάσουν ένα αρχείο, προσπαθούν ακριβώς να τοποθετήσουν εκεί ένα αρχείο PHP και να το ζητήσουν. Μπλοκάρετε αυτό με ένα .htaccess στον φάκελο uploads (σε LiteSpeed και Apache):

<Files *.php>
Require all denied
</Files>

Απενεργοποιήστε επίσης την εμφάνιση λίστας φακέλων. Χωρίς index.php ή index.html σε έναν φάκελο, ορισμένοι web servers εμφανίζουν μια λίστα όλων των αρχείων («Index of /wp-content/uploads/2026/11»). Αυτό είναι μια βιτρίνα για όποιον ψάχνει αντίγραφα ασφαλείας ή ευαίσθητα έγγραφα. Στο .htaccess του φακέλου ιστού σας:

Options -Indexes

Πολλοί πάροχοι έχουν ήδη απενεργοποιήσει αυτό από προεπιλογή. Η άσκηση αυτού του μαθήματος το ελέγχει.

Χωρίς υπολείμματα στον φάκελο ιστού

Όλα όσα βρίσκονται στον φάκελο ιστού μπορούν να ζητηθούν μέσω του διαδικτύου, εκτός από ό,τι ο server εκτελεί ως PHP ή μπλοκάρει. Επικίνδυνα είναι:

  • αντίγραφα του wp-config.php (wp-config.php.bak, wp-config.old, wp-config.php~ από έναν επεξεργαστή κειμένου): αυτά περιέχουν τον κωδικό πρόσβασης της βάσης δεδομένων σας και αποστέλλονται ως απλό κείμενο (μάθημα 1.3)·
  • αντίγραφα ασφαλείας όπως backup.zip, site.tar.gz ή database.sql στον φάκελο ιστού·
  • ένας φάκελος .git από έναν προγραμματιστή, με τον οποίο κάποιος μπορεί να κατεβάσει όλον τον κώδικά σας (και μερικές φορές κωδικούς πρόσβασης)·
  • το debug.log μέσα στο wp-content (μάθημα 5.4)·
  • παλιά αρχεία εγκατάστασης ή δοκιμών όπως το info.php με το phpinfo().

Φυλάσσετε τα αντίγραφα ασφαλείας εκτός του φακέλου ιστού ή εκτός του server, και καθαρίζετε τα υπολείμματα.

Απόκρυψη έκδοσης: μικρό κέρδος

Το WordPress προσθέτει από προεπιλογή στο HTML:

<meta name="generator" content="WordPress 7.1.4" />

και το ίδιο στο RSS feed. Επίσης το PHP μερικές φορές εμφανίζεται σε μια κεφαλίδα: X-Powered-By: PHP/8.3.14. Η απόκρυψη αυτού είναι λογική, αλλά μην περιμένετε πολλά: τα προγράμματα των διαρρηκτών δοκιμάζουν απλώς μια παραβίαση, ανεξάρτητα από την έκδοση που εμφανίζετε, και οι εκδόσεις μπορούν συχνά να εξαχθούν και από το ?ver= μετά από scripts. Η απόκρυψη είναι τακτοποίηση, όχι ασφάλεια. Ένας ιστότοπος που κρύβει την έκδοσή του αλλά δεν ενημερώνεται, είναι εξίσου ευάλωτος.

Έτσι το κάνετε, σε ένα δικό σας μικρό πρόσθετο ή στο functions.php του child theme σας:

remove_action( 'wp_head', 'wp_generator' );
add_filter( 'the_generator', '__return_empty_string' );

Και την κεφαλίδα PHP με expose_php = Off στις ρυθμίσεις PHP του παρόχου σας (στο DirectAdmin στο Select PHP version, Options), ή με Header unset X-Powered-By στο .htaccess.

Κεφαλίδες ασφαλείας

Με μερικές κεφαλίδες ενημερώνετε τον browser πώς πρέπει να συμπεριφέρεται με τον ιστότοπό σας. Οι σημαντικότερες:

ΚεφαλίδαΤι κάνει
Strict-Transport-SecurityΜόνο μέσω https πλέον (μάθημα 3.1)
X-Content-Type-Options: nosniffΟ browser δεν θα μαντέψει τι είδους αρχείο είναι κάτι· αποτρέπει να εκτελεστεί ως script μια ανεβασμένη «εικόνα»
X-Frame-Options: SAMEORIGIN ή Content-Security-Policy: frame-ancestors 'self'Άλλοι ιστότοποι δεν επιτρέπεται να εμφανίζουν τον ιστότοπό σας σε frame· αποτρέπει το clickjacking (ένα αόρατο κουμπί του ιστοτόπου σας κάτω από εκείνο κάποιου άλλου)
Referrer-Policy: strict-origin-when-cross-originΣε ένα κλικ προς άλλον ιστότοπο μεταφέρεται μόνο το domain σας, όχι η πλήρης διεύθυνση
Permissions-PolicyΑπενεργοποιεί λειτουργίες του browser που ο ιστότοπός σας δεν χρησιμοποιεί (κάμερα, μικρόφωνο, τοποθεσία)
Content-Security-PolicyΚαθορίζει ακριβώς από ποιες πηγές επιτρέπεται να προέρχονται scripts και στυλ. Ισχυρό, αλλά δύσκολο να ρυθμιστεί σωστά με WordPress και πρόσθετα· ξεκινήστε με τη λειτουργία Report-Only

Στο .htaccess (σε LiteSpeed και Apache):

<IfModule mod_headers.c>
Header always set X-Content-Type-Options "nosniff"
Header always set X-Frame-Options "SAMEORIGIN"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
Header always set Permissions-Policy "camera=(), microphone=(), geolocation=()"
</IfModule>

Ελέγξτε στη συνέχεια αν όλα λειτουργούν: ενσωματωμένο περιεχόμενο, κουμπιά πληρωμής, ένα widget συνομιλίας. Εξωτερικά εργαλεία όπως το securityheaders.com και το internet.nl δείχνουν τι στέλνει ο ιστότοπός σας.

Πρόσθετα ασφαλείας, με ειλικρίνεια

Υπάρχουν πολλά πρόσθετα ασφαλείας (για παράδειγμα Wordfence, Solid Security, All-In-One Security, Sucuri). Συχνά συνδυάζουν: ένα firewall, έναν σαρωτή κακόβουλου λογισμικού, προστασία σύνδεσης, έλεγχο ταυτότητας δύο παραγόντων, ειδοποιήσεις και μια λίστα ενίσχυσης ασφάλειας. Χρήσιμα, αλλά με όρια:

  • Ένα firewall σε πρόσθετο (WAF) ξεκινά μόνο όταν εκτελείται το PHP. Ένα κακόβουλο αίτημα πρέπει πρώτα να περάσει μέσα από τον web server και το PHP προτού το δει το πρόσθετο. Μια παραβίαση σε ένα αρχείο PHP που καλείται απευθείας, ή μια επίθεση που επιβαρύνει έντονα το ίδιο το PHP, δεν το σταματά πάντα. Ένα firewall στον server (για παράδειγμα ModSecurity, Imunify360 ή ένα firewall του παρόχου σας) βρίσκεται νωρίτερα στην αλυσίδα και σταματά περισσότερα, χωρίς το δικό σας πρόσθετο να κάνει τον υπολογισμό. Ρωτήστε τον πάροχό σας τι εκτελείται στον server.
  • Ένας σαρωτής βρίσκει εκ των υστέρων. Ένας σαρωτής κακόβουλου λογισμικού σας ενημερώνει ότι κάτι είναι λάθος. Αυτό είναι πολύτιμο, αλλά δεν αποτρέπει τίποτα. Και ένας σαρωτής στον ίδιο server με έναν παραβιασμένο ιστότοπο μπορεί και ο ίδιος να έχει τροποποιηθεί από τον διαρρήκτη.
  • Δεν αντικαθιστούν τις ενημερώσεις. Ένα πρόσθετο με γνωστή παραβίαση παραμένει ευάλωτο, ακόμα και με ένα πρόσθετο ασφαλείας δίπλα του. Ορισμένες υπηρεσίες ασφαλείας προσφέρουν «εικονικά patches» που σταματούν γνωστές επιθέσεις μέχρι να κάνετε την ενημέρωση· χρήσιμο ως γέφυρα, όχι ως αντικατάσταση.
  • Είναι και τα ίδια ένα πρόσθετο. Περισσότερος κώδικας, περισσότερα για ενημέρωση, μερικές φορές και τα ίδια με παραβίαση. Και δύο πρόσθετα ασφαλείας ταυτόχρονα συχνά συγκρούονται.
  • Κοστίζουν σε υπολογιστική ισχύ, ιδίως οι σαρωτές που εκτελούνται στον δικό σας server.

Μια λογική επιλογή: δείτε πρώτα τι κάνει ήδη ο πάροχός σας (firewall, σάρωση κακόβουλου λογισμικού, μπλοκάρισμα προσπαθειών σύνδεσης). Συμπληρώστε ό,τι λείπει, συνήθως έλεγχος ταυτότητας δύο παραγόντων και περιορισμός προσπαθειών σύνδεσης. Ένα εκτεταμένο πρόσθετο ασφαλείας είναι ιδιαίτερα χρήσιμο σε φιλοξενία που από μόνη της κάνει λίγα.

Σύνοψη

  • Η ενίσχυση ασφάλειας περιορίζει τη ζημιά από ένα σφάλμα ή μια παραβίαση· δεν αντικαθιστά τις ενημερώσεις και τους κωδικούς πρόσβασης.
  • Φάκελοι 755, αρχεία 644, wp-config.php αυστηρότερα· ποτέ 777.
  • Ενεργοποιήστε το DISALLOW_FILE_EDIT, μπλοκάρετε την εκτέλεση PHP στα uploads, απενεργοποιήστε τις λίστες φακέλων και καθαρίστε αντίγραφα ασφαλείας, .git και debug.log από τον φάκελο ιστού.
  • Η απόκρυψη έκδοσης είναι τακτοποίηση, όχι ασφάλεια· οι κεφαλίδες ασφαλείας βοηθούν τον browser να προστατεύσει τους επισκέπτες σας.
  • Ένα firewall στον server σταματά περισσότερα από ένα πρόσθετο· τα πρόσθετα ασφαλείας είναι συμπλήρωμα, όχι αντικατάσταση.

Κουίζ

1. Ένας οδηγός λέει: «ορίστε το wp-content σε 777 αν το ανέβασμα δεν λειτουργεί.» Τι γνώμη έχετε γι' αυτό;



2. Τι κάνει το DISALLOW_FILE_EDIT;



3. Γιατί ένα firewall στον server βρίσκεται νωρίτερα στην αλυσίδα από ένα firewall σε πρόσθετο;



4. Έχετε αφαιρέσει την ετικέτα generator. Είναι τώρα ο ιστότοπός σας ασφαλής για παραβιάσεις σε παλιές εκδόσεις;



5. Ποια κεφαλίδα αποτρέπει έναν άλλο ιστότοπο να φορτώσει τον ιστότοπό σας σε ένα αόρατο frame;



Άσκηση

Άσκηση A7.4: Τι δείχνει ο ιστότοπός σας σε όλους; Συμπληρώστε τη διεύθυνση του ιστοτόπου σας. Το πρόγραμμα διαβάζει την αρχική σελίδα και το RSS feed (/feed/) και ελέγχει: δεν υπάρχει έκδοση WordPress στην ετικέτα generator του HTML και του feed, η κεφαλίδα X-Powered-By δεν δείχνει έκδοση PHP, και ο ιστότοπός σας στέλνει X-Content-Type-Options: nosniff, μια προστασία κατά των frames (X-Frame-Options ή frame-ancestors) και μια Referrer-Policy; Η απουσία HSTS (μάθημα 3.1) και Permissions-Policy επιτρέπεται (πορτοκαλί).

Άσκηση A7.4: Τι δείχνει ο ιστότοπός σας σε όλους;


Ό,τι συμπληρώνετε και ό,τι βρίσκουμε δεν το αποθηκεύουμε. Το πρόγραμμα περιήγησής σας θυμάται τις απαντήσεις σας και αν περάσατε την άσκηση. Αν έχετε εγγραφεί, αποθηκεύουμε μόνο ότι η άσκηση ήταν (σχεδόν) σωστή στο Τα μαθήματά μου· εκεί μπορείτε και να το διαγράψετε.

Άσκηση A7.4b: Χωρίς υπολείμματα στον φάκελο ιστού. Αποδείξτε ότι είναι δικός σας ο ιστότοπος (εγγραφή TXT ή αρχείο με τον κωδικό της άσκησης). Το πρόγραμμα ζητά στη συνέχεια μια σύντομη σταθερή λίστα: τον φάκελο /wp-content/uploads/ (καμία λίστα φακέλων), το /.git/HEAD, το /wp-content/debug.log και μερικά συνηθισμένα ονόματα αντιγράφων του wp-config.php. Καλό αποτέλεσμα είναι όταν κανένα από αυτά δεν επιστρέφει περιεχόμενο (404 ή 403). Το πρόγραμμα δεν δοκιμάζει τίποτα άλλο και δεν τροποποιεί τίποτα.

Άσκηση A7.4b: Χωρίς υπολείμματα στον φάκελο ιστού

Αυτός ο έλεγχος ζητά διαδρομές που θα πρέπει να χρησιμοποιήσετε μόνο για τον δικό σας ιστότοπο. Κάντε πρώτα κλικ στο "Εμφάνιση του κωδικού μου" και προσθέστε αυτόν τον κωδικό ως εγγραφή TXT στο _weboke-cursus.<το domain σας> ή ως αρχείο στον ιστότοπό σας (δείτε την εξήγηση δίπλα στον κωδικό).


Ό,τι συμπληρώνετε και ό,τι βρίσκουμε δεν το αποθηκεύουμε. Το πρόγραμμα περιήγησής σας θυμάται τις απαντήσεις σας και αν περάσατε την άσκηση. Αν έχετε εγγραφεί, αποθηκεύουμε μόνο ότι η άσκηση ήταν (σχεδόν) σωστή στο Τα μαθήματά μου· εκεί μπορείτε και να το διαγράψετε.

Περαιτέρω ανάγνωση

Αυτά τα άρθρα περιγράφουν τα βήματα στους πίνακες ελέγχου του WebOké· σε άλλους πίνακες ελέγχου λειτουργούν παρόμοια.

Μια στιγμή…

Ρυθμίστε τα domains σας

Ρυθμίστε για κάθε domain τους nameservers, τη σύνδεση με το hosting σας και ποιος θα είναι ο κάτοχος.

Φόρτωση των domains σας…