Πώς να προστατέψουμε το Website μας μέσω του .htaccess – Part 2

 

Σε συνέχεια του προηγούμενου άρθρου σχετικά με την παραμετροποίηση του htaccess με τέτοιον τρόπο ώστε να προστατέψουμε το site μας κατά το δυνατόν,  παρακάτω θα βρείτε ορισμένες επιπλέον προσθήκες που μπορούν να εισαχθούν και να σας βοηθήσουν σε αυτήν την κατεύθυνση. Σε κάθε περίπτωση, βέβαια, θα πρέπει οι τροποποιήσεις να πραγματοποιούνται από τον υπεύθυνο προγραμματιστή, καθώς είναι πιθανό να προκύψουν προβλήματα με την ιστοσελίδα και την ομαλή λειτουργία της (πχ 500 internal server error, 403 forbidden, 404 not found κλπ).

  1. Expire headers

Με την ενεργοποίηση των expire headers ορίζουμε, για το κάθε request που πρόκειται να πραγματοποιηθεί, εάν τα δεδομένα θα ληφθούν από τον server ή από την cache του browser. Με τον τρόπο αυτό, έχουμε αποθηκευμένα δεδομένα στον browser του επισκέπτη, συνεπώς μειώνουμε τα requests προς τον server (και την ιστοσελίδα) και επιπλέον, μειώνουμε τον όγκο των δεδομένων που θα σταλούν από την ιστοσελίδα προς τον browser του εκάστοτε επισκέπτη.

 

<ifModule mod_expires.c>

ExpiresActive On

ExpiresDefault “access plus 5 seconds”

ExpiresByType image/x-icon “access plus 2592000 seconds”

ExpiresByType image/jpeg “access plus 2592000 seconds”

ExpiresByType image/png “access plus 2592000 seconds”

ExpiresByType image/gif “access plus 2592000 seconds”

ExpiresByType application/x-shockwave-flash “access plus 2592000 seconds”

ExpiresByType text/css “access plus 604800 seconds”

ExpiresByType text/javascript “access plus 216000 seconds”

ExpiresByType application/javascript “access plus 216000 seconds”

ExpiresByType application/x-javascript “access plus 216000 seconds”

ExpiresByType text/html “access plus 600 seconds”

ExpiresByType application/xhtml+xml “access plus 600 seconds”

</ifModule>

 

 

  1. Enable keep-alive

Ουσιαστικά με την ενεργοποίηση του keep-alive χρησιμοποιούμε το ήδη ενεργό connection προς τον server ώστε να μειωθεί ο χρόνος δημιουργίας νέου. Μόλις επιλέξουμε μια ιστοσελίδα να φορτώσει στον browser μας, πρώτα ο browser επικοινωνεί με τον server, ώστε να δημιουργηθεί ένα connection και στη συνέχεια ζητάει τα δεδομένα. Προκειμένου να μην “χάνουμε” χρόνο περιμένοντας να ολοκληρωθεί το connection σε κάθε μας request, ενεργοποιούμε το keep-alive, οπότε στο ήδη ενεργό connection που έχουμε με τον server, ζητάμε και τα υπόλοιπα δεδομένα κατά την περιήγησή μας.

 

<ifModule mod_headers.c>

Header set Connection keep-alive

</ifModule>

 

 

  1. Block access to log files

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

 

<Files ~ “\.log$”>

Order allow,deny

Deny from all

</Files>

 

 

  1. htaccess protection

Προστασία του αρχείου htaccess, ώστε να μην μπορέσει κανένας να το παραμετροποιήσει (με κακόβουλο τρόπο) ή να το κατεβάσει και να το αναγνώσει.

 

<Files ~ “^.*\.([Hh][Tt][Aa])”>

order allow,deny

deny from all

satisfy all

</Files>

 

 

  1. Block access to hidden files and directories

Προστασία των κρυφών αρχείων και φακέλων, ώστε να μην μπορέσει κανένας να τα αναγνώσει. Καθώς είναι κρυφά αρχεία, έχουν πολύ συγκεκριμένο λόγο που είναι κρυφά (σε αυτά δεν πρέπει να έχει κανένας πρόσβαση). Ένα παράδειγμα κρυφού αρχείου, είναι το αρχείο .htaccess και το αρχείο .user.ini (το configuration της php για το hosting μας).

 

<IfModule mod_rewrite.c>

RewriteCond %{SCRIPT_FILENAME} -d [OR]

RewriteCond %{SCRIPT_FILENAME} -f

RewriteRule “(^|/)\.” – [F]

</IfModule>

 

 

  1. Block access to potential sensitive files

Προστασία των ευαίσθητων αρχείων, ώστε να μην μπορέσει κανένας να τα αναγνώσει ή να τα προσπελάσει. Καθώς είναι “ευαίσθητα” αρχεία, περιέχουν δεδομένα που δεν πρέπει να εμφανιστούν. Όλα τα αρχεία με κατάληξη sh, είναι shell scripts, τα sql είναι αρχεία με δεδομένα της βάσης δεδομένων μας, conf είναι configuration αρχεία, log είναι log files κλπ. Αυτά τα αρχεία θεωρούνται ευαίσθητα και δεν πρέπει να έχει πρόσβαση, κανένας πέρα από τον διαχειριστή και τον προγραμματιστή. Αυτά τα αρχεία, δεν πρέπει να μπορούν να γίνουν download ή να εμφανιστούν στον browser.

 

<FilesMatch “(^#.*#|\.(bak|conf|dist|fla|in[ci]|log|psd|sh|sql|sw[op])|~)$”>

<IfModule mod_authz_core.c>

Require all denied

</IfModule>

</FilesMatch>

 

Τελευταίο και σημαντικότερο:

 

  1. Ενεργοποίηση gzip compression

Με την ενεργοποίηση του gzip, συμπιέζεται το περιεχόμενο που αποστέλλεται από τον server προς τον εκάστοτε browser, με αποτέλεσμα η πληροφορία και τα δεδομένα να απαιτούν λιγότερο χρόνο και να έχουν μικρότερο όγκο. Το gzip εφαρμόζεται αφού ολοκληρωθεί η εκτέλεση του κώδικα από την πλευρά του web server, αλλά πριν αποσταλούν τα δεδομένα από τον server προς τον browser του επισκέπτη.

 

<IfModule mod_deflate.c>

# Compress HTML, CSS, JavaScript, Text, XML and fonts

AddOutputFilterByType DEFLATE application/javascript

AddOutputFilterByType DEFLATE application/rss+xml

AddOutputFilterByType DEFLATE application/vnd.ms-fontobject

AddOutputFilterByType DEFLATE application/x-font

AddOutputFilterByType DEFLATE application/x-font-opentype

AddOutputFilterByType DEFLATE application/x-font-otf

AddOutputFilterByType DEFLATE application/x-font-truetype

AddOutputFilterByType DEFLATE application/x-font-ttf

AddOutputFilterByType DEFLATE application/x-javascript

AddOutputFilterByType DEFLATE application/xhtml+xml

AddOutputFilterByType DEFLATE application/xml

AddOutputFilterByType DEFLATE font/opentype

AddOutputFilterByType DEFLATE font/otf

AddOutputFilterByType DEFLATE font/ttf

AddOutputFilterByType DEFLATE image/svg+xml

AddOutputFilterByType DEFLATE image/x-icon

AddOutputFilterByType DEFLATE text/css

AddOutputFilterByType DEFLATE text/html

AddOutputFilterByType DEFLATE text/javascript

AddOutputFilterByType DEFLATE text/plain

AddOutputFilterByType DEFLATE text/xml

 

# Remove browser bugs (only needed for really old browsers)

BrowserMatch ^Mozilla/4 gzip-only-text/html

BrowserMatch ^Mozilla/4\.0[678] no-gzip

BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

Header append Vary User-Agent

</IfModule>