Vorrübergehender Schutz für das Contenido-Verzeichnis

Fragen zur Installation von CONTENIDO 4.9? Probleme bei der Konfiguration? Hinweise oder Fragen zur Entwicklung des Systemes oder zur Sicherheit?
Antworten
sangrio
Beiträge: 9
Registriert: Fr 26. Sep 2003, 22:12
Wohnort: HH / HL
Kontaktdaten:

Vorrübergehender Schutz für das Contenido-Verzeichnis

Beitrag 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
Oldperl
Beiträge: 4316
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Hat sich bedankt: 6 Mal
Danksagung erhalten: 4 Mal
Kontaktdaten:

Beitrag 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
ConLite 3.0.0-dev, alternatives und stabiles Update von Contenido 4.8.x unter PHP 8.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog
sangrio
Beiträge: 9
Registriert: Fr 26. Sep 2003, 22:12
Wohnort: HH / HL
Kontaktdaten:

Beitrag 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
StSnake
Beiträge: 57
Registriert: Fr 10. Mär 2006, 17:46
Kontaktdaten:

Beitrag 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
sangrio
Beiträge: 9
Registriert: Fr 26. Sep 2003, 22:12
Wohnort: HH / HL
Kontaktdaten:

Beitrag 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
Jamest
Beiträge: 137
Registriert: Mi 2. Aug 2006, 09:29
Kontaktdaten:

Beitrag von Jamest »

Hallo Sangrio,

sehr gute Arbeit. :-)

Grüße

Jamest
stefkey
Beiträge: 556
Registriert: Mi 19. Okt 2005, 16:10
Wohnort: Heidelberg
Kontaktdaten:

Beitrag 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
jestmo
Beiträge: 10
Registriert: Do 15. Mär 2007, 11:28
Kontaktdaten:

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

Beitrag 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
Antworten