cayaphas: sicherheitsrisiko: upload von html-dateien

tach,

Ich habe ein eigenes kleines CMS geschrieben, und biete da unter anderem so Sachen an, wie einen Datei-Download einzurichten.

Ich würde gerne ein weiters Feature hinzufügen, bei dem der User einen html-Link setzten kann, auf eigene erstellte html-dateien.

Ich habe es mir so vorgestellt, dass der User selbsterstellte "HTML-Projekte" hochladen kann. Sowas gibts doch z.B. wenn ne Office Anwendung irgendwelche HTML-Seiten exportiert, oder irgendwelche selbsterstellten Bildergallerien von Photoshop.

Es wird ein Verzeichnis angelegt, in dem diese ganzen Dateien abgelegt werden, und einfach ein Link auf dieses Verzeichnis gelegt (respektive auf die zu verlinkende datei im Verzeichnis).

Ich hab zwar ein paar Sachen hier im Forum gefunden, wie man das machen kann, hab aber nirgends die jeweiligen Vorteile und Nachteile gefunden, und bei mir geht es eigentlich mehr um das Verständnis.

Es geht ja darum, dass ich dafür sorgen muss, dass eine Ausführung von Skripten verhindert muss.

Und ich hab 2 Möglichkeiten gefunden:

  • Einerseits testen des MIME-Typs und eliminieren von allen Dateien die nicht bilder, html etc. sind.
  • andererseits Verhindern der Ausführung von Skripten per .htaccess Datei (es gibt anscheinend sowas wie eine -ExecCGI Option)

Ich hab bis jetzt von beiden Sachen noch zu wenig Ahnung, werd mich aber noch einlesen. (Ich kann zwar schon was damit anfangen, aber bin halt noch kein Experte)

Ich würde auch nur gerne wissen, ob das sämtliche Möglichkeiten sind, um Skripte zu verhindern, und was für das eine bzw. für das andere spricht. Oder ob es Sinn macht beides zu implementieren.

Ich möchte nur die generellen Möglichkeiten erfahren, bzw. Vor- und Nachteile wissen, da es mit Sicherheit noch Sachen gibt, die ich nicht berücksichtigt hab.
Wie schon gesagt: Verständnis.

Ich dank Euch im Voraus
caya

  1. hi,

    Es geht ja darum, dass ich dafür sorgen muss, dass eine Ausführung von Skripten verhindert muss.

    Im Archiv findest du schon mal eine recht ausführliche Diskussion darüber, welche Dateiendungen als kritisch anzusehen sein könnten.

    Ich würde auch nur gerne wissen, ob das sämtliche Möglichkeiten sind, um Skripte zu verhindern

    Wenn du HTML-Dokumente zulässt, könnte ja auch darin enthaltener Javascript-Code eine Gefahr darstellen - über den sich dann bspw. die Cookies der Anwender klauen lassen.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Im Archiv findest du schon mal eine recht ausführliche Diskussion darüber, welche Dateiendungen als kritisch anzusehen sein könnten.

      Jepp, hab ich auch schon gefunden gehabt ...
      Ich bin auch davon ausgegangen, dass ich durch das Überprüfen der Dateiendungen schon mal die "offensichtlichen" , "möglichen" Skripte vermeiden kann.
      Dank dir schon mal für die Bestätigung.

      Wenn du HTML-Dokumente zulässt, könnte ja auch darin enthaltener Javascript-Code eine Gefahr darstellen - über den sich dann bspw. die Cookies der Anwender klauen lassen.

      Das stimmt natürlich immer, sobald ich html-Dateien zulasse, aber da kann ich mir zumindest schon mal sicher sein, dass durch das Verhindern von serverseitigen Skripten, auf meinem Server kein Unfug getrieben werden kann.

      Und eben solch eine Bestätigung hab ich gesucht.

      Ich war mir eben nicht sicher, ob es doch eine Möglichkeit gibt, Skript-Dateien bzw. Skripte generell abzufangen (z.B. durch ein .htaccess Eintrag;
      natürlich immer unter der Prämisse, dass der Server selbst korrekt konfiguriert ist)

      Ebenso unsicher bin ich mir dabei, ob es Dateien auch mit zugelassenen Dateiendungen (*.html, *.htm, *.jpg etc.) irgendwie möglich ist, serverseitige Skripte auszuführen.
      (Da hab ich eben zuwenig Ahnung von Skriptausführung auf dem Server)

      Aber ich hab halt auch hier im Forum sehr oft die Lösung gefunden, dass man auf die Dateiendung abfrägt, also geh ich auch davon aus, dass dadurch sehr viel abgefangen wird.

      Ich werd mich noch ein wenig durchlesen, bin aber schon um einiges beruhigter.

      Dank Euch
      caya

      1. Hallo ,

        Wenn du HTML-Dokumente zulässt, könnte ja auch darin
        enthaltener Javascript-Code eine Gefahr darstellen - über
        den sich dann bspw. die Cookies der Anwender klauen
        lassen.

        Das stimmt natürlich immer, sobald ich html-Dateien zulasse,

        Auch Bild Datein koennen Code enthalten. Der Interner Exploid
        schickt jede Datei die er bekommt, ungefragt, durch seine Script
        Engine.
        Das so etwas Natuerlich nicht so toll ist, ist klar.

        Ich kann mich erinnern, das es vor ein paar Jahren ein Script in
        einem Bild gab, welches das CD-Laumfwerk oeffnete...

        da kann ich mir zumindest schon mal sicher sein, dass durch
        das Verhindern von serverseitigen Skripten, auf meinem Server kein
        Unfug getrieben werden kann.

        Ebenso unsicher bin ich mir dabei, ob es Dateien auch mit
        zugelassenen Dateiendungen (*.html, *.htm, *.jpg etc.)
        irgendwie möglich ist, serverseitige Skripte auszuführen.
        (Da hab ich eben zuwenig Ahnung von Skriptausführung auf dem
        Server)

        *.html, *.htm sind Moeglicherweise in der Lage Serverseitig Code
        auszufuehren. Es kommt da drauf an, welche Datei-Typen du dem
        Script-Interpreter gibst vgl. PHP Konfiuration des WebServers
        oder Perl WebServer Configuration

        AddType application/x-httpd-php .php  
        AddHandler cgi-script .cgi
        

        In beiden, kann ich ohne Probleme auch .html als ausfuehrbar
        eintragen. Bei PHP ist es sogar ueblich. (Bei JSP und anderen
        Techniken bin ich mir nicht so sicher, aber ich denke auch dort
        geht sowat.)

        Jetzt hast du 2 Moeglichkeiten, entweder HTML einfach so zu
        erlauben.
          Oder in dein Script eine Regular Expression einbauen, die prueft
        ob die Datei Verdaechtigen Code enthalten koennte, was die
        bessere der beiden ist.
        Alle Seiten die Code enthalten, werden :
          A) zurueck gewiesen
          B) Der Code wir aus dem Quelltext geloescht

        Ist deine Entscheidung. Ich selbst tendiere eindeutig zu B.
        Wenn du dazu Fragen hast, frag mich morgen, oder wen anderes
        jederzeit.

        gruesse aus'm (schlaefrigem ;) ruhrpott
          jens mueller

        --
        As long as a single mind remembers, as long as a single heart
        beats with passion, how can a dream die?
        \//_ Live long and prosper