Χθες αρχίσαμε μια σειρά οδηγών για το καταπληκτικό εργαλείο .htaccess. Για όσους δεν διάβασαν το πρώτο μέρος, το .htaccess είναι ένα μικρό αρχειάκι ρύθμισης του Apache web server. Σήμερα θα δούμε πως μπορούμε να το επεξεργαστούμε για να βελτιώσουμε την ασφάλεια σε μια εγκατάσταση WordPress.
Θα αναφέρουμε για άλλη μια φορά τη σημαντικότητα της επεξεργασίας όλων των αρχείων (.php, .sql) που βρίσκονται αποθηκευμένα σε περιβάλλον Linux, με τον editor notepad ++ και όχι με το κλασικό notepad των Windows.
Για να αρχίσουμε με την επεξεργασία του αρχείο θα πρέπει να το κατεβάσετε στον υπολογιστή σας. Αμέσως μετά, και μετά την εγκατάσταση του Notepad plus plus, ένα δεξί κλικ πάνω του θα σας δώσει την επιλογή: Επεξεργασία με Notepad.
Πριν προχωρήσουμε θα πρέπει να κρατήσετε ένα backup στο αρχείο που κατεβάσατε.
Μετά την επεξεργασία του αρχείου υπάρχουν δύο διαφορετικοί τρόποι αποθήκευσης.
Ο ευκολότερος είναι χρησιμοποιώντας το εικονίδιο της δισκέτας
που βρίσκεται στην πάνω αριστερή γωνία της εφαρμογής Notepad++.
Ο δεύτερος τρόπος θα σας χρειαστεί αν θέλετε να αποθηκεύσετε το .htaccess σε περιβάλλον Windows με το save as, ή αποθήκευση ως.
Επειδή τα Windows θεωρούν ότι το .htaccess είναι η κατάληξη τύπου αρχείου και ότι της λείπει το όνομα θα σας ζητήσουν να δώσετε κάποιο όνομα στο αρχείο σας. Π.χ. όνομα.htaccess. Μπορείτε να το αποφύγετε χρησιμοποιώντας τα εισαγωγικά.
Έτσι δοκιμάστε να αποθηκεύσετε το αρχείο σας σαν “.htaccess”
Μετά από τα βασικά ας δούμε πως μπορούμε να ασφαλίσουμε το WordPress site μας.
Ας αρχίσουμε προστατεύοντας το ίδιο το .htaccess Την ίδια εντολή μπορείτε να την χρησιμοποιήσετε για να απαγορέψετε την πρόσβαση σε οποιοδήποτε αρχείο επιθυμείτε, αλλάζοντας απλά το όνομα του αρχείου.
<Files .htaccess> order allow,deny deny from all </Files>
Αποκλείστε την πρόσβαση σε πολλά αρχεία μαζί (μπορείτε να προσθέσετε περισσότερα αν χρειάζεστε)
<FilesMatch ".(htaccess|htpasswd|ini|phps|fla|psd|log|sh)$"> Order Allow,Deny Deny from all </FilesMatch>
Ας αποκλείσουμε την πρόσβαση περιήγησης στους φακέλους του site
Options All -Indexes
- Για να την επιτρέψουμε αντί για – χρησιμοποιούμε το +
Δηλαδή:
Options All +Indexes
Φυσικά αφού μιλάμε για ασφάλεια ξεχάστε την παραπάνω εντολή
Αποκλείστε μια IP
<Limit GET POST> order allow,deny deny from xxx.xxx.xxx.xxx allow from all </Limit>
Ας κλείσουμε ορισμένα κενά τώρα
Αποκλείστε την αποστολή κάθε script με κωδικοποιημένες εντολές base64_encode
RewriteCond %{QUERY_STRING} base64_encode.*(.*) [OR]
Αποκλείστε τη μέθοδο proc/self/environ
RewriteCond %{QUERY_STRING} proc/self/environ [OR]
Προστατευτείτε από κάθε script που προσπαθεί να αλλάξει τις τιμές των php globals
RewriteCond %{QUERY_STRING} GLOBALS(=|[|\%[0-9A-Z]{0,2}) [OR]
Προστασία από κάθε script που προσπαθεί να αλλάξει τιμή στο mosConfig
RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|\%3D) [OR]
Αποκλείστε κάθε URL που περιέχει το tag <script>
RewriteCond %{QUERY_STRING} (<|%3C).*script.*(>|%3E) [NC,OR]
Αποκλείστε απόπειρες αλλαγής των μεταβλητών _request
RewriteCond %{QUERY_STRING} _REQUEST(=|[|\%[0-9A-Z]{0,2})
Απενεργοποίηση των ping στο xmlrpc.php
<Files xmlrpc.php> order deny,allow deny from all </Files>
Αποκλεισμός πρόσβασης στο debug.log
<Files debug.log> order deny,allow deny from all </Files>
Αποκλεισμός ορισμένων SpyBot (μπορείτε να προσθέσετε όσα θέλετε)
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTP_USER_AGENT} ^SquigglebotBot [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^SurveyBot [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^VoidEYE [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^YottaShopping_Bot [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^webcrawl\.net [NC] RewriteRule ^(.*)$ - [F,L] </IfModule>
Απαγόρευση εκτέλεσης διάφορων scripts
AddHandler cgi-script .php .pl .py .jsp .asp .htm .shtml .sh .cgi Options -ExecCGI
Απενεργοποίηση του Trace Track
RewriteEngine On RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK) RewriteRule .* - [F]
Αποκλεισμός συνδέσεων με proxy που προσπαθούν να σχολιάσουν
RewriteCond %{REQUEST_METHOD} =POST RewriteCond %{HTTP:VIA}%{HTTP:FORWARDED}%{HTTP:USERAGENT_VIA}%{HTTP:X_FORWARDED_FOR}%{HTTP:PROXY_CONNECTION} !^$ [OR] RewriteCond %{HTTP:XPROXY_CONNECTION}%{HTTP:HTTP_PC_REMOTE_ADDR}%{HTTP:HTTP_CLIENT_IP} !^$ RewriteCond %{REQUEST_URI} !^/(wp-login.php|wp-admin/|wp-content/plugins/|wp-includes/).* [NC] RewriteRule .* - [F,NS,L]
Απενεργοποίηση με redirect σε 403 “κακών” χαρακτήρων και γνωστών κατασκοπευτικών exploit
<IfModule mod_alias.c> RedirectMatch 403 \, RedirectMatch 403 \: RedirectMatch 403 \; RedirectMatch 403 \= RedirectMatch 403 \@ RedirectMatch 403 \[ RedirectMatch 403 \] RedirectMatch 403 \^ RedirectMatch 403 \` RedirectMatch 403 \{ RedirectMatch 403 \} RedirectMatch 403 \~ RedirectMatch 403 \" RedirectMatch 403 \$ RedirectMatch 403 \< RedirectMatch 403 \> RedirectMatch 403 \| RedirectMatch 403 \.\. RedirectMatch 403 \%0 RedirectMatch 403 \%A RedirectMatch 403 \%B RedirectMatch 403 \%C RedirectMatch 403 \%D RedirectMatch 403 \%E RedirectMatch 403 \%F RedirectMatch 403 \%22 RedirectMatch 403 \%27 RedirectMatch 403 \%28 RedirectMatch 403 \%29 RedirectMatch 403 \%3C RedirectMatch 403 \%3E RedirectMatch 403 \%3F RedirectMatch 403 \%5B RedirectMatch 403 \%5C RedirectMatch 403 \%5D RedirectMatch 403 \%7B RedirectMatch 403 \%7C RedirectMatch 403 \%7D # COMMON PATTERNS Redirectmatch 403 \_vpi RedirectMatch 403 \.inc Redirectmatch 403 xAou6 Redirectmatch 403 db\_name Redirectmatch 403 select\( Redirectmatch 403 convert\( Redirectmatch 403 \/query\/ RedirectMatch 403 ImpEvData Redirectmatch 403 \.XMLHTTP Redirectmatch 403 proxydeny RedirectMatch 403 function\. Redirectmatch 403 remoteFile Redirectmatch 403 servername Redirectmatch 403 \&rptmode\= Redirectmatch 403 sys\_cpanel RedirectMatch 403 db\_connect RedirectMatch 403 doeditconfig RedirectMatch 403 check\_proxy Redirectmatch 403 system\_user Redirectmatch 403 \/\(null\)\/ Redirectmatch 403 clientrequest Redirectmatch 403 option\_value RedirectMatch 403 ref\.outcontrol # Συγκεκριμένα Exploits RedirectMatch 403 errors\. RedirectMatch 403 config\. RedirectMatch 403 include\. RedirectMatch 403 display\. RedirectMatch 403 register\. Redirectmatch 403 password\. RedirectMatch 403 maincore\. RedirectMatch 403 authorize\. Redirectmatch 403 macromates\. RedirectMatch 403 head\_auth\. RedirectMatch 403 submit\_links\. RedirectMatch 403 change\_action\. Redirectmatch 403 com\_facileforms\/ RedirectMatch 403 admin\_db\_utilities\. RedirectMatch 403 admin\.webring\.docs\. Redirectmatch 403 Table\/Latest\/index\. </IfModule>
Πιο συγκεκριμένα Request Strings
<IfModule mod_alias.c> RedirectMatch 403 (https?|ftp|php)\:// RedirectMatch 403 /(https?|ima|ucp)/ RedirectMatch 403 /(Permanent|Better)$ RedirectMatch 403 (\=\\\'|\=\\%27|/\\\'/?|\)\.css\()$ RedirectMatch 403 (\,|\)\+|/\,/|\{0\}|\(/\(|\.\.\.|\+\+\+|\||\\\"\\\") RedirectMatch 403 \.(cgi|asp|aspx|cfg|dll|exe|jsp|mdb|sql|ini|rar)$ RedirectMatch 403 /(contac|fpw|install|pingserver|register)\.php$ RedirectMatch 403 (base64|crossdomain|localhost|wwwroot|e107\_) RedirectMatch 403 (eval\(|\_vti\_|\(null\)|echo.*kae|config\.xml) RedirectMatch 403 \.well\-known/host\-meta RedirectMatch 403 /function\.array\-rand RedirectMatch 403 \)\;\$\(this\)\.html\( RedirectMatch 403 proc/self/environ RedirectMatch 403 msnbot\.htm\)\.\_ RedirectMatch 403 /ref\.outcontrol RedirectMatch 403 com\_cropimage RedirectMatch 403 indonesia\.htm RedirectMatch 403 \{\$itemURL\} RedirectMatch 403 function\(\) RedirectMatch 403 labels\.rdf RedirectMatch 403 /playing.php RedirectMatch 403 muieblackcat </IfModule>
Αποκλεισμός του SetEnvIfNoCase User-Agent
<IfModule mod_setenvif.c> # SetEnvIfNoCase User-Agent ^$ keep_out SetEnvIfNoCase User-Agent (binlar|casper|cmsworldmap|comodo|diavol|dotbot|feedfinder|flicky|ia_archiver|jakarta|kmccrew|nutch|planetwork|purebot|pycurl|skygrid|sucker|turnit|vikspider|zmeu) keep_out <limit GET POST PUT> Order Allow,Deny Allow from all Deny from env=keep_out </limit> </IfModule>
Ανακατεύθυνση κάθε αποκλεισμένης αίτησης στην αρχική με κωδικό σφάλματος 403
RewriteRule ^(.*)$ index.php [F,L]
Απενεργοποίηση του hotlinkng
RewriteEngine On #Αλλάξτε το ?mysite\.com/ με το domain της σελίδας σας RewriteCond %{HTTP_REFERER} !^http://(.+\.)?mysite\.com/ [NC] RewriteCond %{HTTP_REFERER} !^$ #αλλάξτε το /images/no-hotlinking.png με μια δική σας φωτογραφία που αποθαρρύνει τους copycats RewriteRule .*\.(jpe?g|gif|bmp|png)$ /images/no-hotlinking.png [L]
Ξεχάσαμε κάτι; Μπορείτε να το προσθέσετε στα σχόλια και εμείς θα το προσθέσουμε στο άρθρο.
Τέλος Δεύτερου Μέρους.