Da meine beiden alten Sicherheitsbeitrge so gut angekommen ist und wir inzwischen bei Version 1.6.6 angekommen sind, mchte ich nun einen aktualisierten Beitrag starten (ohne den letzten Stand fr
V1.4.1 zu verlieren).
Schritt 1 (Stand 18.11.2009):
Denkt Euch ein sicheres Admin-Kennwort aus und benutzt sinnvoller Weise nicht den Benutzernamen admin, administrator oder den Benutzernamen aus diesem bzw. anderen Foren. Ein einigermaen sicheres Kennwort enthlt Gro- und Kleinbuchstaben, Zahlen und Sonderzeichen. Es sollte eine Lnge von mindestens
8 Zeichen haben.
http://aktuell.de.selfhtml.org/artikel/gedanken/passwort/index.htmTim Bormann hat in seinem Blog einen
kurzen Artikel zu dem Thema Passwort-Sicherheit und Passwort-Erstellung verffentlicht. Nehmt Euch die dortigen Informationen zu Herzen.
Schritt 2:
Umbenennen des Ordners admin per FTP und Anpassung Eurer config.php. ACHTUNG: Man bentigt Schreibrechte fr die config.php, also beispielsweise chmod 666.
$config['admin_dir'] = 'xyz';
Ergnzung: Lscht die Angabe zum Admin-Ordner komplett aus Eurer robots.txt in Eurem CMS-Hauptordner. Verseht besser den neuen Admin-Ordner mit einem zustzlichen .htpasswd/.htaccess-Schutz. Dies verhindert ebenfalls eine Indexierung der Admin-URL, aber ohne jedem zu zeigen wie sie ist (Stichwort robots.txt fr jeden Besucher lesbar).
Schritt 3:
Nur noch Leserechte auf die config.php erteilen. Per FTP den chmod der config.php beispielsweise auf 444 ndern.
Schritt 4:
In Eurer .htaccess-Datei im Hauptordner Eures CMSms befindet sich nachfolgender Code.
Hinweis: Die Datei ist nur vorhanden bei Nutzung von Pretty-URLs, eine Vorlage befindet sich in der Datei htaccess.txt im doc-Ordner.
# (this is important, so uncomment if your host permit)
#Options -Indexes
#ServerSignature Off
Nehmt wie empfohlen das Kommentarzeichen # vor Options und ServerSignature weg.
Ergnzt nach diesem Code noch den nachfolgenden Bereich.
# BEGIN Optional settings
# Deny access to config.php and CHANGELOG.txt
# The former can be useful if php ever breaks or dies
# Use with caution, this may break other functions of CMSms that use a config.php
# file. This may also break other programs you have running under your CMSms
# install that use config.php. You may need to add another .htaccess file to those
# directories to specifically allow config.php.
<Files ~ "config.php|CHANGELOG.txt">
order allow,deny
deny from all
</Files>
# END Optional Settings
Schritt 5:
Sperrt diverse Hack-Mglichkeiten und auch noch gleich die bekanntesten Spam-Bots mittels .htaccess aus.
# unterbindet, das fremde Seiten geladen werden
RewriteCond %{QUERY_STRING} ^(.*)=http://(.*) [OR]
# blockiert libwww (Ausgangspunkt fr diverse Hackversuche)
RewriteCond %{HTTP_USER_AGENT} ^libwww [OR]
# Blockiert Skripte, die versuchen, base64 encodierten Unsinn via URL zu versenden
RewriteCond %{QUERY_STRING} base64_encode.*\(.*\) [OR]
# Blockiert Skripte, die einen a ********** Tag in der URL enthalten
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
# Blockiert Skripte, die versuchen, PHP GLOBALS Variablen via URL zu verndern
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
# Blockiert Skripte, die versuchen, eine _REQUEST Variable via URL zu verndern
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2}) [OR]
# Spambots nach User_agent aussperren
RewriteCond %{HTTP_USER_AGENT} ^.*Whacker.*$ [OR]
RewriteCond %{HTTP_USER_AGENT} ^EmailCollector [OR]
RewriteCond %{HTTP_USER_AGENT} ^EmailSiphon [OR]
RewriteCond %{HTTP_USER_AGENT} ^EmailWolf [OR]
RewriteCond %{HTTP_USER_AGENT} ^.*FileHound.*$ [OR]
RewriteCond %{HTTP_USER_AGENT} ^.*TurnitinBot.*$ [OR]
RewriteCond %{HTTP_USER_AGENT} ^.*JoBo.*$ [OR]
RewriteCond %{HTTP_USER_AGENT} ^.*adressendeutschland.*$
RewriteRule ^.* - [F]
Hinweis: Fgt den Code in Euer .htaccess im CMS-Hauptordner direkt unter
RewriteBase ein.
Schritt 6:
Erstellt eine neue .htaccess-Datei fr Euer lib-Verzeichnis.
order deny,allow
deny from all
<Files ~ ".*\.css|.*\.js|.*\.gif|.*\jpe?g|editor.php|thumbs.php|images.php|xajax.js|xajax_uncompressed.js|editorFrame.php$">
Order deny,allow
Allow from all
</Files>
Ergnzung: Ich bruchte eine Rckmeldung, wo es hiermit eventuell noch Probleme gibt.
Erstellt danach eine neue .htaccess-Datei fr Euer tmp-Verzeichnis.
# To deny PHPs
<Files ~ "\.(php|php3|php4|php5|phtml|pl|cgi)$">
order deny,allow
deny from all
</Files>
Anmerkung: Es gibt keine Notwendigkeit in diesem Verzeichnis php-Dateien aufrufen zu drfen.
Schritt 7:
In aktuellen CMSms Versionen ab 1.4.1 sind schon .htaccess-Dateien fr die nachfolgenden Ordner enthalten:
/doc
/images
/plugins
/uploads
Bitte berprft, ob sich diese mit nachfolgenden Inhalt auf Eurem Server befinden:
# To deny PHPs
<Files ~ "\.(php|php3|php4|php5|phtml|pl|cgi)$">
order deny,allow
deny from all
</Files>
Schritt 8:
Deinstalliert und lscht den Modul-Manager und installiert statt dessen lieber Eure Module mittels FTP. Denn dann bentigt Euer modules-Verzeichnis nur noch den chmod 755. Gleiches gilt eventuell fr den Theme-Manager, keine Ahnung wo der Dateien hinspeichert, da er bei mir sofort runtergeflogen ist.
Anmerkung: Wegen der Verzeichnisrechte (chmod 755) kommt die Fehlermeldung "Der Modul-Ordner ist schreibgeschtzt." unter "Erweiterungen >> Module" und dies ist auch gut so!
Schritt 9:
Vermeidet die Benutzung des Tags
{cms_version}. Oder wenn Ihr es wie ich als Werbung anseht, immer den aktuellsten Release-Stand installiert zu haben, dann habt ihn auch immer installiert, d.h. lasst Euch beispielsweise mittels Announcement-Mailingliste darber informieren und installiert ihn so schnell wie mglich.
http://www.cmsmadesimple.org/support/mailing-listsSchritt 10 (
Danke NaN):
Im FileManager-Modul vor CMSms V1.2.5 waren grere Sicherheitslcken. Aktuellere Versionen enthalten den kritischen Code nicht mehr. berprft ob dieser problematische Code wirklich bei Euch nicht mehr auf dem Server ist! Geht hierzu in den Ordner
modules/FileManager/postlet und seht Euch die Dateigre bzw. den Inhalt der
postlet.jar an. Zeigt Windows bei der Gre 1 KB an oder ist die Datei komplett leer, so solltet Ihr den aktuellen Stand auf dem Server installiert haben.
Schritt 11 (
Danke cyberman):
Benutzt nicht das Standard Datenbank Prefix cms_, sondern denkt Euch etwas eigenes aus. Fr alle, die in einer bestehenden Installation das Prefix ndern wollen, soll hier ein Hinweis auf meinen
entsprechenden Beitrag reichen.
Schritt 12 (
Danke TeXnik):
Postet News-Beitrge oder sonstige Daten, bei denen ein Besucher den Ersteller sieht auf keinen Fall mit einem admin-Benutzer! Legt einen gesonderten Benutzer mit eingeschrnkten Rechten fr solche Sachen an oder ndert die Anzeige (das Template) des News-Moduls beispielsweise so, da anstatt $author die Variable $authorname zur Anzeige des Erstellers benutzt wird.
Anhang:
Verschleiert Eure Email-Adresse gegenber Spam-Bots mittels Smarty.
E-Mail: <a href="{cms_selflink href="kontakt"}">{'test@example.com'|escape:'mail'|escape:'hexentity'}</a>
ACHTUNG: Keine Ahnung wie Tiny oder FCK darauf reagieren, da ich meinen Inhalt direkt ber HTML-Eingaben pflege. Zustzlich sollte man berlegen, ob man nicht auch andere persnliche Daten so schtzen will (beispielsweise Telefonnummer).
Telefon: {'NUMMER'|escape:'hexentity'}