Seite 1 von 1

Vorrübergehender Schutz für das Contenido-Verzeichnis

Verfasst: Mo 4. Aug 2008, 13:13
von sangrio
Da es in der Regel nicht möglich ist, diverse Contenido-Installationen binnen kürzester Zeit auf die aktuellste Version umzustellen, habe ich für meine Projekte eine htaccess-Datei geschrieben, welche die gängigsten Sicherheitslücken und Angriffsflächen in Contenido erst einmal absichert.

Dies ist natürlich nur eine temporäre Lösung, mit der sich wenigstens schon einmal diese Angriffsfläche absichern lässt, bis die Installation auf die neuste Version geupdated wird...


Natürlich möchte ich euch diese Datei nicht vorenthalten:

Code: Alles auswählen

###################################################
#  htaccess-Schutz für das contenido-Verzeichnis
#  20080804 | Mirco Schmidt | www.sangrio.de
###################################################


RewriteEngine on

# Querystring
RewriteCond %{QUERY_STRING} ^.*http://.*$ [NC,OR]
RewriteCond %{QUERY_STRING} ^.*https://.*$ [NC,OR]
RewriteCond %{QUERY_STRING} ^.*ftp://.*$ [NC,OR]
RewriteCond %{QUERY_STRING} ^.*cfg\[(.*)\].*$ [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(\.\./|/\.\.|\./\.).*$ [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(localhost|loopback|127\.0\.0\.1).*$ [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(;|<|>|'|"|\)|%0A|%0D|%22|%27|%3C|%3E|%00).*(/\*|union|select|insert|cast|set|declare|drop|update|md5|benchmark).*$ [NC,OR]

# Request
RewriteCond %{REQUEST_METHOD} !^(GET|POST|HEAD)$ [NC,OR]
RewriteCond %{THE_REQUEST} ^.*(\\r|\\n|%0A|%0D).* [NC,OR]

# Cookie
RewriteCond %{HTTP_COOKIE} ^.*(<|>|'|%0A|%0D|%27|%3C|%3E|%00).* [NC]

RewriteRule .* - [F,NS,L]
Diese Datei muss als .htaccess im Verzeichnis "contenido" angelegt werden.

Als kleines Dankeschön würde ich mich über einen Link auf meine Seite www.sangrio.de oder www.sangrio.com freuen. Herzlichen Dank :wink:

Sonnige Grüße,
Mirco

Verfasst: Di 5. Aug 2008, 10:19
von Oldperl
Hallo Mirco,

vielen Dank für die Datei, sicherlich wird sie einigen Usern helfen.
Ich möchte dich aber bitten evtl. auch für nicht so mit Apache und htaccess bewanderte User deine Datei ein bisserl zu erklären, so das man daraus ersehen kann, was, welche Regel, wann und wieso macht.

Vielen Dank!

Mit freundlichem Gruß aus Franken

Ortwin

Verfasst: Di 5. Aug 2008, 10:49
von sangrio
Kein Problem - natürlich erkläre ich gerne, wofür die Regeln speziell da sind...

Code: Alles auswählen

RewriteCond %{QUERY_STRING} ^.*http://.*$ [NC,OR]
RewriteCond %{QUERY_STRING} ^.*https://.*$ [NC,OR]
RewriteCond %{QUERY_STRING} ^.*ftp://.*$ [NC,OR]
Hier wird überprüft ob im Querystring (Das sind die Variablen, die hinter dem Dateinamen und dem Fragezeichen an die Datei übergeben werden; z.B. index.php?id=3) die Protokollangaben "http://", "https://" oder "ftp://" vorkommen. In der Regel wird versucht über die von der Sicherheitslücke betroffenen Dateien Schad-Code in Contendio einzuschleusen. Da dieser Schad-Code sich in Dateien befindet, die sich auf anderen Servern befinden, müssten diese über eines der Protokolle geladen werden, welches aber durch die Regel in der htaccess-Datei verhindert wird.

Code: Alles auswählen

RewriteCond %{QUERY_STRING} ^.*cfg\[(.*)\].*$ [NC,OR]
Diese Regel überprüft ob die Angabe "cfg[*]" im Querystring vorkommt. Da in den betroffenen Dateien diese eigentlich Contenido-internen Variablen überschrieben werden können, werden mit dieser Regel alle Anfragen mit einem Querystring der diese Variable enthält gesperrt.

Code: Alles auswählen

RewriteCond %{QUERY_STRING} ^.*(\.\./|/\.\.|\./\.).*$ [NC,OR]
Oftmals wird versucht über "../" oder ähnliche Konstrukte in eine andere Verzeichnisebene des Servers zu gelangen. Diese Regel verhindert diese Verzeichnissprünge.

Code: Alles auswählen

RewriteCond %{QUERY_STRING} ^.*(localhost|loopback|127\.0\.0\.1).*$ [NC,OR] 
Mit dieser Regel wird überprüft ob über den Querystring versucht wird auf eine lokale Resource zuzugreifen. Sollte dies der Fall sein, wird der Zugriff verweigert.

Code: Alles auswählen

RewriteCond %{QUERY_STRING} ^.*(;|<|>|'|"|\)|%0A|%0D|%22|%27|%3C|%3E|%00).*(/\*|union|select|insert|cast|set|declare|drop|update|md5|benchmark).*$ [NC,OR]
Hierbei handelt es sich um unnatürliche Zeichen und Elemente, die für SQL-Abfragen verwendet werden können und in den Querystrings von Contenido nichts verloren haben - daher werden alle Anfragen mit diesen Zeichen geblockt.

Code: Alles auswählen

RewriteCond %{REQUEST_METHOD} !^(GET|POST|HEAD)$ [NC,OR]
Da auf Webseiten mit verschiedenen Request-Methoden (Das bedeutet, in welcher Form die Daten abgerufen/gesendet werden) zugegriffen werden kann, sind alle Request-Methoden außer "POST", "GET" und "HEAD" gesperrt, da diese für die Nutzung von Contenido keine Relevanz haben und eventuell für Angriffe genutzt werden könnten.

Code: Alles auswählen

RewriteCond %{THE_REQUEST} ^.*(\\r|\\n|%0A|%0D).* [NC,OR]
An dieser Stelle überprüfen wir, ob in der Anfrage an den Webserver unnatürliche oder auffällige Zeichen vorkommen - beim Auftreten von solchen sperrt die htaccess-Datei den Zugriff.

Code: Alles auswählen

RewriteCond %{HTTP_COOKIE} ^.*(<|>|'|%0A|%0D|%27|%3C|%3E|%00).* [NC]
Da auch Cookies die Möglichkeit bieten, Sicherheitslücken von Software auszunutzen, überprüfen wir hier ebenfalls ob auffällige Zeichen in den Werten vorhanden sind und stoppen den Zugriff, wenn dieses der Fall sein sollte.

Code: Alles auswählen

RewriteRule .* - [F,NS,L] 
Die "RewriteRule" ist die Aktion die ausgeführt werden soll, wenn eine der vorherigen Regeln zutrifft. In diesem Fall wird dem Browser ein 403 zurückgegeben, dass den Zugriff auf die entsprechende Datei verbietet.

Sonnige Grüße,
Mirco

Verfasst: Di 5. Aug 2008, 17:24
von StSnake
Hallo,

ich habe eben diese .htaccess Datei in das Contenido Verzeichnis kopiert, schließlich will man ja alles tun, damit es noch ein wenig sicherer wird.

Soweit mal vielen Dank für deine Mühe.

Leider kann ich danach keine Artikel mehr konfigurieren. Kannst du das nachvollziehen, oder liegt das an meinem System?

Viele Grüße
Steffen

Verfasst: Di 5. Aug 2008, 22:18
von sangrio
Hallo Steffen,

vermutlich hast Du den Code für die htaccess-Datei direkt kopiert, nachdem ich ihn hier gepostet habe.
Da sich ein kleiner Fehler eingeschlichen hatte, hab ich diesen kurz danach noch einmal geupdated.

Kopiere einfach noch einmal aktuellen Code in die htaccess-Datei und dann sollte es eigentlich klappen...

Schöne Grüße von der Ostsee,
Mirco

Verfasst: Mi 6. Aug 2008, 08:17
von Jamest
Hallo Sangrio,

sehr gute Arbeit. :-)

Grüße

Jamest

Verfasst: Fr 8. Aug 2008, 14:29
von stefkey
Hi sangrio,

danke für deine Mühe und die ausführliche Beschreibung!

ich kann kein Update von 4.8.6 auf 4.8.7 machen weil auf dem Server noch kein PHP5 läuft...

solange hoffe ich das deine .htaccess hilft!

Danke!!!

Grüße,
stefkey

Re: Vorrübergehender Schutz für das Contenido-Verzeichnis

Verfasst: Mi 22. Apr 2009, 14:32
von jestmo
hi,

das ist alles super, nur was muss ich in der htaccess schreiben, wenn ich mit absicht ein script einer fremden seite einbinden möchte? also ich will das http://www.meine-seite.de/index.php?var ... script.php zulassen will.

so sah die erweiterung bei mir aus

bevor das hier kommt

Code: Alles auswählen

RewriteRule .* - [F,NS,L] 
habe ich

Code: Alles auswählen

RewriteCond %{QUERY_STRING} !=http://www\.vertraue-ich.de/ 
geschrieben (ohne erfolg)

also, ich will, dass alles was von www.vertraue-ich.de kommt, zulassen, alles andere soll weiter geblockt werden