Met456: Upload Script

Hi habe mal ein Upload script geschrieben aber es ladet nur bilder hoch wie kann isch auch exe dateien hochladen?

<FORM ENCTYPE="multipart/form-data" ACTION="upload.php" METHOD=POST>
Wählen Sie eine Datei:<br>
<INPUT NAME="datei" TYPE="file"><BR>
<INPUT TYPE="submit" VALUE="Upload">
</FORM>

<?
if (isset($datei))
{
echo "Temporärer Dateiname: $datei<br>";
echo "Original Dateiname: $datei_name<br>";
echo "Größe der Datei in Byte: $datei_size<br>";
echo "MIME-Type der Datei: $datei_type<br><br>";
copy($datei, $datei_name);
if($datei_type =="image/gif" or $datei_type == "image/pjpeg")
{
echo "<img src='$datei_name' border=1>";
}
}
?>

  1. Hallo,

    Das hier dürfte dich interessieren:
    http://aktuell.de.selfhtml.org/artikel/php/php-uploadcheck/

    Und dann würde ich dir noch diese Funktion ans Herz legen:
    http://de.php.net/manual/de/function.move-uploaded-file.php

    Gruß,
    Dodwin

  2. Hast du dir das Script nicht durchgelesen, nachdem dus übernommen hast?

    Schau dir mal die Zeile an:

    if($datei_type =="image/gif" or $datei_type == "image/pjpeg")

    Sie überprüft, ob die zu hochladende Datei ein Bild ist (image/gif, image/[p]jpg), sonst wird diese Datei nicht hochgeladen..

    Entferne diese Zeile und die dazugehörigen geschweiften Klammern, dann kannst du alles hochladen

    1. Hello,

      if($datei_type =="image/gif" or $datei_type == "image/pjpeg")

      Sie überprüft, ob die zu hochladende Datei ein Bild ist (image/gif, image/[p]jpg), sonst wird diese Datei nicht hochgeladen..

      Nein!
      Diese Zeile prüft nur, ob der Client gemeldet hat, es wäre ein image/gif, image/[p]jpg hochgeladen worden. Dahinter kann sich aber trotzdem eine ausführbare Datei verstecken.

      Was da tatsächlich hochgeladen wurde, muss dringend auf dem Server untersucht werden, bevor es weiterverarbeitet wird!

      eventuell hilft da als Leseeinstieg:

      http://www.php.net/manual/en/function.mime-content-type.php

      Harzliche Grüße vom Berg
      http://www.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau

    2. Hallo

      Hast du dir das Script nicht durchgelesen, nachdem dus übernommen hast?

      Schau dir mal die Zeile an:

      if($datei_type =="image/gif" or $datei_type == "image/pjpeg")

      Sie überprüft, ob die zu hochladende Datei ein Bild ist (image/gif, image/[p]jpg), sonst wird diese Datei nicht hochgeladen..

      Entferne diese Zeile und die dazugehörigen geschweiften Klammern, dann kannst du alles hochladen

      Das ist so nicht ganz korrekt.
      Die Datei wird immer hochgeladen (es sei denn, beim Upload tritt ein Fehler auf ;-)) Danach(!) wird nochmal geprüft, ob es sich um ein Bild handelt und nur die Bilder werden angezeigt. Die anderen Dateien liegen aber trotzdem auf dem Server (was eine ziemlich massive Sicherheitslücke darstellt. Google mal z.Bsp. nach c99.php, dann weißt du, warum du zum Beispiel .php Dateien lieber gar nicht erst annehmen solltest - ja, ich weiss, gilt wahrscheinlich auch für andere Dateitypen)

      Liebe Grüße mbr

  3. Hello,

    Lese-Tipp hast Du schon von Dodwin erhalten.

    Dein Script ist antiquiert.
    Es benutzt automatisch erzeugte Variablen, die neuere PHP-Versionen und -Installationen hoffentlich gar nicht mehr haben. Sie sind zudem "ungeschützt".

    Aber das wichtigste:

    Zuallererst sollte man nach einem erfolgten Upload auf Fehler prüfen!

    if(isset($_FILES[$datei]))    ### Gab es einen Upload?
      {

    if($_FILES[$datei]['error'] === 0)    ### war es ein single upload, hat er geklappt?
        {
          # alles ok, weitermachen
          # ...

    }
        elseif( isarray($_FILES[$datei]['error']))  ### war es in multiple upload?
        {
          foreach($_FILES['error'] as $error)       ### welcher der vielen hat geklappt?
          {
            if($_FILES['error'] === 0)
            {
              # alles ok, weitermachen
              # ...
            }
          }
        }
      }
      else
      {
        ### kein Upload stattgefunden
        ### eventuell Ausgabe veranlassen
      }

    http://www.php.net/manual/en/features.file-upload.php
    http://www.php.net/manual/en/control-structures.elseif.php
    http://www.php.net/manual/en/function.is-array.php
    http://http://www.php.net/manual/en/control-structures.foreach.php

    Harzliche Grüße vom Berg
    http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau

    1. Hello,

      Hello,

      Lese-Tipp hast Du schon von Dodwin erhalten.

      Dein Script ist antiquiert.
      Es benutzt automatisch erzeugte Variablen, die neuere PHP-Versionen und -Installationen hoffentlich gar nicht mehr haben. Sie sind zudem "ungeschützt".

      Aber das wichtigste:

      Zuallererst sollte man nach einem erfolgten Upload auf Fehler prüfen!

      if(isset($_FILES[$datei]))    ### Gab es einen Upload?
        {

      if($_FILES[$datei]['error'] === 0)    ### war es ein single upload, hat er geklappt?
          {
            # alles ok, weitermachen
            # ...

      }
          elseif( isarray($_FILES[$datei]['error']))  ### war es in multiple upload?
          {
            foreach($_FILES[$datei]['error'] as $key => $error)       ### welcher der vielen hat geklappt?
            {
              if($error === 0)
              {
                # alles ok, weitermachen

      # $dateiname = $_FILES[$datei][name][$key];
                  # $tmp_name = $_FILES[$datei][tmp_name][$key];
                  # ...

      }
            }
          }
        }
        else
        {
          ### kein Upload stattgefunden
          ### eventuell Ausgabe veranlassen
        }

      http://www.php.net/manual/en/features.file-upload.php
      http://www.php.net/manual/en/control-structures.elseif.php
      http://www.php.net/manual/en/function.is-array.php
      http://www.php.net/manual/en/control-structures.foreach.php

      Harzliche Grüße vom Berg
      http://www.annerschbarrich.de

      Tom

      Harzliche Grüße vom Berg
      http://www.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau

  4. Hallo,
    das Skript lädt beliebige(!) Dateien hoch (auch .exe Dateien). Wie kommst du darauf, dass dem nicht so wäre? Schau mal auf dem Server in das Verzeichnis, wo auch das Skript liegt. Dort wirst du alle Dateien finden, die du bisher hochgeladen hast.
    Allerdings solltest du dir bezüglich der Sicherheit noch einige Gedanken machen. Weiterhin scheinst du  register globals auf on gestellt zu haben (sonst dürfte das Skript _so_ nicht funktionieren). Lies dir mal diese Seite bei php.net durch.

    Liebe Grüße mbr