Hendrik: Hochgeladene Datei auf Dateityp überprüfen?

Hey!

Ich bins mal wieder! Ich bin dabei, ein Script zu schreiben, mit dem angemeldete User meiner Seite Dateien hochladen können.

Allerdings darf ich dabei auch den Sicherheitsaspekt nicht außer Acht lassen. So möchte ich natürlich überprüfen, welchen Dateityp die von ihm hochgeladene Datei hat. Wie fatal wäre es zum Beispiel, wenn er eine .htaccess-Datei hochlüde (oder hochladen würde?^^)?!

Da ich aber von mehreren Quellen gehört habe, dass nicht immer der korrekte Mime-Type übertragen wird, wenn man es mit $_FILES['file']['type'] überprüft, und ich auch schon selbst Erfahrungen gemacht habe (mit Microsofts merkwürdiger jpg-Endung), wollte ich euch fragen, ob es noch eine andere Möglichkeit gibt, den (exakten) Dateitypen einer Datei herauszukriegen. Eine Funktion wie getimagesize[2] würde ich sehr begrüßen. Gibt es dergleichen?

Wenn ihr schon Erfahrungen damit gemacht habt (auch von anderen Sicherheitsaspekten) würde ich gerne davon hören.

Hendrik

--
-------------------
Zur Info: Ich habe leider nur PHP 4.4.4 und MySQL 4.1.22 zur Verfügung!
-------------------
ie:% fl:| br:> va:) ls:[ fo:) rl:( n4:° ss:| de:> js:| ch:? sh:( mo:) zu:)
SELFCode Decoder
  1. Hallo Hendrik.

    Ich bins mal wieder! Ich bin dabei, ein Script zu schreiben, mit dem angemeldete User meiner Seite Dateien hochladen können.

    Allerdings darf ich dabei auch den Sicherheitsaspekt nicht außer Acht lassen. So möchte ich natürlich überprüfen, welchen Dateityp die von ihm hochgeladene Datei hat.

    Den Dateitypen kannst du per mime_content_type ermitteln.

    Wie fatal wäre es zum Beispiel, wenn er eine .htaccess-Datei hochlüde (oder hochladen würde?^^)?!

    Den hochgeladenen Dateinamen musst du schon selbst überprüfen. Eine .htaccess-Datei wäre vom an sich ungefährlichen Typ text/plain.

    Einen schönen Donnerstag noch.

    Gruß, Mathias

    --
    ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
    debian/rules
    1. Hey!

      Allerdings darf ich dabei auch den Sicherheitsaspekt nicht außer Acht lassen. So möchte ich natürlich überprüfen, welchen Dateityp die von ihm hochgeladene Datei hat.

      Den Dateitypen kannst du per mime_content_type ermitteln.

      Bei mir kommt da leider:
      Fatal error: Call to undefined function: mime_content_type() in /usr/***/***/***/***/index.php on line 108

      Ich habe PHP 4.4.4 und beim PHP-Manual steht ja eigentlich (PHP 4 >= 4.3.0, PHP 5)!?

      Wie fatal wäre es zum Beispiel, wenn er eine .htaccess-Datei hochlüde (oder hochladen würde?^^)?!

      Den hochgeladenen Dateinamen musst du schon selbst überprüfen. Eine .htaccess-Datei wäre vom an sich ungefährlichen Typ text/plain.

      Danke für die Info. Da hätt ich gar nicht mehr dran gedacht!

      Hendrik

      --
      -------------------
      Zur Info: Ich habe leider nur PHP 4.4.4 und MySQL 4.1.22 zur Verfügung!
      -------------------
      ie:% fl:| br:> va:) ls:[ fo:) rl:( n4:° ss:| de:> js:| ch:? sh:( mo:) zu:)
      SELFCode Decoder
      1. Hallo Hendrik.

        Fatal error: Call to undefined function: mime_content_type() in /usr/***/***/***/***/index.php on line 108

        Ich habe PHP 4.4.4 und beim PHP-Manual steht ja eigentlich (PHP 4 >= 4.3.0, PHP 5)!?

        Es sieht so aus als ob du PHP neu kompilieren müsstest, da die erforderliche Erweiterung fehlt. Sollte dies außerhalb deines Zugriffsbereiches liegen, sollte eine Nachfrage beim Provider weiterhelfen.

        Einen schönen Donnerstag noch.

        Gruß, Mathias

        --
        ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
        debian/rules
        1. Hey!

          Es sieht so aus als ob du PHP neu kompilieren müsstest, da die erforderliche Erweiterung fehlt. Sollte dies außerhalb deines Zugriffsbereiches liegen, sollte eine Nachfrage beim Provider weiterhelfen.

          Ich habe leider keinerlei Rechte, da ich bei einem kostenlosen Hoster bin. Sollte ich das vielleicht mal in meine Signatur reinschreiben?!

          Hendrik

          --
          -------------------
          Zur Info: Ich habe leider nur PHP 4.4.4 und MySQL 4.1.22 zur Verfügung!
          -------------------
          ie:% fl:| br:> va:) ls:[ fo:) rl:( n4:° ss:| de:> js:| ch:? sh:( mo:) zu:)
          SELFCode Decoder
      2. hi,

        Den Dateitypen kannst du per mime_content_type ermitteln.

        Bei mir kommt da leider:
        Fatal error: Call to undefined function: mime_content_type() in /usr/***/***/***/***/index.php on line 108

        Ich habe PHP 4.4.4 und beim PHP-Manual steht ja eigentlich (PHP 4 >= 4.3.0, PHP 5)!?

        Wenn du von der Seite mit der Funktionsbeschreibung auf die Kapitelübersicht Mimetype Functions wechselst, steht dort doch klipp und klar, dass a) diese Erweiterung installiert/einkompiliert sein muss, und dass sie b) inzwischen deprecated ist, zugunsten der PECL Extension "Fileinfo".

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
        1. Hey!

          Wenn du von der Seite mit der Funktionsbeschreibung auf die Kapitelübersicht Mimetype Functions wechselst, steht dort doch klipp und klar, dass a) diese Erweiterung installiert/einkompiliert sein muss, und dass sie b) inzwischen deprecated ist, zugunsten der PECL Extension "Fileinfo".

          Tschuldigung. Wie kann ich es sonst überprüfen? Hast du eine Idee oder gibt es noch eine andere Funktion?!

          Hendrik

          --
          -------------------
          Zur Info: Ich habe leider nur PHP 4.4.4 und MySQL 4.1.22 zur Verfügung!
          -------------------
          ie:% fl:| br:> va:) ls:[ fo:) rl:( n4:° ss:| de:> js:| ch:? sh:( mo:) zu:)
          SELFCode Decoder
          1. Hallo Hendrik.

            Wenn du von der Seite mit der Funktionsbeschreibung auf die Kapitelübersicht Mimetype Functions wechselst, steht dort doch klipp und klar, dass a) diese Erweiterung installiert/einkompiliert sein muss, und dass sie b) inzwischen deprecated ist, zugunsten der PECL Extension "Fileinfo".

            Tschuldigung. Wie kann ich es sonst überprüfen? Hast du eine Idee oder gibt es noch eine andere Funktion?!

            Du könntest versuchen, auf das Systemkommando „file“ zuzugreifen.

            Einen schönen Freitag noch.

            Gruß, Mathias

            --
            ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
            debian/rules