Ασφάλεια στο Joomla! 3ο Μέρος : Χρήση της .htaccess

Γράφτηκε από τον Σάββατο, 28 Μαρτίου 2015

Μέσω αυτού του αρχείου μπορούμε να δώσουμε στον apacheserver κάποιους περιορισμούς έτσι ώστε να αποφεύγονται αρκετές αδυναμίες όχι τόσο από το joomla αλλά από τα extensions του τα οποία πολλές φορές προκαλούν προβλήματα ασφάλειας. Χωρίζοντας τις εντολές μπορούμε να τις κατηγοριοποιήσουμε ως εξής:

Εντολές μπλοκαρίσματος του πυρήνα του joomla:

Όλες οι εφαρμογές του joomlaζητούν πρόσβαση μέσω της index.php(στην έκδοση 1.5 μπορεί να γίνει και μέσω του index2.php). Οποιαδήποτε άλλη προσπάθεια απευθείας πρόσβασης θα πρέπει να θεωρείται προσπάθεια Hacking. Καμία εφαρμογή (ή σχεδόν καμία) δεν χρησιμοποιεί απευθείας πρόσβαση σε φάκελο εκτός της διόδου του index.php. Μια καλή ιδέα θα ήταν να μπλοκάρουμε με μια σειρά εντολών στην .htaccess την απευθείας πρόσβαση των περισσότερων αρχείων (ini, xml & php). Αυτό θα μπορούσε να γίνει με τις παρακάτω εντολές:

# Deny access to php, xml and ini files

# within components and plugins directories

RewriteCond %{REQUEST_FILENAME} -f

RewriteCond %{REQUEST_URI} \.php|\.ini|\.xml [NC]

RewriteCond %{REQUEST_URI} \/components\/ [OR]

RewriteCond %{REQUEST_URI} ^\/includes\/|^\/administrator\/includes\/ [OR]

RewriteCond %{REQUEST_URI} \/language\/ [OR]

RewriteCond %{REQUEST_URI} \/libraries\/ [OR]

RewriteCond %{REQUEST_URI} \/modules\/ [OR]

RewriteCond %{REQUEST_URI} \/plugins\/ [OR]

RewriteCond %{REQUEST_URI} \/templates\/ [OR]

RewriteCond %{REQUEST_URI} \/xmlrpc\/

RewriteRule ^(.*)$ index.php [R=404,L]

Έτσι απαγορεύουμε την απευθείας είσοδο οποιαδήποτε κακόβουλης εφαρμογής που θα προσπαθήσει να εισέλθει στους κλασσικούς φακέλους του joomla

Απαγόρευση του SQLinjection:

Όπως γνωρίζουμε το sql injectionδεν λειτουργεί στο joomla ιδιαίτερα σε αυτούς που κάνουν χρήση μόνο της βάσης δεδομένων του. Παρόλα αυτά αρκετά extensionsμπορούν να προκαλέσουν πρόβλημα. Για μεγαλύτερη σιγουριά προσθέτουμε αυτό το κομμάτι κώδικα στο .htaccess

# Prevent most common SQL-Injections

RewriteCond %{query_string} concat.*\( [NC,OR]

RewriteCond %{query_string} union.*select.*\( [NC,OR]

RewriteCond %{query_string} union.*all.*select [NC]

RewriteRule ^(.*)$ index.php [F,L]

Με αυτόν τον τρόπο αποκλείεις τις πιο γνωστές εντολές που μπορούν να κάνουν sql injection

Απαγόρευση των hijack tools :

Οποιοσδήποτε επισκέπτεται το site μας ονομάζεται user-agent. Για τους συνηθισμένους επισκέπτες αυτό περιλαμβάνει την αναγνώριση του browser (Firefox, Explorer, Chrome). Για τα bots (δηλαδή της μηχανές που βοηθούν στην αναγνώριση της σελίδας μας από τις μηχανές αναζήτησης) υπάρχει ειδική αναγνώριση. Τέλος για τα hijack tools (δηλαδή τα εργαλεία τα οποία δείχνουν τις αδυναμίες της σελίδας μας) όπως το perlκαι το wgetέχουν μοναδική ταυτοποίηση και μπορούν με λίγες γραμμές κώδικα στην .htaccess να μπλοκαριστούν:

# Block most common hacking tools

SetEnvIf user-agent "Indy Library" stayout=1

SetEnvIf user-agent "libwww-perl" stayout=1

SetEnvIf user-agent "Wget" stayout=1

deny from env=stayout

 

Απαγόρευση συγκεκριμένων εντολών (exploits):

Σε περίπτωση που θέλουμε να μπλοκάρουμε συγκεκριμένες εντολές που προκαλούν αδυναμίες και προβλήματα στη σελίδα μας (exploits) εδώ παρατίθενται οι πιο γνωστές:

# Block out any script trying to set a mosConfig value through the URL

RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|=) [OR]

# Block out any script trying to base64_encode crap to send via URL

RewriteCond %{QUERY_STRING} base64_encode.*(.*) [OR]

# Block out any script that includes a < script> tag in URL

RewriteCond %{QUERY_STRING} (<|<).*script.*(>|>) [NC,OR]

# Block out any script trying to set a PHP GLOBALS variable via URL

RewriteCond %{QUERY_STRING} GLOBALS(=|[|%[0-9A-Z]{0,2}) [OR]

# Block out any script trying to modify a _REQUEST variable via URL

RewriteCond %{QUERY_STRING} _REQUEST(=|[|%[0-9A-Z]{0,2}) [OR]

# Block out any script that tries to set CONFIG_EXT (com_extcal2 issue)

RewriteCond %{QUERY_STRING} CONFIG_EXT([| |[).*= [NC,OR]

# Block out any script that tries to set sbp or sb_authorname via URL (simpleboard)

RewriteCond %{QUERY_STRING} sbp(=| |=) [OR]

RewriteCond %{QUERY_STRING} sb_authorname(=| |=)

# Send all blocked request to homepage with 403 Forbidden error!

RewriteRule ^(.*)$ index.php [F,L]