Όλα για τα .htaccess

05 Απρ 2011 | Development

Δεν επιτρέπονται τα σχόλια.


htaccess

Ο Apache web server επιτρέπει την παραμετροποίηση μιας ιστοσελίδας σε επίπεδο καταλόγου μέσω των αρχείων .htaccess. Οι τοπικές .htaccess εντολές θα πρέπει να εκτελούνται μέσα από το αρχείο .htaccess. Ο χρήστης θα πρέπει να έχει τα κατάλληλα δικαιώματα για να προσπελάσει ή/και να επεξεργαστεί το αρχείο.

Επιπλέον, δεν θα πρέπει ποτέ να υπάρχει η δυνατότητα εγγραφής σε αυτού του αρχείου για όλο τον κόσμο. Μία ασφαλή ρύθμιση στα δικαιώματα πρόσβασης του αρχείο είναι το 644, όπου επιτρέπει την ανάγνωση από όλους αλλά μπορεί μόνο ο ιδιοκτήτης του αρχείου να γράψει σε αυτό. Τέλος, οι εντολές στο αρχείο .htaccess εφαρμόζονται στον γονικό κατάλογο και στους υπό-καταλόγους. Άρα για να εφαρμόσετε κανόνες σε ένα web site, τοποθετήστε το .htaccess στον κεντρικό κατάλογο της ιστοσελίδας σας.

Σχόλια στον κώδικα .htaccess

Τα σχόλια είναι χρήσιμα για τη συντήρηση του αρχείου κάποια στιγμή στο μέλλων. Τα σχόλια στα αρχεία htaccess είναι ανά γραμμή, με κάθε γραμμή σχολίου να ξεκινά με το σύμβολο της δίεσης «#». Έτσι, ένα σχόλιο που θέλει περισσότερες από μια γραμμές θα έχει στην αρχή κάθε γραμμής μία δίεση. Επιπλέον, λόγο της μεγάλης ευαισθησίας των αρχείων htaccess είναι καλό στα σχόλια να χρησιμοποιείτε μόνο αλφαριθμητικούς χαρακτήρες και να αποφεύγετε τα σύμβολα.

Παράδειγμα:

# Αυτό είναι ένα σχόλιο
# που χρειάζεται περισσότερες από μία γραμμές
# για να ολοκληρωθεί
.......
.......
# Αυτό είναι ένα σχόλιο (με διάφορα) | σύμβολα
# Θα πρέπει να προσέχετε [και να μην] βάζετε #
# σύμβολα στα σχόλια σας.
ΠΡΟΣΟΧΗ : Επειδή τα htaccess είναι ισχυρά αρχεία ρυθμίσεων, ένα πολύ μικρό σφάλμα στον κώδικα των εντολών μπορεί να βλάψει την ιστοσελίδα σας. Έτσι σας προτείνουμε, πριν κάνετε την παραμικρή αλλαγή να κρατήσετε πρώτα αντίγραφα ασφαλείας για το σύνολο της ιστοσελίδας σας. Επίσης θα πρέπει μετά τις αλλαγές σε κάποιο αρχείο htaccess να κάνετε εξονυχιστικό έλεγχο στην ιστοσελίδα σας. Αν παρατηρήσετε κάποια δυσλειτουργία στον κώδικα σας, κάντε χρήση των αντιγράφων ασφαλείας, που έχετε για την ιστοσελίδα σας.

Θέματα επιδόσεων

Με τα αρχεία .htaccess μπορείτε να έχετε ρυθμίσεις σε επίπεδο καταλόγου χωρίς να χρειαστεί να επεξεργαστείτε το κεντρικό αρχείο ρυθμίσεων του Apache. Ωστόσο για λόγους επιδόσεων και ασφάλειας θα πρέπει να χρησιμοποιείτε το κεντρικό αρχείο ρυθμίσεων του Apache όποτε αυτό είναι εφικτό.

Για παράδειγμα, όταν ο Apache έχει τις κατάλληλες ρυθμίσεις για να χρησιμοποιεί τα αρχεία htaccess, τότε ο Apache για κάθε αίτημα ιστοσελίδας θα πρέπει να κάνει έλεγχο σε κάθε κατάλογο της ιστοσελίδας για αρχεία .htaccess και να τα χρησιμοποιήσει. Αυτό έχει ως αποτέλεσμα την επιπλέον επεξεργασία αρχείων και έτσι μειώνετε η αποδοτικότητα του Apache.

Η επιβάρυνση του Apache δεν είναι και τόσο σημαντική για Web Sites με λίγη κίνηση, αλλά τα πράγματα αρχίζουν να γίνονται ποιο δύσκολα με ιστοσελίδες που έχουν πολύ κίνηση.

Έτσι τα αρχεία .htaccess θα πρέπει να χρησιμοποιούνται μόνο όταν το κεντρικό αρχείο ρυθμίσεων του Apache δεν είναι διαθέσιμο σε όλους τους χρήστες του.

Ορισμοί χαρακτήρων regex για τα htaccess

#
Η δίεση «#» λέει το Server να παρακάμψει αυτή τη γραμμή. Χρησιμοποιείτε για να συμπεριλαμβάνει ο χρήστης σχόλια. Κάθε γραμμή με σχόλια απαιτεί το σύμβολο της δίεσης στην αρχή. Να σημειωθεί πως είναι καλή πρακτική να χρησιμοποιείτε μόνο γράμματα και αριθμούς για τα σχόλια.
[F]
Υποχρεώνει το Server να επιστρέψει στο χρήστη ένα σφάλμα HTTP 403 Forbidden
[L]
Τελευταίος κανόνας. Υποχρεώνει το server να σταματήσει την διαδικασία re-write μετά την εκτέλεση του κανόνα που περιέχει τον ορισμό L.
[N]
Επόμενο. Υποχρεώνει το server να επιστρέψει τον κανόνα re-write μέχρι να ολοκληρωθούν όλες οι εντολές για rewriting με επιτυχία.
[G]
Χάθηκε. Υποχρεώνει το server να επιστρέψει το μήνυμα κατάστασης Gone (δεν υπάρχει)
[P]
Proxy. Υποχρεώνει το server να διαχειριστεί τα αιτήματα μέσω του mod_proxy
[C]
Αλυσίδα. Υποχρεώνει το server να συνδέσει το κανόνα αυτό με τον προηγούμενο.
[R]
Ανακατεύθυνση. Υποχρεώνει το server να κάνει μια ανακατεύθυνση, υποχρεώνοντας και τον web browser να ζητήσει τη νέα διεύθυνση.
[NC]
No Case. Ορίζει κάθε συσχετισμένο στοιχείο ως μη ευαίσθητο σε κεφαλαία και πεζά γράμματα.
[PT]
Πέρνα μέσω. Δίνει εντολές στο mod_rewrite να επιστρέψει το επεξεργασμένο URL στον Apache για επιπλέον επεξεργασία.
[OR]
Ή. Ορίζει ένα λογικό «ή» που δένει δύο εκφράσεις μαζί έτσι ώστε αν μια από τις εκφράσεις είναι αληθής θα την υποχρεώσει να εκτελεστεί.
[NE]
Χωρίς διαφυγή. Υποχρεώνει το server να αναλύσει την έξοδο χωρίς κανόνες διαφυγής για τους χαρακτήρες.
[NS]
Χωρίς υπό ερωτήματα. Υποχρεώνει το server να παρακάμψει την εντολή if για εσωτερικά υπό ερωτήματα.
[QSA]
Προσάρτησε ερώτημα. Υποχρεώνει το server να προσαρτήσει ένα query string στο τέλος της έκφρασης.
[S=x]
Παράκαμψη. Υποχρεώνει το server να παρακάμψει τους επόμενους «x» κανόνες αν ένα ο κανόνας είναι αληθής.
[E=μεταβλητή:τιμή]
Μεταβλητή περιβάλλοντος. Υποχρεώνει το server να δημιουργήσει μια μεταβλητή περιβάλλοντος.
[T=MIME-type]
MIME Type. Ορίζει το MIME type της πηγής.
[]
Ορίζει μια κλάση χαρακτήρων, στην οποία κάθε χαρακτήρας μέσα στις αγκύλες θα επιστρέφει ένα αποτέλεσμα. Πχ. το [xyz] θα επιστρέψει τα x, y ή z.
[]+
Μία κλάση χαρακτήρων στην οποία κάθε συνδυασμός χαρακτήρων μέσα στις αγκύλες θα επιστρέφει ένα αποτέλεσμα. Για παράδειγμα [xyz]+ θα επιστρέψει τα x, τα y, τα z, τα xz, τα yx και οποιοδήποτε άλλο συνδυασμό χαρακτήρων από το σύνολο που είναι στις αγκύλες.
[^]
Ορίζει το λογικό «not» σε μία κλάση χαρακτήρων. Για παράδειγμα το [^xyz] θα επιστρέψει κάθε χαρακτήρα ή συνδυασμό χαρακτήρων που δεν περιέχει τα x, y και z
[a-z]
Μια παύλα ανάμεσα από δύο χαρακτήρες σε μια κλάση χαρακτήρων δηλώνει το εύρος των χαρακτήρων μεταξύ τους. Για παράδειγμα η κλάση [a-zA-Z] θα εντοπίσει όλους τους χαρακτήρες μεταξύ a και z και από A μέχρι Z
a{n}
Ορίζει τον ακριβή αριθμό «n» εντοπισμού του χαρακτήρα «a». Για παράδειγμα, x{3} θα εντοπίσει όλα τα «xxx»
a{n,}
Υποχρεώνει το σενάριο να εντοπίσει «n» ή και περισσότερους χαρακτήρες «a». Για παράδειγμα, x{3, } θα εντοπίσει «xxx», «xxxx», «xxxxxx» κ.ο.κ.
a{n,m}
Υποχρεώνει το σενάριο να από «n» μέχρι «m» χαρακτήρες «a». Για παράδειγμα, x{3, 5} θα εντοπίσει «xxx», «xxxx» και «xxxxx»
()
Χρησιμοποιείτε για να ομαδοποιήσει χαρακτήρες. Οι χαρακτήρες που εντοπίζονται από την έκφραση μέσα στην παρένθεση θεωρούνται ως μια μονάδα. Για παράδειγμα (re)?configuration θα εντοπίσει όλα τα configuration που ίσως έχουν ως πρόθεμα το re, δηλαδή θα εντοπίσει και όλα τα reconfiguration.
^
Σηματοδοτεί την αρχή ενός

regex

. Για παράδειγμα, το μοτίβο που ψάχνουμε θα πρέπει να αρχίζει με την έκφραση που ακολουθεί.

$
Σηματοδοτεί το τέλος ενός

regex

. Για παράδειγμα, το μοτίβο που ψάχνουμε θα πρέπει να τελειώνει με την έκφραση που προηγείται.

?
Ορίζει ως προαιρετικό τον προηγούμενο χαρακτήρα. Για παράδειγμα η έκφραση games? θα εντοπίσει όλα τα «games» και «game» ενώ η έκφραση down(load) θα εντοπίσει όλα τα down και όλα τα download
!
Δηλώνει άρνηση. Για παράδειγμα η έκφραση !rain θα εντοπίσει τα πάντα εκτός του «rain»
.
Μια τελεία αντιστιχεί σε κάθε μοναδικό χαρακτήρα.
Η παύλα ενημερώνει τον Apache να μην κάνει rewrite το domain. Για παράδειγμα …. mydomain.com.* – [F]
+
Εντοπίζει ένα ή και περισσότερους από τους προηγούμενους χαρακτήρες. Για παράδειγμα, η έκφραση T+ θα εντοπίσει ένα ή και περισσότερα διαδοχικά T
*
Εντοπίζει μηδέν ή και περισσότερους από τους προηγούμενους χαρακτήρες. Για παράδειγμα, η έκφραση T* θα εντοπίσει μηδέν ή και περισσότερα διαδοχικά T
|
Ορίζει ένα λογικό «ή» (or). Για παράδειγμα, η έκφραση (a|b) θα εντοπίσει όλα τα a ή b
\
Το χρησιμοποιούμε ως χαρακτήρα διαφυγής για ειδικούς χαρακτήρες. Για παράδειγμα αν θέλουμε μέσα στον κορμό ενός κειμένου να εντοπίσουμε τα σύμβολα $, ^, *, \, τότε στην έκφραση μας θα πρέπει να τους συμπεριλάβουμε με το χαρακτήρα διαφυγής κατά αυτό τον τρόπο, \$, \^, \* και \\.
\.
Το χρησιμοποιούμε για να εντοπίσουμε μέσα στον κορμό ενός κειμένου το σύμβολο της τελείας.
/*
Εντοπίζει μηδέν ή και περισσότερα slashes.
.*
Εντοπίζει μηδέν ή και περισσότερα χαρακτήρες.
^$
Το χρησιμοποιούμε για να εντοπίσουμε ένα καινό κείμενο.
^.*$
Η εξ ορισμού έκφραση για να εντοπίσουμε τα πάντα στον κορμό ενός κειμένου
[^/.]
Εντοπίζει ένα χαρακτήρα που δεν είναι ούτε slash ούτε τελεία.
[^/.]+
Εντοπίζει ένα ή και περισσότερους χαρακτήρες που δεν είναι ούτε slash ούτε τελεία.
http://
Αυτή η έκφραση είναι κατά γράμμα. Σε αυτή την περίπτωση θα εντοπίζει όλα τα «http://»
^domain.*
Θα εντοπίσει ένα μοτίβο το οποίο θα αρχίζει με τη λέξη «domain» και μπορεί μετά τη λέξη domain να υπάρχει οποιοδήποτε αυθαίρετο σύνολο χαρακτήρων.
-d
Υποχρεώνει τον Apache να ελέγξει αν το κείμενο είναι κατάλογος.
-f
Υποχρεώνει τον Apache να ελέγξει αν το κείμενο είναι αρχείο.
-s
Υποχρεώνει τον Apache να ελέγξει αν το αρχείο στο κείμενο που έχει δοθεί δεν έχει τιμή μηδέν.

Κωδικοί ανακατεύθυνσης

301 – Έχει μεταφερθεί μόνιμα
302 – Έχει μεταφερθεί προσωρινά
403 – Η πρόσβαση απαγορεύεται
404 – Δεν εντοπίστηκε
410 – Το URL που ζήτησε ο χρήστης δεν είναι πλέων διαθέσιμο από αυτό το server.

Δημιουργία σχολίων στον κώδικα σας

Η προσθήκη σχολίων στον κώδικα σας είναι εξαιρετική ιδέα και λογική. Κάθε γραμμή στον κώδικα htaccess που αρχίζουν με το σύμβολο της δίεσης (#) αγνοείτε από τον Apache. Σχόλια που απαιτούν περισσότερες από μια γραμμές για να ολοκληρωθούν θα πρέπει να έχουν μια δίεση στην αρχή κάθε γραμμής.

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

Ενεργοποιήστε την επανεγγραφή

Καθώς μερικοί Web Servers μπορεί να μην έχουν αυτόματα ενεργοποιημένο το mod_rewrite, θα πρέπει να το δηλώσουμε εμείς. Για να ενεργοποιήσετε το mod_rewrite προσθέστε τον ακόλουθο κώδικα μέσα στο αρχείο htaccess στο server σας.

# Ενεργοποίηση του mod_rewrite
RewriteEngine on

Ενεργοποιήστε τους συμβολικούς δεσμούς

Ενεργοποιήστε τους συμβολικούς δεσμούς (symlinks) προσθέτοντας την ακόλουθη εντολή στο htaccess του καταλόγου που θέλετε να ενεργοποιηθούν τα symlinks.

ΠΡΟΣΟΧΗ : Για να λειτουργήσει η εντολή FollowSymLinks, η εντολή AllowOverride Options θα πρέπει να είναι ενεργοποιημένη μέσα από το κεντρικό αρχείο ρυθμίσεων του Apache.
# Ενεργοποίηση των συμβολικών δεσμών
Options +FollowSymLinks

Ενεργοποιήστε του AllowOvverride

Για τις εντολές που απαιτούν το δικαίωμα AllowOvverride για να λειτουργήσουν, όπως είναι για παράδειγμα η εντολή FollowSymLinks, οι εντολές που ακολουθούν θα πρέπει να γραφτούν στο κεντρικό αρχείο ρυθμίσεων του Apache.

Για λόγους επιδόσεων του Apache θα πρέπει να ενεργοποιήσετε αυτή την εντολή μόνο για τους καταλόγους που είναι απαραίτητο. Στο κομμάτι κώδικα που ακολουθεί, ενεργοποιούμε την εντολή AllowOverride μόνο για ένα συγκεκριμένο κατάλογο.

# Ενεργοποίηση του δικαιώματος AllowOvverride

    AllowOverride Options

Αλλάξτε όνομα στο .htaccess

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

ΠΡΟΣΟΧΗ : Οι ακόλουθες εντολές θα πρέπει να τοποθετηθούν στο κεντρικό αρχείο ρυθμίσεων του Apache, διαφορετικά δεν θα λειτουργήσουν.
# Αλλαγή ονόματος στο htaccess
AccessFileName ht.access
ΠΡΟΣΟΧΗ : Αν αλλάξετε το όνομα του .htaccess, θυμηθείτε να ενημερώσετε κάθε σχετική ρύθμιση. Για παράδειγμα, αν προστατεύεται τα .htaccess αρχεία σας μέσω της εντολής FIlesMAtch, θυμηθείτε να ενημερώσετε τα αρχεία.
# Προστασία του μετονομασμένου αρχείου .htaccess

    Order deny,allow
    Deny from all

Χρησιμοποιήστε τις ρυθμίσεις του httpd.conf

Εξοικονομήστε χρόνο και κόπο ορίζοντας γενικές ρυθμίσεις στο httpd.conf που μπορούν να χρησιμοποιηθούν σε πολλαπλούς Virtual Hosts. Στη συνέχεια αυτό που έχετε να κάνετε είναι να υποδείξετε στο αρχείο htaccess να κληρονομήσει τις ρυθμίσεις από το httpd.conf πληκτρολογώντας την ακόλουθη εντολή:

RewriteOptions Inherit

Βελτιώστε τις επιδόσεις του Apache μέσω του AllowOverride

Περιορίστε την αναζήτηση αρχείων σε καταλόγους ενός Virtual Host με την εντολή AllowOverride. Για παράδειγμα, αν η εντολή AllowOverride είναι ενεργή για το τρέχον Web Site, ο Apache θα πρέπει να αναζητήσει όλα τα αρχεία htaccess που μπορεί να υπάρχουν σε αυτό σαρώνοντας όλους τους καταλόγους. Για να κάνετε τον Apache ποιο αποδοτικό μπορείτε να χρησιμοποιήσετε την εντολή AllowOverride στο κεντρικό αρχείο htaccess ώστε να δώσετε στον Apache εντολές ώστε να μην μπει στη διαδικασία να σαρώσει όλους του υπό-καταλόγους.

ΠΡΟΣΟΧΗ : Αν δεν έχετε πρόσβαση στο αρχείο httpd.conf, μην χρησιμοποιήστε την ακόλουθη εντολή
# Αύξηση των επιδόσεων του Apache
AllowOverride None

Βελτιώστε τις επιδόσεις του Apache δηλώνοντας το encoding

Εμποδίστε ορισμένα 500 http σφάλματα δίνοντας στον Apache το προεπιλεγμένο encoding.

ΠΡΟΣΟΧΗ : Αντικαταστήστε το utf-8 στον κώδικα που ακολουθεί με το encoding που έχετε στο site σας.
# Ορίστε το προεπιλεγμένο character set
AddDefaultCharset utf-8

Βελτιώστε τις επιδώσεις του Apache εξοικονομώντας Bandwidth

Μπορείτε να βελτιώσετε την απόδοση του Apache, αν έχετε εγκατεστημένη την PHP προσθέτοντας τον κώδικα που ακολουθεί στο htaccess.

# Περιορίστε την κατανάλωση του bandwidth σε servers με PHP

    php_value zlib.output_compression 16386

Απενεργοποιήστε την υπογραφή του Server

Εδώ θα απενεργοποιήσουμε την ψηφιακή υπογραφή που πιστοποιεί τον Apache Server.

# Απενεργοποίηση της υπογραφής
ServerSignature Off

Ορισμός ζώνης ώρας στον server

Με τον κώδικα που ακολουθεί θα δώσουμε τις κατάλληλες εντολές στον sever να συγχρονιστεί χρονολογικά με μια ζώνη ώρας μιας συγκεκριμένης χώρας

# Ορισμός της ζώνης ώρας
SetEnv TZ Europe/Athens

Ορίστε μια διεύθυνση e-mail για το διαχειριστή του Server

Με τον ακόλουθο κώδικα θα ορίσουμε μια διεύθυνση email για τον διαχειριστή του Server.

# Ορισμός λογαριασμού e-mail για τον διαχειριστή
SetEnv SERVER_ADMIN [email protected]

Βελτιώστε την απόδοση μιας ιστοσελίδας ενεργοποιώντας την Cache

Χρησιμοποιώντας χρόνους σε δευτερόλεπτα, μπορείτε να υποδείξετε τη διάρκεια που θα παραμένουν τα αρχεία της σελίδας στην Cache του browser. Κατά αυτό τον τρόπο μπορείτε να εξοικονομήσετε χρόνο από το φόρτωμα της σελίδας καθώς δεν χρειάζεται να κατεβαίνουν κάθε φορά όλα τα αρχεία από το server.

# Ενεργοποιήστε την cache για εικόνες

    Header set Cache-Control "max-age=2592000"
# Ενεργοποιήστε την cache για κείμενο, css και javascript αρχεία

    Header set Cache-Control "max-age=604800"
# Ενεργοποιήστε την cache για αρχεία html και htm

    Header set Cache-Control "max-age=43200"
# Ελαχιστοποιήστε το χρόνο που θα παραμείνουν τα αρχεία
# στην Cache του browser κατά το χρόνο ανάπτυξης της ιστοσελίδας.

    Header set Cache-Control "max-age=5"
# Ρητή απενεργοποίηση της Cache για σενάρια και άλλα δυναμικά αρχεία

    Header unset Cache-Control
# Εναλλακτική μέθοδος για ενεργοποίηση της Cache
ExpiresActive On
ExpiresDefault A604800 # 1 Εβδομάδα
ExpiresByType image/x-icon A2419200 # 1 μήνας
ExpiresByType application/x-javascript A2419200 # 1 μήνας
ExpiresByType text/css A2419200 # 1 μήνας
ExpiresByType text/html A300 # 5 λεπτά
# Απενεργοποίηση της Cache για σενάρια και άλλα δυναμικά αρχεία

    ExpiresActive Off

Αντιστοιχία περιόδων σε δευτερόλεπτα

  • 300 δευτερόλεπτα = 5 λεπτά
  • 2700 δευτερόλεπτα = 45 λεπτά
  • 3600 δευτερόλεπτα = 1 ώρα
  • 54000 δευτερόλεπτα = 15 ώρες
  • 86400 δευτερόλεπτα = 1 ημέρα
  • 518400 δευτερόλεπτα = 6 ημέρες
  • 604800 δευτερόλεπτα = 1 ευδομάδα
  • 1814400 δευτερόλεπτα = 3 ευδομάδες
  • 2419200 δευτερόλεπτα = 1 μήνας
  • 26611200 δευτερόλεπτα = 11 μήνες
  • 29030400 δευτερόλεπτα = 1 χρόνος

Ορισμός προ επιλεγμένης γλώσσας και σύνολο χαρακτήρων

Με το ακόλουθο απόσπασμα κώδικα μπορείτε εύκολα να ορίσετε την προεπιλεγμένη γλώσσα για σελίδες που διανέμονται από τον server σας.

# Ορισμός γλώσσας
DefaultLanguage el-GR

Παρομοίως μπορούμε να αλλάξουμε και την προεπιλεγμένη κωδικοποίηση των εγγραφών που διανμένονται από το server.

# Ορισμός συνόλου χαρακτήρων
AddDefaultCharset UTF-8

Ορισμός συγκεκριμένων/επιπλέον MIME types

# Προσθήκη διάφορων mime types
AddType application/x-shockwave-flash .swf
AddType video/x-flv .flv
AddType image/x-icon .ico

Αποστολή συνόλων χαρακτήρων και άλλους headers χωρίς meta tags

# Αποστολή της γλώσσας του εγγράφου και το
# προεπιλεγμένο σύνολο χαρακτήρων.
AddDefaultCharset UTF-8
DefaultLanguage el-GR

Περιορίστε τα ερωτήματα στο server μόνο στα GET και PUT

# Περιορισμός των μεθόδων αποστολής δεδομένων στο server
Options -ExecCGI -Indexes -All
RewriteEngine on
RewriteCond %{REQUEST_METHOD} ^{TRACE|TRACK|OPTIONS|HEAD) RewriteRule .* - [F]

Επιλεκτική επεξεργασία βάση της μεθόδου ερωτήματος στο server

# Επεξεργασία αρχείων βάση της μεθόδου αποστολής αιτήματος
Script PUT /cgi-bin/upload.cgi
Script GET /cgi-bin/download.cgi

Εκτελέστε διάφορους τύπους αρχείων μέσω του CGI

Για τις ειδικές περιπτώσεις που κάποια συγκεκριμένα αρχεία χρειάζονται επιπλέον επεξεργασία πριν εμφανιστούν στον τελικό χρήστη μπορείτε να χρησιμοποιήσετε τις ακόλουθες εντολές

# Επεξεργασία όλων τον png αρχείων με το σενάριο png-script.cgi
Action image/png /cgi-bin/png-script.cgi

Αποτροπή της πρόσβαση στο .htaccess

Προσθέστε τον ακόλουθο κώδικα στο αρχείο htaccess για να έχετε ακόμα ένα επίπεδο ασφαλείας. Κάθε προσπάθεια προσπέλασης του αρχείου θα επιστρέψει ένα σφάλμα 403. Φυσικά, το πρώτο επίπεδο ασφαλείας που πρέπει να έχετε είναι να έχετε ήδη ορίσει τα δικαιώματα του αρχείου σε 644.

# Προστασία του .htaccess

    order allow, deny
    deny from all

Αποτροπή τησ πρόσβαση σε συγκεκριμένο αρχείο

Για να περιορίσετε την πρόσβαση σε συγκεκριμένο ένα αρχείο, προσθέστε τον ακόλουθο κώδικα, και αντικαταστήστε το όνομα αρχείο «secretfile.jpg» με το δικό σας όνομα αρχείου.

# Προστασία ενός συγκεκριμένου αρχείου
<files secretfile.jpg>
    order allow, deny
    deny from all
</files>

Αποτροπή της πρόσβαση σε συγκεκριμένους τύπους αρχείων

Για να περιορίσετε την πρόσβαση σε ένα σύνολο τύπων αρχείων, χρησιμοποιήστε τον κώδικα που ακολουθεί, προσθέτοντας τους τύπους αρχείων που σας ενδιαφέρει να προστατεύσετε.

<FilesMatch "\.(htaccess|htpasswd|ini|phps|fla|psd|log|sh)$">
    order allow, deny
    deny from all
</filesmatch>

Αποτροπή την μη εξουσιοδοτημένη περιήγηση σε καταλόγους

Αποτρέψετε την μη εξουσιοδοτημένη πρόσβαση σε καταλόγους, δίνοντας οδηγίες στο server να επιστρέψει ένα μήνυμα «— Forbidden – Authorization Required».

Για παράδειγμα, αν στην ιστοσελίδα σας δεν έχετε βάλει σε ένα κατάλογο, το προεπιλεγμένο αρχείο index.html, όλα τα περιεχόμενα του καταλόγου αυτού θα είναι προσβάσιμα από όλους. Για να αποτρέψετε αυτή την ενέργεια χρησιμοποιήστε της ακόλουθες εντολές.

# Απενεργοποιήστε την περιήγηση καταλόγου
Options All -Indexes

Αντίστροφα, για να ενεργοποιήσετε την περιήγηση βάλτε τις ακόλουθες εντολές:

# Απενεργοποιήστε την περιήγηση καταλόγου
Options All +Indexes

Παρομοίως, ο ακόλουθος κανόνας θα εμποδίσει το server να προβάλει τα περιεχόμενα των καταλόγων:

# Εμποδίζει την προβολή των αρχείων
IndexIgnore *

Και τέλος, η εντολή IndexIngore μπορεί να χρησιμοποιηθεί για να εμποδίσει την προβολή συγκεκριμένων τύπων αρχείων:

# Απενεργοποιήστε την προβολή συγκεκριμένων τύπων αρχείων
IndexIgnore *.wmv *.mp4 *.avi

Αλλάξτε το προεπιλεγμένο αρχείο καταλόγου για σελίδες

Όταν πληκτρολογούμε στη γραμμή διευθύνσεων του browser μια διεύθυνση, στο τέλος δεν γράφουμε κάποιο όνομα αρχείου (Για παράδειγμα http://www.somesite.ext/). Ίσως να έχετε αναρωτηθεί, πως ο server ξέρει ποιο αρχείο της σελίδας πρέπει να στείλει, αφού δεν του λέμε ποιο αρχείο θέλουμε. Για το λόγο αυτό, ο server είναι ρυθμισμένος να ψάχνει για ένα αρχείο, συνήθως με το όνομα index.html. Στην περίπτωση που θέλουμε να έχουμε ένα διαφορετικό αρχείο από το index.html τι κάνουμε όμως;

Οι ακόλουθες εντολές, ενημερώνουν το διακομιστή διαδικτύου να ψάξει και να παραδώσει το αρχείο «myIndexFile.html» ως το προεπιλεγμένο αρχείο καταλόγου.

Αυτός ο κανόνας θα πρέπει να υπάρχει στο αρχείο htaccess του κεντρικού καταλόγου της σελίδας που θέλετε να αντικαταστήσετε το προεπιλεγμένο αρχείο «index.html»

# Αποστολή ενός διαφορετικού αρχείου στη θέση του index
DirectoryIndex myIndexFile.html

Ο ακόλουθος κανόνας είναι παρόμοιος, με τη διαφορά ότι σε αυτή την περίπτωση ο διακομιστής θα σαρώσει όλο τον κατάλογο για να εντοπίσει ένα από τα αρχεία της λίστας με τη σειρά που είναι περασμένα.

Η λίστα διαβάζετε από τα αριστερά προς τα δεξιά.

# Αποστολή του πρώτου διαθέσιμου αρχείου
DirectoryIndex filename.html index.cgi index.pl default.htm

Μεταμφίεση των επεκτάσεων των αρχείων

Για να βελτιώσετε την ασφάλεια, μπορείτε να μεταμφιέσετε την επέκταση των αρχείων της γλώσσας σεναρίων σε ότι θέλετε, ώστε ένας επιτιθέμενος να μην γνωρίζει με τι γλώσσα έχει να κάνει. Για παράδειγμα μπορείτε να αντικαταστήσετε την κατάληξη .php σε .msc, προσθέτοντας τις ακόλουθες γραμμές κώδικα στο αρχείο htaccess.

# Μεταμφίεση των αρχείων php σε αρχεία msc
AddType application/x-httpd-php .msc

# Μεταμφίεση των αρχείων sgi σε αρχεία msg
AddType application/x-httpd-cgi .msg

Περιορίστε την πρόσβαση σε τοπικό δίκτυο (LAN)

# Περιορισμός της πρόσβασης στο τοπικό δίκτυο μόνο
<Limit GET POST PUT>
    order deny,allow
    deny from all
    allow from 192.168.0.0/33
</Limit>

Ασφαλίστε του καταλόγους με IP διευθύνσεις ή/και Domain names

Στο ακόλουθο παράδειγμα, όλες οι IP διευθύνσεις έχουν δικαίωμα προσπέλασης εκτός της IP 12.45.67.80 και το domain.com:

# Πρόσβαση σε όλους εκτός όμως των IP 12.45.67.80 και του domain.com
<Limit GET POST PUT>
    order allow,deny
    allow from all
    deny from 12.45.67.80
    deny from .*domain\.com.*
</Limit>

Στο παράδειγμα που ακολουθεί, απαγορεύεται η προσπέλαση από όλες τις IP εκτός της IP 12.45.67.80 και το domain.com:

# Πρόσβαση σε όλους εκτός όμως των IP 12.45.67.80 και του domain.com
<Limit GET POST PUT>
    order deny,allow
    deny from all
    allow from 12.45.67.80
    allow from .*domain\.com.*
</Limit>

Με το παράδειγμα που ακολουθεί μπορούμε να απαγορεύσουμε την πρόσβαση σε ανεπιθύμητους επισκέπτες, βάση του domain που κάνει την παραπομπή σε εμάς.

Επίσης μπορούμε να περιορίσουμε την κατανάλωση bandwidth απαγορεύοντας την χρήση συγκεκριμένων τύπων αρχείων εκτός της σελίδας μας, όπως είναι για παράδειγμα .jpg, .zip, .mp3, .mpg για συγκεκριμένα domain.

Αυτό που έχετε να κάνετε είναι να αντικαταστήσετε τα scumbag και wormhole με τα domain στα οποία δεν θέλετε να στέλνετε περιεχόμενο:

# Απαγορέψτε την προσπέλαση της ιστοσελίδας σας από χρήστες που έρχονται από σελίδες που δεν θέλετε
<IfModule mod_rewrite.c>
    RewriteEngne On
    RewriteCond %{HTTP_REFERER} scumbag\.com [NC, OR]
    RewriteCond %{HTTP_REFERER} wormhole\.com [NC, OR]
    RewriteRule .* - [F]
</IfModule>

Αποτρέψτε ή επιτρέψτε την πρόσβαση σε μια σελίδα από ένα εύρος διευθύνσεων IP

υπάρχουν διάφοροι αποδοτικοί τρόποι να διαχειριστείτε ένα σύνολο διευθύνσεων IP μέσω των αρχείων htaccess. Η πρώτη μέθοδος διαχειρίζεται τις IP μέσω των αριθμών CIDR. Αυτή η μέθοδος είναι καλή για να μπλοκάρετε για παράδειγμα μεγάλους spammers, όπως για παράδειγμα το RIPE, Optinet και άλλους.

# Αποτροπή πρόσβασης σε ένα εύρος διευθύνσεων IP με CIDR
<Limit GET POST PUT>
    Order allow, deny
    allow from all
    deny from 10.1.0.0/16
    deny from 80.0.0/8
<Limit>

Παρομοίως μπορείτε να επιτρέψετε την πρόσβαση από ένα εύρος διευθύνσεων IP:

# Επιτρέψτε την πρόσβαση σε ένα εύρος διευθύνσεων IP με CIDR
<Limit GET POST PUT>
    Order deny, allow
    deny from all
    allow from 10.1.0.0/16
    allow from 80.0.0/8
<Limit>

Ακόμα ένας αποτελεσματικός τρόπος για να αποτρέψετε την πρόσβαση από ένα εύρος διευθύνσεων IP είναι να αφαιρέσετε ψηφία της διεύθυνσης IP μέχρι του αριθμού που θέλετε.

Καθώς οι διευθύνσεις IP διαβάζονται από τα αριστερά προς τα δεξιά, κάθε πεδίο αναπαριστά ένα όλο και ποιο συγκεκριμένο εύρος διευθύνσεων.

Για παράδειγμα, η τυχαία επιλεγμένη διεύθυνση 99.88.77.66 μπορεί να προσδιορίζει μοναδικά μια διεύθυνση διαδικτύου. Τώρα, αν αφαιρέσουμε τα δυο τελευταία ψηφία «66» από την διεύθυνση, θα αναπαριστά μια οποιαδήποτε διεύθυνση από την διεύθυνση 99.88.77.1 μέχρι τη διεύθυνση 99.88.77.255

# Αποτροπή πρόσβασης σε μια ιστοσελίδα από ένα εύρος διευθύνσεων IP
<Limit GET POST PUT>
    Order allow, deny
    allow from all
    deny from 99.88.*.*
<Limit>

Αποτρέψτε ή επιτρέψτε την πρόσβαση σε πολλαπλές IP διευθύνσεις σε μια γραμμή

Μπορείτε αν θέλετε να περιορίσετε το χώρο που καταναλώνουν οι εντολές στο αρχείο htaccess για τα δικαιώματα πρόσβασης σε μια ιστοσελίδα χρησιμοποιώντας τις εντολές allow και deny όπως στο παράδειγμα

    # Αποτρέψτε την πρόσβαση από δυο μοναδικές IP
    deny from 99.88.77.66 11.22.33.44

    # Αποτρέψτε την πρόσβαση από τρις περιοχές διευθύνσεων IP
    deny from 99.88 99.88.77 11.22.33

Διάφοροι κανόνες αποτροπής πρόσβασης από διευθύνσεις IP

Εδώ θα βρείτε διάφορους κανόνες για να αποτρέψετε ή να επιτρέψετε την πρόσβαση από συγκεκριμένες διευθύνσεις IP.

# Αποτροπή πρόσβασης σε μερικές διευθύνσεις IP μέσω των τιμών δικτύου και της μάσκας δικτύου.
deny from 99.1.0.0/255.255.0.0
# Αποτροπή πρόσβασης από συγκεκριμένη διεύθυνση IP
deny from 99.88.77.66
# Αποτροπή πρόσβασης του ονόματος χώρου domain.com αλλά να επιτρέπετε η πρόσβαση από το sub.domain.com
order deny, allow
deny from domain.com
allow from sub.domain.com

Περισσότερα για τον CorfuGmr

CorfuGmr

Ονομάζομαι Νίκος και ασχολούμαι με το internet και την κατασκευή ιστοσελίδων από το 1998. Σήμερα, μετά από 12 χρόνια γεμάτα με ενημέρωση, εκπαίδευση και εξάσκηση έχω ανεβάσει σε ένα άλλο επίπεδο τις γνώσεις μου και τις τεχνικές μου. Στα άρθρα μου προσπαθώ να σας δείξω τα μικρά, αλλά σημαντικά πράγματα που με έχουν ανεβάσει σε αυτό το επίπεδο.








Σχόλια



5 Απριλίου 2011

Thanks, θα βοηθησει πολυ στο συντομο μελλον




6 Απριλίου 2011

Έχει και συνέχεια ! 🙂 Απλά κατά λάθος το δημοσίευσα χωρίς να έχει τελειώσει. Μείνετε συντονισμένοι για να δείτε τη συνέχεια ! 😉


Συγνώμη, τα σχόλια για αυτό το άρθρο είναι κλειστά.



^
Top
css.php