Discussion:
Scriptausführung verhindern per .htaccess
(zu alt für eine Antwort)
Oliver Betz
2013-03-11 07:38:26 UTC
Permalink
Hallo Alle,

welche möglichst universelle Lösung verhindert die Ausführung
beliebiger Scripte in einem Verzeichnis (in dem Nutzer Dateien
hochladen können)? Der Inhalt von Dateien soll ausgeliefert werden.

Da es so viele Möglichkeiten gibt, Scriptsprachen einzubinden,
befürchte ich, etwas übersehen haben könnte.

"Options -ExecCGI" funktioniert in den meisten Shared Hostings.
Funktioniert aber nicht, wenn der Interpreter als Modul läuft.

Übersehe ich bei "SetHandler default-handler" etwas?

Das in http://httpd.apache.org/docs/current/mod/core.html#sethandler
dokumentierte "SetHandler None" hat in meinen Versuchen keine
erkennbare Wirkung gezeigt, über eine Erklärung würde ich mich freuen.

Servus

Oliver
--
Oliver Betz, Muenchen http://oliverbetz.de/
Olaf Schwartowski
2013-03-11 11:41:44 UTC
Permalink
Post by Oliver Betz
Hallo Alle,
welche möglichst universelle Lösung verhindert die Ausführung
beliebiger Scripte in einem Verzeichnis (in dem Nutzer Dateien
hochladen können)? Der Inhalt von Dateien soll ausgeliefert werden.
Da es so viele Möglichkeiten gibt, Scriptsprachen einzubinden,
befürchte ich, etwas übersehen haben könnte.
"Options -ExecCGI" funktioniert in den meisten Shared Hostings.
Funktioniert aber nicht, wenn der Interpreter als Modul läuft.
Übersehe ich bei "SetHandler default-handler" etwas?
Das in http://httpd.apache.org/docs/current/mod/core.html#sethandler
dokumentierte "SetHandler None" hat in meinen Versuchen keine
erkennbare Wirkung gezeigt, über eine Erklärung würde ich mich freuen.
Hallo!
Ich kenne mich mit Linux nicht so gut aus, aber würde es nicht reichen,
wenn man dem Directory das Execute Bit wegnimmt?
Und wenn ein Upload kommt, das dann auch ohne das X-Bit speichern.
Oliver Betz
2013-03-11 11:55:01 UTC
Permalink
Olaf Schwartowski schrieb:

[...]
Post by Olaf Schwartowski
Ich kenne mich mit Linux nicht so gut aus, aber würde es nicht reichen,
wenn man dem Directory das Execute Bit wegnimmt?
Bei Perl vielleicht, aber z.B. nicht bei PHP.

Servus

Oliver
--
Oliver Betz, Munich
despammed.com is broken, use Reply-To:
Arno Welzel
2013-03-11 14:29:18 UTC
Permalink
Post by Oliver Betz
welche möglichst universelle Lösung verhindert die Ausführung
beliebiger Scripte in einem Verzeichnis (in dem Nutzer Dateien
hochladen können)? Der Inhalt von Dateien soll ausgeliefert werden.
Da es so viele Möglichkeiten gibt, Scriptsprachen einzubinden,
befürchte ich, etwas übersehen haben könnte.
"Options -ExecCGI" funktioniert in den meisten Shared Hostings.
Funktioniert aber nicht, wenn der Interpreter als Modul läuft.
Übersehe ich bei "SetHandler default-handler" etwas?
Das in http://httpd.apache.org/docs/current/mod/core.html#sethandler
dokumentierte "SetHandler None" hat in meinen Versuchen keine
erkennbare Wirkung gezeigt, über eine Erklärung würde ich mich freuen.
Bei Shared Hosting ist das überschreiben von Handlern per .htaccess
nicht zwangsläufig möglich.

Siehe auch <http://httpd.apache.org/docs/2.2/de/mod/core.html#allowoverride>
--
Arno Welzel
http://arnowelzel.de
http://de-rec-fahrrad.de
Oliver Betz
2013-03-12 10:34:37 UTC
Permalink
Post by Arno Welzel
Bei Shared Hosting ist das überschreiben von Handlern per .htaccess
nicht zwangsläufig möglich.
Siehe auch <http://httpd.apache.org/docs/2.2/de/mod/core.html#allowoverride>
danke für den Hinweis.

Aber wenigstens soll es einen "internal server error" geben, d.h. wenn
es nicht klappt, merkt man es auch dann, wenn man so nachlässig war,
die Maßnahme nicht zu überprüfen.

Servus

Oliver
--
Oliver Betz, Munich
despammed.com is broken, use Reply-To:
Arno Welzel
2013-03-12 16:20:11 UTC
Permalink
Post by Oliver Betz
Post by Arno Welzel
Bei Shared Hosting ist das überschreiben von Handlern per .htaccess
nicht zwangsläufig möglich.
Siehe auch <http://httpd.apache.org/docs/2.2/de/mod/core.html#allowoverride>
danke für den Hinweis.
Aber wenigstens soll es einen "internal server error" geben, d.h. wenn
es nicht klappt, merkt man es auch dann, wenn man so nachlässig war,
die Maßnahme nicht zu überprüfen.
Alternative: Lasse alle Zugriffe auf das fragliche Verzeichnis per
Rewrite-Regel auf ein Script umleiten, dass sich um die Auslieferung der
angefragten Dateien kümmert.
--
Arno Welzel
http://arnowelzel.de
http://de-rec-fahrrad.de
Gustaf Mossakowski
2013-03-12 12:44:06 UTC
Permalink
Post by Oliver Betz
welche möglichst universelle Lösung verhindert die Ausführung
beliebiger Scripte in einem Verzeichnis (in dem Nutzer Dateien
hochladen können)? Der Inhalt von Dateien soll ausgeliefert werden.
Lade die Dateien in ein Verzeichnis hoch, das nicht unterhalb des
»DocumentRoot« liegt.

Nach Prüfung, z. B. mit 'identify' von ImageMagick oder 'file' oder in
PHP mit 'getimagesize()', kannst du die Dateien, die einen der
gewünschten Dateitypen haben (Whitelist), umbenennen (Dateiname ohne
Sonderzeichen + Erweiterung) und dann in ein Verzeichnis verschieben,
das über http erreichbar ist.

Ist sauber und spart Arbeit.

Viele Grüße
Gustaf
Oliver Betz
2013-03-12 13:58:14 UTC
Permalink
Post by Gustaf Mossakowski
Post by Oliver Betz
welche möglichst universelle Lösung verhindert die Ausführung
beliebiger Scripte in einem Verzeichnis (in dem Nutzer Dateien
hochladen können)? Der Inhalt von Dateien soll ausgeliefert werden.
Lade die Dateien in ein Verzeichnis hoch, das nicht unterhalb des
»DocumentRoot« liegt.
Nach Prüfung, z. B. mit 'identify' von ImageMagick oder 'file' oder in
PHP mit 'getimagesize()', kannst du die Dateien, die einen der
gewünschten Dateitypen haben (Whitelist), umbenennen (Dateiname ohne
Sonderzeichen + Erweiterung) und dann in ein Verzeichnis verschieben,
das über http erreichbar ist.
wenn ich das richtig verstehe, deckt das nicht den Fall ab, Quelltext
zum Download anzubieten.

Und wenn Du mit "Erweiterung" die Zeichen nach dem letzten Punkt
meinst: Hilft nicht zuverlässig, das Thema hatten wir vor ein paar
Tagen, siehe <***@khp-mbp.speedport_w_723v_1_26_000>

Servus

Oliver
--
Oliver Betz, Munich
despammed.com is broken, use Reply-To:
Gustaf Mossakowski
2013-03-12 15:52:28 UTC
Permalink
Post by Oliver Betz
Post by Gustaf Mossakowski
Nach Prüfung, z. B. mit 'identify' von ImageMagick oder 'file' oder
in PHP mit 'getimagesize()', kannst du die Dateien, die einen der
gewünschten Dateitypen haben (Whitelist), umbenennen (Dateiname ohne
Sonderzeichen + Erweiterung) und dann in ein Verzeichnis
verschieben, das über http erreichbar ist.
wenn ich das richtig verstehe, deckt das nicht den Fall ab, Quelltext
zum Download anzubieten.
Quelltext zum Download würde ich in einem Archiv anbieten (gzip, zip,
tar, was auch immer). Meistens ist es doch nicht nur eine Datei, die man
braucht, und nicht nur ein Ordner, in dem die Dateien liegen.
Post by Oliver Betz
Und wenn Du mit "Erweiterung" die Zeichen nach dem letzten Punkt
meinst: Hilft nicht zuverlässig, das Thema hatten wir vor ein paar
Ja, ich würde die Dateierweiterung auch direkt auf '.txt' ändern, nicht
auf '.php.txt'. Wenn du möchtest, dass die Datei direkt herunterzuladen
ist und sofort genutzt werden kann, kannst du mit dem
'Content-Disposition'-Header den vorgeschlagenen Dateinamen auf '.php'
enden lassen.

Speziell PHP kann man beim Apachen statt mit

AddHandler application/x-httpd-php .php

auch mit

AddType application/x-httpd-php .php

einbinden, dann besteht das Problem, das Karl in Message-ID:
<***@khp-mbp.speedport_w_723v_1_26_000>
beschrieben hat, nicht.

Viele Grüße
Gustaf
Oliver Betz
2013-03-12 18:40:29 UTC
Permalink
Gustaf Mossakowski schrieb:

[Uploads umbenennen)
Post by Gustaf Mossakowski
Post by Oliver Betz
Und wenn Du mit "Erweiterung" die Zeichen nach dem letzten Punkt
meinst: Hilft nicht zuverlässig, das Thema hatten wir vor ein paar
Ja, ich würde die Dateierweiterung auch direkt auf '.txt' ändern, nicht
auf '.php.txt'. Wenn du möchtest, dass die Datei direkt herunterzuladen
das läuft dann auf eine Blacklist hinaus, welche Teilstrings aus
Dateinamen entfernt werden müssen. Ist ohnehin vorhanden, aber
Blacklists sind tendenziell unsicher.

Ich sehe noch nicht den Vorteil Deiner Lösung gegenüber dem generellen
Abstellen der Skriptverarbeitung.

Servus

Oliver
--
Oliver Betz, Muenchen http://oliverbetz.de/
Gustaf Mossakowski
2013-03-13 07:50:36 UTC
Permalink
Post by Oliver Betz
das läuft dann auf eine Blacklist hinaus, welche Teilstrings aus
Dateinamen entfernt werden müssen. Ist ohnehin vorhanden, aber
Blacklists sind tendenziell unsicher.
Müssen die URLs denn unbedingt Punkte enthalten? Du kannst auch alle
Punkte durch Leerzeichen, Minuszeichen oder ähnliches ersetzen. Und dann
kommt hinten die Dateieindung dran.

Bei Dateiuploads arbeite ich nur mit Whitelists, da ich auch den
Dateityp prüfe (ist das PDF wirklich ein PDF oder doch nur ein JPEG).
Die Anzahl der unterstützten Dateiformate sollte im Normalfall doch
recht überschaubar sein, oder?
Post by Oliver Betz
Ich sehe noch nicht den Vorteil Deiner Lösung gegenüber dem generellen
Abstellen der Skriptverarbeitung.
Kommt drauf an, was man möchte und was möglich ist. Welcher Lösungsweg
konkret der Beste ist, wirst du besser sagen können. Meine Lösung wäre
eh eine andere, ich liefere Dateien per Skript aus, wie auch Arno in
Message-ID: <khnkgp$qlp$***@dont-email.me> schreibt. Dann muß man ein paar
Funktionen des Webservers nachbilden, kann aber dafür genau bestimmen,
was passiert.

Viele Grüße, Gustaf

Loading...