Discussion:
JavaScript: Dateityp vor Upload prüfen?
(zu alt für eine Antwort)
Alexander Schestag
2013-02-11 17:42:59 UTC
Permalink
Hallo,

gibt es eine *sichere* Methode, einen Dateityp vor einem Upload mittels
JavaScript zu prüfen? Also "sicher" wie in "nicht nur im Sinne einer
Pseudoprüfung der Dateiendung, sondern im Sinne einer Prüfung, die
sicherstellt, dass etwa ein Bild auch ein Bild ist und keine PHP-Shell"?

Grüße,

Alex
Thomas 'PointedEars' Lahn
2013-02-11 18:23:18 UTC
Permalink
Post by Alexander Schestag
gibt es eine *sichere* Methode, einen Dateityp vor einem Upload mittels
JavaScript zu prüfen? Also "sicher" wie in "nicht nur im Sinne einer
Pseudoprüfung der Dateiendung, sondern im Sinne einer Prüfung, die
sicherstellt, dass etwa ein Bild auch ein Bild ist und keine PHP-Shell"?
Ja. Aber damit wirst Du Cracker nicht austricksen können. Du musst
zusätzlich serverseitig prüfen.


PointedEars
--
Post by Alexander Schestag
If you get a bunch of authors […] that state the same "best practices"
in any programming language, then you can bet who is wrong or right...
Not with javascript. Nonsense propagates like wildfire in this field.
-- Richard Cornford, comp.lang.javascript, 2011-11-14
Alexander Schestag
2013-02-11 18:48:42 UTC
Permalink
Post by Thomas 'PointedEars' Lahn
Post by Alexander Schestag
gibt es eine *sichere* Methode, einen Dateityp vor einem Upload mittels
JavaScript zu prüfen? Also "sicher" wie in "nicht nur im Sinne einer
Pseudoprüfung der Dateiendung, sondern im Sinne einer Prüfung, die
sicherstellt, dass etwa ein Bild auch ein Bild ist und keine PHP-Shell"?
Ja. Aber damit wirst Du Cracker nicht austricksen können. Du musst
zusätzlich serverseitig prüfen.
Ja, das fürchte ich auch, nachdem ich das nochmal durchdacht habe.
Diesbezüglich die Frage, ob dann überhaupt das HTML5-Attribut "accept"
innerhalb des Formulartyps "file" einen Sinn ergibt?

Grüße,

Alex
--
http://www.parapsychologische-beratung.com
Thomas 'PointedEars' Lahn
2013-02-11 19:39:43 UTC
Permalink
Post by Alexander Schestag
Post by Thomas 'PointedEars' Lahn
Post by Alexander Schestag
gibt es eine *sichere* Methode, einen Dateityp vor einem Upload mittels
JavaScript zu prüfen? Also "sicher" wie in "nicht nur im Sinne einer
Pseudoprüfung der Dateiendung, sondern im Sinne einer Prüfung, die
sicherstellt, dass etwa ein Bild auch ein Bild ist und keine PHP-Shell"?
Ja. Aber damit wirst Du Cracker nicht austricksen können. Du musst
zusätzlich serverseitig prüfen.
Ja, das fürchte ich auch, nachdem ich das nochmal durchdacht habe.
Diesbezüglich die Frage, ob dann überhaupt das HTML5-Attribut "accept"
innerhalb des Formulartyps "file" einen Sinn ergibt?
Ein Programm, welches das Attribut unterstützt, kann so die auswählbaren
Dateien beschränken. Chromium 24 für Debian GNU/Linux bietet dann einen
entsprechenden Eintrag im “Filter”-Feld von KDialog.

Aussagen werden durch Fragezeichen nicht fragender.


PointedEars
--
Post by Alexander Schestag
Einfach die xml Tags durch html Code ersetzen und gut...
Lass es mich so sagen: Die dunkle Seite gewählt Du hast. Den schnellen
Erfolg Du suchst, aber auf die Füsse fallen die Komplexität Dir wird.
Unterschätze niemals die Bugs der dunklen Seite! -- Geggo in fcc
Martin Honnen
2013-02-11 18:28:20 UTC
Permalink
Post by Alexander Schestag
gibt es eine *sichere* Methode, einen Dateityp vor einem Upload mittels
JavaScript zu prüfen? Also "sicher" wie in "nicht nur im Sinne einer
Pseudoprüfung der Dateiendung, sondern im Sinne einer Prüfung, die
sicherstellt, dass etwa ein Bild auch ein Bild ist und keine PHP-Shell"?
Man kann in modernen Browsern mehr als nur den (oder die) Dateinamen
auslesen, siehe
https://developer.mozilla.org/en-US/docs/Using_files_from_web_applications#Getting_information_about_selected_file%28s%29,
es gibt u.a. eine files-Kollektion mit File-Objekten, die Eigenschaften
wie size und type haben. Mit einem FileReader kann man auch den Inhalt
auslesen.
Ralf Döblitz
2013-02-11 18:30:25 UTC
Permalink
Post by Alexander Schestag
Hallo,
gibt es eine *sichere* Methode, einen Dateityp vor einem Upload mittels
JavaScript zu prüfen? Also "sicher" wie in "nicht nur im Sinne einer
Pseudoprüfung der Dateiendung, sondern im Sinne einer Prüfung, die
sicherstellt, dass etwa ein Bild auch ein Bild ist und keine PHP-Shell"?
Wieso JavaScript, hast du auf dem Server nichts normales zur Verfügung?
Auf dem Client kannst du ja eh nichts vertrauen, bleibt also nur, auf
dem Server die Daten vor der Weiterverarbeitung eine rPrüfung zu
unterziehen (z.B. mit file(1)). Natürlich könntest du auch versuchen,
file(1) in JS nachzubauen, aber zuverlässig wird das dadurch trotzdem
nicht.

Ralf
--
"de.alt.comp.kde Die Kommunistische Desktop Erweiterung."
  – Sven Paulus in <67hu21$43r$***@imperator.oops.sub.de>
Thomas 'PointedEars' Lahn
2013-02-12 09:01:36 UTC
Permalink
Post by Ralf Döblitz
Post by Alexander Schestag
gibt es eine *sichere* Methode, einen Dateityp vor einem Upload mittels
JavaScript zu prüfen? Also "sicher" wie in "nicht nur im Sinne einer
Pseudoprüfung der Dateiendung, sondern im Sinne einer Prüfung, die
sicherstellt, dass etwa ein Bild auch ein Bild ist und keine PHP-Shell"?
Wieso JavaScript, hast du auf dem Server nichts normales zur Verfügung?
Auf dem Client kannst du ja eh nichts vertrauen, bleibt also nur, auf
dem Server die Daten vor der Weiterverarbeitung eine rPrüfung zu
unterziehen (z.B. mit file(1)).
Wenn man befürchtet, dass PHP-Shells hochgeladen werden, hat man wohl PHP
auf dem Server. Somit entfallen die nicht immer mögliche Installation von
file(1) und ein nicht immer möglicher Shell-Aufruf:

<http://php.net/fileinfo>
Post by Ralf Döblitz
Natürlich könntest du auch versuchen, file(1) in JS nachzubauen, aber
… das ist heutzutage oft überflüssig:

<http://www.w3.org/TR/html5/forms.html#dom-input-files> ff.
Post by Ralf Döblitz
zuverlässig wird das dadurch trotzdem nicht.
ACK.


PointedEars
--
Clientseitig geht das nicht wirklich, weil der Browser selbst keine
Mails verschicken kann und das Kooperieren mit Mailprogrammen eher
in ein Kollabieren entartet.
(Georg Maaß in dcljs <aoh6vi$mbrnu$***@ID-3551.news.dfncis.de>)
Arno Welzel
2013-02-12 12:49:02 UTC
Permalink
Post by Alexander Schestag
gibt es eine *sichere* Methode, einen Dateityp vor einem Upload mittels
JavaScript zu prüfen? Also "sicher" wie in "nicht nur im Sinne einer
Pseudoprüfung der Dateiendung, sondern im Sinne einer Prüfung, die
sicherstellt, dass etwa ein Bild auch ein Bild ist und keine PHP-Shell"?
Da der Dateiupload jederzeit auch unter Umgehung des Scripts erfolgen
kann, musst Du die Prüfung ohnehin auch auf dem Server zusätzlich
implementieren. Und was bitte ist eine "PHP-Shell" als Datei?
--
Arno Welzel
http://arnowelzel.de
http://de-rec-fahrrad.de
Arno Welzel
2013-02-12 12:50:20 UTC
Permalink
Post by Arno Welzel
Post by Alexander Schestag
gibt es eine *sichere* Methode, einen Dateityp vor einem Upload mittels
JavaScript zu prüfen? Also "sicher" wie in "nicht nur im Sinne einer
Pseudoprüfung der Dateiendung, sondern im Sinne einer Prüfung, die
sicherstellt, dass etwa ein Bild auch ein Bild ist und keine PHP-Shell"?
Da der Dateiupload jederzeit auch unter Umgehung des Scripts erfolgen
kann, musst Du die Prüfung ohnehin auch auf dem Server zusätzlich
implementieren. Und was bitte ist eine "PHP-Shell" als Datei?
Ergänzung - damit ist wohl das gemeint:

<http://phpshell.sourceforge.net/>
--
Arno Welzel
http://arnowelzel.de
http://de-rec-fahrrad.de
Alexander Schestag
2013-02-12 13:23:33 UTC
Permalink
Post by Arno Welzel
Post by Arno Welzel
Da der Dateiupload jederzeit auch unter Umgehung des Scripts erfolgen
kann, musst Du die Prüfung ohnehin auch auf dem Server zusätzlich
implementieren. Und was bitte ist eine "PHP-Shell" als Datei?
<http://phpshell.sourceforge.net/>
Exakt. Wegen solcher Dinge ist eine sichere Prüfung zwingend notwendig.
Aber ihr habt ja alle Recht, eine Prüfung auf dem Server ist unumgänglich.

Alex
--
http://www.parapsychologische-beratung.com
Thomas 'PointedEars' Lahn
2013-02-12 15:56:12 UTC
Permalink
Post by Alexander Schestag
Post by Arno Welzel
Post by Arno Welzel
Da der Dateiupload jederzeit auch unter Umgehung des Scripts erfolgen
kann, musst Du die Prüfung ohnehin auch auf dem Server zusätzlich
implementieren. Und was bitte ist eine "PHP-Shell" als Datei?
<http://phpshell.sourceforge.net/>
Exakt. Wegen solcher Dinge ist eine sichere Prüfung zwingend notwendig.
Das deutet allerdings auf ein grundlegendes Sicherheitsproblem auf dem
Server hin. Wird etwa exec() & Co. Benutzern normalerweise verboten, sieht
eine PHP-Shell zwar noch schön aus, man kann aber damit keinen Schaden mehr
anrichten:

| Safe Mode
|
| Safe Mode is the nemisis of PHP Shell. If PHP is running in Safe Mode then
| PHP Shell will normally not work — sorry. Please read the detailed
| explaination in the SECURITY file included in the PHP Shell distribution.

(“nemisis” sollte wohl “nemesis” heissen)

Siehe hierzu auch <http://php.net/manual/en/features.safe-mode.php>, welches
zeigt, dass der “Safe Mode” inzwischen (PHP 5.4 ist aktuell) nicht mehr
unterstützt wird. Stattdessen gibt es z. B. suPHP:
<http://stackoverflow.com/a/7906631/855543> f.
Post by Alexander Schestag
Aber ihr habt ja alle Recht, eine Prüfung auf dem Server ist unumgänglich.
Unumgänglich ist sie nicht, jedoch ratsam.


PointedEars
--
DER [Browser] soll sich um sowas kuemmern, nicht die MARKUP language,
mit der nur sematische Informationen gegeben werden sollen, keine
Layoutbeschreibung (das galt zumindest, bevor Netscape und Microsoft
in Wettstreit traten, wer das Prinzip nachhaltiger vergewaltigen darf,
der eindeutig zugunsten von Microsoft ausging) -- BGKS
Alexander Schestag
2013-02-12 17:42:18 UTC
Permalink
Post by Thomas 'PointedEars' Lahn
Post by Alexander Schestag
Exakt. Wegen solcher Dinge ist eine sichere Prüfung zwingend notwendig.
Das deutet allerdings auf ein grundlegendes Sicherheitsproblem auf dem
Server hin. Wird etwa exec() & Co. Benutzern normalerweise verboten, sieht
eine PHP-Shell zwar noch schön aus, man kann aber damit keinen Schaden mehr
Da ich das in dem Falle nicht unter Kontrolle habe, gehe ich auf Nummer
sicher.

Grüße,

Alex
--
http://www.parapsychologische-beratung.com
Manuel Reimer
2013-02-13 16:38:13 UTC
Permalink
Post by Thomas 'PointedEars' Lahn
| Safe Mode
Also für mich wäre "Safe Mode aktiv" auf jedem Fall ein Ausschlusskriterium bei
der Hosterwahl.
Post by Thomas 'PointedEars' Lahn
Siehe hierzu auch <http://php.net/manual/en/features.safe-mode.php>, welches
zeigt, dass der “Safe Mode” inzwischen (PHP 5.4 ist aktuell) nicht mehr
<http://stackoverflow.com/a/7906631/855543> f.
Wird auch langsam zeit, dass dieses "Feature" endlich abgeschafft wird.

"suphp" ist letztlich nichts anderes als "Führe PHP-Scripte im Kontext des Users
aus, der sie erstellt hat". Der Feature-Umfang von PHP bleibt dabei voll erhalten.

Die meisten, die "shared Hosting" anbieten nutzen mittlerweile entweder suphp
oder suexec.

Gruß

Manuel
Oliver Betz
2013-02-12 17:54:40 UTC
Permalink
Post by Alexander Schestag
gibt es eine *sichere* Methode, einen Dateityp vor einem Upload mittels
JavaScript zu prüfen? Also "sicher" wie in "nicht nur im Sinne einer
Pseudoprüfung der Dateiendung, sondern im Sinne einer Prüfung, die
sicherstellt, dass etwa ein Bild auch ein Bild ist und keine PHP-Shell"?
Wie will ein Angreifer den Webserver dazu bringen, eine auf .foo
endende Datei als PHP zu behandeln?

Ich verwende eine Whitelist von Dateiendungen, die hochgeladen werden
darf.

Servus

Oliver
--
Oliver Betz, Munich
despammed.com is broken, use Reply-To:
Thomas 'PointedEars' Lahn
2013-02-12 20:08:59 UTC
Permalink
Post by Oliver Betz
Post by Alexander Schestag
gibt es eine *sichere* Methode, einen Dateityp vor einem Upload mittels
JavaScript zu prüfen? Also "sicher" wie in "nicht nur im Sinne einer
Pseudoprüfung der Dateiendung, sondern im Sinne einer Prüfung, die
sicherstellt, dass etwa ein Bild auch ein Bild ist und keine PHP-Shell"?
Wie will ein Angreifer den Webserver dazu bringen, eine auf .foo
endende Datei als PHP zu behandeln?
Aus meiner styles/.htaccess:

<IfModule mod_php5.c>
AddHandler application/x-httpd-php .css
</IfModule>

[Gelegentlich muss ich mir noch etwas Besseres überlegen. Es ist aufwändig,
für jede auch nicht dynamische .css-Datei das “Content-Type”- und die Cache-
Headerfelder mit PHP setzen zu müssen. Das Suffix .css hat im lokalen SVN-
Arbeitsverzeichnis den Vorteil, dass trotz PHP-dynamischen Teilen das CSS-
SHL in Eclipse WTP weitestgehend funktioniert, was bei .php nicht der Fall
ist.]
Post by Oliver Betz
Ich verwende eine Whitelist von Dateiendungen, die hochgeladen werden
darf.
Security by obscurity.


PointedEars
--
Aber das Sperren der rechten Maustaste hat auch seine Vorteile: so
bleibt uns der Anblick einer ganzen Menge dilettantisch und lieblos
zusammengewurstelten Quellcodes erspart. (Ulrich 'Droeppez' Kritzner in
http://selfhtml.de/forum/zeigebeitrag.php3?fid=5&id=31594&thread=31592)
Oliver Betz
2013-02-12 21:05:57 UTC
Permalink
Post by Thomas 'PointedEars' Lahn
Post by Oliver Betz
Wie will ein Angreifer den Webserver dazu bringen, eine auf .foo
endende Datei als PHP zu behandeln?
<IfModule mod_php5.c>
AddHandler application/x-httpd-php .css
</IfModule>
ist schon klar (siehe anderes Posting mit "ForceType"), aber das muss
ich ja nicht in den Verzeichnissen machen, wo Leute etwas hochladen
können.

Und auch nicht mit Erweiterungen, die in der "darfst Du hochladen"
Whitelist (s.u.) stehen.

[...]
Post by Thomas 'PointedEars' Lahn
Post by Oliver Betz
Ich verwende eine Whitelist von Dateiendungen, die hochgeladen werden
darf.
Security by obscurity.
Da ist keine Obscurity, die Liste ist nicht geheim. Effekt ist, dass
nur .txt .jpg .png und so weiter hochgeladen werden darf.

Wenn jemand dann phpshell mit einer dieser Erweiterungen hochlädt,
wird der freundliche Indianer das (hoffentlich) nicht an PHP
übergeben.

Ich sehe da noch kein Risiko, aber vielleicht habe ich ja etwas
übersehen. In dem Fall würde ich mich über einen entsprechenden
Hinweis freuen.

Servus

Oliver
--
Oliver Betz, Muenchen http://oliverbetz.de/
Markus Grob
2013-02-13 13:18:04 UTC
Permalink
Post by Oliver Betz
Da ist keine Obscurity, die Liste ist nicht geheim. Effekt ist, dass
nur .txt .jpg .png und so weiter hochgeladen werden darf.
Wenn jemand dann phpshell mit einer dieser Erweiterungen hochlädt,
wird der freundliche Indianer das (hoffentlich) nicht an PHP
übergeben.
Nun, ein Dateifilter auf Clientseite ist nichts, was die Sicherheit
erhöht, sondern nur den Komfort des Benutzers, der automatisch sieht,
was akzeptiert wird, bevor er es hochlädt.

Will jemand Deinen Server missbrauchen, dann wird er schauen, dass er
Dein JS ausschaltet, das kann er ganz nach belieben.

Bei Problemen mit Bildern, welche einen Überlauf beim verarbeiten
verursachen, kannst Du als "Anwender" nichts machen, ausser hoffen, dass
Du ein Update einspielen kannst, bevor jemand die verwundbare Stelle in
PHP ausnutzt.

Gruss, Markus
Oliver Betz
2013-02-13 14:13:51 UTC
Permalink
Post by Markus Grob
Post by Oliver Betz
Da ist keine Obscurity, die Liste ist nicht geheim. Effekt ist, dass
nur .txt .jpg .png und so weiter hochgeladen werden darf.
Wenn jemand dann phpshell mit einer dieser Erweiterungen hochlädt,
wird der freundliche Indianer das (hoffentlich) nicht an PHP
übergeben.
Nun, ein Dateifilter auf Clientseite ist nichts, was die Sicherheit
natürlich auf dem Server, nicht clientseitig.

[...]
Post by Markus Grob
Bei Problemen mit Bildern, welche einen Überlauf beim verarbeiten
verursachen, kannst Du als "Anwender" nichts machen, ausser hoffen, dass
Du meinst beim Verarbeiten auf dem Server durch PHP oder z.B.
ImageMagick?

Das ist wahr. Beunruhigt mich nicht allzusehr, weil auf den von mir
betreuten Seiten "Fremde" nichts hochladen dürfen. Vereinsmitgliedern
traue ich so weit.

Besonders oft scheint das aber auch nicht auf öffentlichen Seiten zu
passieren.

Ich hoffe, dass "meine" Hoster da auf Zack sind.

Servus

Oliver
--
Oliver Betz, Muenchen http://oliverbetz.de/
Karl Pflästerer
2013-02-13 20:40:10 UTC
Permalink
Oliver Betz <***@despammed.com> writes:

[...]
Post by Oliver Betz
Da ist keine Obscurity, die Liste ist nicht geheim. Effekt ist, dass
nur .txt .jpg .png und so weiter hochgeladen werden darf.
.php.txt wird angenommen?
Post by Oliver Betz
Wenn jemand dann phpshell mit einer dieser Erweiterungen hochlädt,
wird der freundliche Indianer das (hoffentlich) nicht an PHP
übergeben.
Je nachdem, wie Apache eingestellt ist, wird eine .php.txt Datei auch
an PHP übergeben (dies ist ein Apache Feature; siehe:
http://httpd.apache.org/docs/2.2/mod/mod_mime.html#multipleext )
Post by Oliver Betz
Ich sehe da noch kein Risiko, aber vielleicht habe ich ja etwas
übersehen. In dem Fall würde ich mich über einen entsprechenden
Hinweis freuen.
Bitte. Hochgeladene Dateien benennt man immer um; die Dateiendung ergibt
sich aus dem Typ der Datei (den man serverseitig ermittelt) und der als
Filterkriterium dient (und nicht die Dateiendung). Zusätzlich werden
hochgeladene Dateien in einem Verzeichnis abgelegt, in dem man nichts
ausführen lässt.

KP
Gustaf Mossakowski
2013-02-15 09:37:19 UTC
Permalink
Post by Karl Pflästerer
Bitte. Hochgeladene Dateien benennt man immer um; die Dateiendung ergibt
sich aus dem Typ der Datei (den man serverseitig ermittelt) und der als
Filterkriterium dient (und nicht die Dateiendung).
Soweit die Theorie. In der Praxis ist es aber nicht immer möglich, den
Dateityp ohne Dateiendung herauszubekommen.
Post by Karl Pflästerer
Zusätzlich werden
hochgeladene Dateien in einem Verzeichnis abgelegt, in dem man nichts
ausführen lässt.
Am Besten schiebt man hochgeladene Dateien in ein Verzeichnis, was gar
nicht direkt unterhalb des DOCUMENT ROOT liegt.

Viele Grüße
Gustaf
Karl Pflästerer
2013-02-15 12:04:21 UTC
Permalink
Post by Gustaf Mossakowski
Post by Karl Pflästerer
Bitte. Hochgeladene Dateien benennt man immer um; die Dateiendung ergibt
sich aus dem Typ der Datei (den man serverseitig ermittelt) und der als
Filterkriterium dient (und nicht die Dateiendung).
Soweit die Theorie. In der Praxis ist es aber nicht immer möglich, den
Dateityp ohne Dateiendung herauszubekommen.
Für die Dateien, wo wir Uploads zulassen, ist es möglich. Bilder aller
Art, PDFs, Word-Doc und Konsorten etc. kann man gut identifizieren.
Post by Gustaf Mossakowski
Post by Karl Pflästerer
Zusätzlich werden
hochgeladene Dateien in einem Verzeichnis abgelegt, in dem man nichts
ausführen lässt.
Am Besten schiebt man hochgeladene Dateien in ein Verzeichnis, was gar
nicht direkt unterhalb des DOCUMENT ROOT liegt.
Es geht ja hier darum, dass der Nutzer diese Dateien auch angezeigt
bekommt; wer ein Bild hochlädt will das Bild auch nachher sehen. Wer
einen Artikel schreibt und eine Power Point Datei als Anlage hochlädt,
will nachher einen Link im geschriebenen Artikel zum Download. Also
müssen diese Dateien per HTTP abrufbar sein. Bei deiner Lösung benötigt
man ein proxy Skript, über das all diese Aufrufe geroutet werden; kann
man machen, es kommt dann darauf an, ob die Performance noch ausreichend
ist (und das Skript so geschrieben ist, das Caching auch funktioniert
(korrekte HTTP header)). Performance und Caching bekommt man mit
X-Sendfile hin (Apache oder Nginx können das zum Beispiel).

KP
Arno Welzel
2013-02-15 13:02:31 UTC
Permalink
[...]
Post by Karl Pflästerer
Post by Gustaf Mossakowski
Am Besten schiebt man hochgeladene Dateien in ein Verzeichnis, was gar
nicht direkt unterhalb des DOCUMENT ROOT liegt.
Es geht ja hier darum, dass der Nutzer diese Dateien auch angezeigt
bekommt; wer ein Bild hochlädt will das Bild auch nachher sehen. Wer
einen Artikel schreibt und eine Power Point Datei als Anlage hochlädt,
will nachher einen Link im geschriebenen Artikel zum Download. Also
müssen diese Dateien per HTTP abrufbar sein. Bei deiner Lösung benötigt
man ein proxy Skript, über das all diese Aufrufe geroutet werden; kann
man machen, es kommt dann darauf an, ob die Performance noch ausreichend
ist (und das Skript so geschrieben ist, das Caching auch funktioniert
(korrekte HTTP header)). Performance und Caching bekommt man mit
X-Sendfile hin (Apache oder Nginx können das zum Beispiel).
Es geht auch so:

<https://arnowelzel.de/wiki/de/misc/finland-2012>

Diese Bildersammlung wird komplett durch serverseitige Scripte dynamisch
erzeugt. Hier dauert das komplette Laden der Übersicht inkl. der etwa
200 Bilder rund 6 Sekunden (sofern der Browser SPDY unterstützt - sonst
eben etwas länger).
--
Arno Welzel
http://arnowelzel.de
http://de-rec-fahrrad.de
Oliver Betz
2013-02-15 18:16:44 UTC
Permalink
***@rl.pflaesterer.de schrieb:

[...]
Post by Karl Pflästerer
Post by Oliver Betz
Da ist keine Obscurity, die Liste ist nicht geheim. Effekt ist, dass
nur .txt .jpg .png und so weiter hochgeladen werden darf.
.php.txt wird angenommen?
ja.
Post by Karl Pflästerer
Je nachdem, wie Apache eingestellt ist, wird eine .php.txt Datei auch
http://httpd.apache.org/docs/2.2/mod/mod_mime.html#multipleext )
danke für den Hinweis. Bei meiner wichtigsten Website ist das nicht
so: Der Server liefert es einfach als text/plain aus.

Bei einem von zwei anderen Hostern, die ich kurz testete, konnte ich
einen kritischen Fall konstruieren (kein "Options -ExecCGI", bestimmte
Permissions). Beide brauchen auch noch ein "AddHandler text/plain
.txt", um die Datei anzuzeigen.
Post by Karl Pflästerer
Post by Oliver Betz
Ich sehe da noch kein Risiko, aber vielleicht habe ich ja etwas
übersehen. In dem Fall würde ich mich über einen entsprechenden
Hinweis freuen.
Bitte. Hochgeladene Dateien benennt man immer um; die Dateiendung ergibt
sich aus dem Typ der Datei (den man serverseitig ermittelt) und der als
Filterkriterium dient (und nicht die Dateiendung).
GIGO: Der Nutzer darf die Endung bestimmen, keine Bevormundung, kein
unerwartetes Verhalten. Wenn er Unfug macht, kommt Unfug raus. Eine
Rechteerhöhung muss aber ausgeschlossen sein.
Post by Karl Pflästerer
Zusätzlich werden
hochgeladene Dateien in einem Verzeichnis abgelegt, in dem man nichts
ausführen lässt.
Das sehe ich nicht als zusätzlichen, sondern als den entscheidenden
Punkt an.

"Options -ExecCGI" sollte auf den meisten shared Hostings
funktionieren.

Servus

Oliver
--
Oliver Betz, Munich
despammed.com is broken, use Reply-To:
Stefan+ (Stefan Froehlich)
2013-02-15 20:08:39 UTC
Permalink
Post by Oliver Betz
Zusätzlich werden hochgeladene Dateien in einem Verzeichnis abgelegt, in
dem man nichts ausführen lässt.
Das sehe ich nicht als zusätzlichen, sondern als den entscheidenden
Punkt an.
"Options -ExecCGI" sollte auf den meisten shared Hostings
funktionieren.
Universeller sollte "php_value engine off" sein.

Servus,
Stefan
--
http://kontaktinser.at/ - die kostenlose Kontaktboerse fuer Oesterreich
Offizieller Erstbesucher(TM) von mmeike

Der stumpfe Mensch will Stefan. Das muß ja wohl einen Grund haben?
(Sloganizer)
Oliver Betz
2013-02-16 08:50:26 UTC
Permalink
Post by Stefan+ (Stefan Froehlich)
Post by Oliver Betz
Zusätzlich werden hochgeladene Dateien in einem Verzeichnis abgelegt, in
dem man nichts ausführen lässt.
Das sehe ich nicht als zusätzlichen, sondern als den entscheidenden
Punkt an.
"Options -ExecCGI" sollte auf den meisten shared Hostings
funktionieren.
Universeller sollte "php_value engine off" sein.
Danke für den Hinweis, ich dachte, das geht nur für php als Modul.

Allerdings: Perl, Python, Ruby zähle ich auch zu "universell".

Servus

Oliver
--
Oliver Betz, Muenchen http://oliverbetz.de/
Alexander Schestag
2013-02-13 21:42:35 UTC
Permalink
Post by Oliver Betz
Post by Thomas 'PointedEars' Lahn
Post by Oliver Betz
Ich verwende eine Whitelist von Dateiendungen, die hochgeladen werden
darf.
Security by obscurity.
Da ist keine Obscurity, die Liste ist nicht geheim. Effekt ist, dass
nur .txt .jpg .png und so weiter hochgeladen werden darf.
Nein. Die Dateiendung sagt nichts über den Inhalt einer Datei aus.
Dieser Irrglaube ist Windowsdenke. Eine reine Prüfung der Dateiendung
ist nachgewiesenermaßen nicht hinreichend sicher.
Post by Oliver Betz
Wenn jemand dann phpshell mit einer dieser Erweiterungen hochlädt,
wird der freundliche Indianer das (hoffentlich) nicht an PHP
übergeben.
Da gibt es Möglichkeiten, das zu umgehen, siehe Karls Beispiel mit .php.txt.

Alex
--
http://www.parapsychologische-beratung.com
Matthias Würfl
2013-02-14 08:03:42 UTC
Permalink
Post by Alexander Schestag
Nein. Die Dateiendung sagt nichts über den Inhalt einer Datei aus.
Es besteht diesbezüglich keine Sicherheit, aber Konventionen.
Post by Alexander Schestag
Dieser Irrglaube ist Windowsdenke. Eine reine Prüfung der Dateiendung
ist nachgewiesenermaßen nicht hinreichend sicher.
Das bedeutet? Apache soll bei jeder Datei den Inhalt überprüfen statt
nach der Dateiendung zu gehen damit er den richtigen mime-Typ sendet?

Was willst Du damit sagen? Nicht hinreichend sicher für *was*?

Ich kann doch hier den dollsten Virus auf meinem Windows-Rechner in
einer txt-Datei haben. Warum nicht? Der Virus ist trotzdem noch da, aber
er wird beim anklicken nicht ausgeführt und ist somit ungefährlich.

Ich kann die dollsten PHP-Shells in .txt-Dateien auf dem Server haben:
Mein Webserver wird sie nicht ausführen.

Grüße, Matthias
Arno Welzel
2013-02-14 04:06:06 UTC
Permalink
Post by Oliver Betz
Post by Alexander Schestag
gibt es eine *sichere* Methode, einen Dateityp vor einem Upload mittels
JavaScript zu prüfen? Also "sicher" wie in "nicht nur im Sinne einer
Pseudoprüfung der Dateiendung, sondern im Sinne einer Prüfung, die
sicherstellt, dass etwa ein Bild auch ein Bild ist und keine PHP-Shell"?
Wie will ein Angreifer den Webserver dazu bringen, eine auf .foo
endende Datei als PHP zu behandeln?
Ich verwende eine Whitelist von Dateiendungen, die hochgeladen werden
darf.
Die bringt aber nur etwas, wenn diese Liste auf dem Server geprüft wird.
--
Arno Welzel
http://arnowelzel.de
http://de-rec-fahrrad.de
Alexander Schestag
2013-02-14 07:05:39 UTC
Permalink
Post by Arno Welzel
Post by Oliver Betz
Ich verwende eine Whitelist von Dateiendungen, die hochgeladen werden
darf.
Die bringt aber nur etwas, wenn diese Liste auf dem Server geprüft wird.
Selbst dann nicht, da der Inhalt der Datei nicht durch die Endung
determiniert wird. Es gibt diverse Möglichkeiten, auch mit scheinbar
"korrekten" Dateiendungen böse Dinge zu tun.

Grüße,

Alex
--
http://www.parapsychologische-beratung.com
Stefan+ (Stefan Froehlich)
2013-02-14 08:06:16 UTC
Permalink
Post by Alexander Schestag
Post by Arno Welzel
Post by Oliver Betz
Ich verwende eine Whitelist von Dateiendungen, die hochgeladen werden
darf.
Die bringt aber nur etwas, wenn diese Liste auf dem Server geprüft wird.
Selbst dann nicht, da der Inhalt der Datei nicht durch die Endung
determiniert wird. Es gibt diverse Möglichkeiten, auch mit scheinbar
"korrekten" Dateiendungen böse Dinge zu tun.
Aber auch nur dann, wenn (im Fall der PHP-Shell) die Datei ausgefuehrt
wird. Und wer _das_ mit einem Upload versucht, der ist eh nicht mehr zu
retten.

Servus,
Stefan
--
http://kontaktinser.at/ - die kostenlose Kontaktboerse fuer Oesterreich
Offizieller Erstbesucher(TM) von mmeike

Stefan - niemand kichert arger oder auch starker.
(Sloganizer)
Arno Welzel
2013-02-14 12:39:40 UTC
Permalink
Post by Stefan+ (Stefan Froehlich)
Post by Alexander Schestag
Post by Arno Welzel
Post by Oliver Betz
Ich verwende eine Whitelist von Dateiendungen, die hochgeladen werden
darf.
Die bringt aber nur etwas, wenn diese Liste auf dem Server geprüft wird.
Selbst dann nicht, da der Inhalt der Datei nicht durch die Endung
determiniert wird. Es gibt diverse Möglichkeiten, auch mit scheinbar
"korrekten" Dateiendungen böse Dinge zu tun.
Aber auch nur dann, wenn (im Fall der PHP-Shell) die Datei ausgefuehrt
wird. Und wer _das_ mit einem Upload versucht, der ist eh nicht mehr zu
retten.
Es geht ja auch darum, dass die "böse" Datei erst hochgeladen und
*danach* ausgeführt wird.
--
Arno Welzel
http://arnowelzel.de
http://de-rec-fahrrad.de
Loading...