Susi F.: Upload script

Guten morgen an die netten Forum Mitglieder und hallo Tom vom Berg,

ich habe mir ein kleines Upload Script zusammengeschustert und Tom vom Berg hat mir auch schon einen kleinen tipp gegeben. Jetzt möchte ich von euch gerne wissen ob das Script auch so aus eurer Sicht ok ist da ich Anfänger in PHP schreiben bin. Das Script Funktioniert schon, nur fehlen mir noch zwei Sachen und zwar zum einen, ob überhaupt eine Datei ausgewählt wurde und zum anderen möchte ich dass der Dateiname vom Script automatisch umbenannt wird. Die Umbenennung soll mittels einer über POST übergebenen ID stattfinden. Also sagen wir mal aus der Datei hallo.gif wird 1568.gif. Wäre nett wenn Ihr mir mal was dazu schreiben könntet.

Vielen dank an alle Helfer,

Susi

Hier das Script;

<?php
error_reporting(E_ALL);
ini_set('display_errors',1);
?>
<html>
<head>
<title>upload</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<form enctype="multipart/form-data" action="" method="post">
<input name="datei" type="file" />
<input type="submit" value="Datei speichern" />
</form>
<?php

$datei = $_FILES['datei']['name'];
$dateityp = $_FILES['datei']['type'];
$max_byte_size = 60;
$mimearray=array("image/gif","image/jpeg","image/pjpeg");
$upload_verzeichnis = dirname($_SERVER['SCRIPT_FILENAME']) . '/upload/';

if(isset($_FILES['datei']['error']) and $_FILES['datei']['error'] === 0)
{
if(in_array($_FILES['datei']['type'],$mimearray))
{
if($_FILES['datei']['size'] <= $max_byte_size)
{
if (move_uploaded_file($_FILES['datei']['tmp_name'],"$upload_verzeichnis/$datei"))
{
echo "Datei erfolgreich hochgeladen!<br>";
echo "Name: " . $_FILES["datei"]["name"] . "<br>";
echo "Größe: " . $_FILES["datei"]["size"] . " Byte<br>";
echo "MIME-Type: " . $_FILES["datei"]["type"] . "<br>";
echo "Link: <a href="" . $_FILES["file"]["name"] . "">" . $_FILES["datei"]["name"] . "</a>";
}
else { echo "Datei konnte nicht hochgeladen werden."; }
}
else { echo "Die Datei darf nur " . $max_byte_size . " Byte gross sein."; }
}
else { echo "Die Datei besitzt keine gültige Endung."; }
}
?>
</body>
</html>

  1. Hallo Forum,

    ich möchte nicht ungeduldig erscheinen aber könnte mir bitte jemand sagen ob das script einigermaßen in Ordnung ist? Bitte stört euch nicht an die Reihenfolge der geschwungenen Klammern, für mich ist das eine bessere Orientierungshilfe!

    Dankeschön und Gruß,

    Susi

  2. Hello,

    <?php
    error_reporting(E_ALL);
    ini_set('display_errors',1);

    ?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
      <html>

    <head>
      <title>upload</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    </head>
    <body>
    <form enctype="multipart/form-data" action="" method="post">
    <input name="datei" type="file" />
    <input type="submit" value="Datei speichern" />
    </form>

    <?php

    if(isset($_FILES['datei']['error']) and $_FILES['datei']['error'] === 0)
      {
          $datei = basename($_FILES['datei']['name']);
          $dateityp_client = $_FILES['datei']['type'];

    $max_byte_size = 60;

    $mimearray = array("image/gif","image/jpeg","image/pjpeg");

    $upload_verzeichnis = dirname($_SERVER['SCRIPT_FILENAME']) . '/upload/';

    if(in_array($dateityp_client, $mimearray))
        {
            if($_FILES['datei']['size'] <= $max_byte_size)
            {
                if (move_uploaded_file($_FILES['datei']['tmp_name'],"$upload_verzeichnis/$datei"))
                {
                    echo "Datei erfolgreich hochgeladen!<br>";
                    echo "Name: " . htmlspecialchars($_FILES["datei"]["name"]) . "<br>";
                    echo "Größe: " . $_FILES["datei"]["size"] . " Byte<br>";
                    echo "MIME-Type: " . $_FILES["datei"]["type"] . "<br>";

    und hier wird es dann spätestens kriminell:

    echo "Link: <a href="" . $_FILES["file"]["name"] . "">" . $_FILES["datei"]["name"] . "</a>";
    }
    else { echo "Datei konnte nicht hochgeladen werden."; }
    }
    else { echo "Die Datei darf nur " . $max_byte_size . " Byte gross sein."; }
    }

    Nach der Endung hast Du doch gar nicht gefragt, sondern nach dem vom Client übermittelten MIME-Type.

    else { echo "Die Datei besitzt keine gültige Endung."; }

    Der MIME-Type kann aber gelogen sein. Die Datei könnte dann durchaus die Endung *.php haben. Stell Dir mal vor, irgendjemand schickt Dir eine solche PHP-Datei, für den der Client (anderer Host) den  MIME-Type 'image/gif' vorlügt und Du bietest dann sogar noch den dirketen Request der Ressource an durch Hyperlink an.

    Fragt sich nun, wieviel Schadsoftware man in 60 Bytes unterbringen könnte.
    (Ich frage mich auch, was Du mit 60 Bytes großen Bildern anfangen willst)

    Ich könnte mir vorstellen, dass man auch mit 60 Bytes PHP-Code schon viel anfangen kann.

    Außerdem hattest Du auf Variablen zugegriffen, deren Existenz noch nicht geklärt war.

    datei = $_FILES['datei']['name'];

    kannst Du erst zuweisen, wenn das $_FILES-Array auch belegt ist. Das ist aber erst dann der Fall, wenn PHP als error===0 eingetragen hat. (Wenn das Element dann trotzdem nicht da sein sollte, ist PHP kaputt.)

    Außerdem ist auch 'name' ein Parameter, der vom Client kommt und sollte daher nie direkt übernommen werden. Ich frage mich gerade, was wäre, wenn der '.htaccess' lauten würde?

    Zum Glück lässt sich die PUT-Methode nicht in einer .htaccess einschalten, sondern "nur" in einer VirtHost-Konfiguration oder der Stammkonfiguration des Servers. Sonst würden 60 Bytes auf jeden Fall reichen!

    Das Umkopieren    datei = $_FILES['datei']['name']    ist auch nicht notwendig, wenn man mit der Variablen aus dem Array sonst nichts weiter macht. Sie steht ja die ganze Scriptlaufzeit zur Verfügung.

    Die Übernahme des MIME-Type vom Client ist die schlimmste Lücke, die Du gerissen hast.
    Den solltest Du auf jeden Fall auf dem Server mit einem Programm überprüfen. Leider hat PHP die Funktion dafür für die Zukunft herausgenommen und eine aus dem PEAR oder PECL-Paket dafür empfohlen, die nachweislich nichts taugt. Die alte PHP-Funtktion war besser. Noch ist sie aber drin im Paket, also nutze sie.

    http://de3.php.net/manual/de/function.mime-content-type.php

    Außerdem sollte man aus Sicherheitsgründen das Verzeichnis, in dem man die Bilder stapelt, die dann dort direkt über HTTP erreichbar sind, vom Parsen ausnehmen. Das ist leider nicht bei jedem Hoster möglich. Es wäre aber eine gute Empfehlung an Hoster, solch ein Verzeichnis standardmäßig mit anzubieten beim Webhosting.

    Versuch mal, ob Du Dir selber so eines bauen kannst.

    Das Apache-Manual gibt Aufschluss darüber:

    http://httpd.apache.org/docs/2.2/mod/core.html#forcetype
    und
    http://httpd.apache.org/docs/2.2/mod/core.html#filesmatch

    Ein harzliches Glückauf

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. Hallo Tom vom Berg,

      erst einmal vielen dank das Du mir die Augen öffnest!!!
      Habe mir die Programmierung des scriptes echt leichter vorgestellt aber jetzt bin ich doch irgendwie an meine grenzen des Verstands angekommen und muss ehrlich sagen das ich wohl zu blöd bin all dieses zu verstehen. Ich habe mir innerhalb 4 Wochen bestimmt 50 Upload Scripte angeschaut, hunderte Forenbeiträge gelesen sowie mich durchgewuselt bei http://de3.php.net/manual/de/ und anderen Manuals sowie Tutorials, seitdem versuche ich was Anständiges hinzubekommen leider bisher ohne erfolg. Hochladen tut das von mir zusammen gewürfelte script ja, aber es ist total unsicher und das sollte auf keinen fall sein.

      Du hast ja einiges an meinem vorherigen Script verändert und ich kann noch nicht einmal sagen ob Du es jetzt etwas sicherer gemacht hast oder nicht. Den Hyperlink habe ich raus genommen, der war sowieso fehl am platz. Das mit den 60 Bytes ist nur eine probe gewesen um zu schauen ob das script, Dateien höherer Anzahl, durchlässt. Hat es nicht gemacht und ausgegeben wurde der Fehler. Auch habe ich vorher eine php Datei als gif getarnt also 1.php wurde 1.gif sowie 1.php wurde 1.php.gif, diese wurden auch nicht hochgeladen und der Fehler die Datei besitzt keine gültige Endung ist ausgegeben worden. Deswegen fühlte ich mich schon auf einer etwas Sicheren Seite da die scripte die ich gesehen habe auch so ungefähr aufgebaut waren.

      Jetzt hast Du auf mehrere Links verwiesen und ich weiß gar nicht mehr was ich machen soll. http://de3.php.net/manual/de/function.mime-content-type.php habe ich mir angeschaut und zu diesem Thema habe ich noch zwei andere Einträge von Dir gefunden (http://forum.de.selfhtml.org/archiv/2005/2/t100192/
      und http://tutorial.riehle-web.com/scripts/mime-type.inc.txt).

      Des Weiteren habe ich mir auch die Links; http://httpd.apache.org/docs/2.2/mod/core.html#forcetype
      und
      http://httpd.apache.org/docs/2.2/mod/core.html#filesmatch angeschaut und hier habe ich einen total Error meines Kleinhirns erhalten!

      Ich weiß nicht mehr was ich tun soll, das soll nicht heißen dass ich zu faul dafür bin,
      verstehe dass bitte nicht falsch aber ich komme an meine Grenzen.
      Kennst Du den jemanden der ein Upload Script wie es jetzt unten steht (nur auf Sicherer Basis) verkauft? Die Umbenennung des Dateinamens über eine POST übergebene ID sollte auf jeden fall vorhanden sein!

      Wäre nett wenn Du mir bescheid geben könntest.

      Vielen dank noch mal an Dich,

      Susi

      Hier Dein verändertes script:

      <?php
      error_reporting(E_ALL);
      ini_set('display_errors',1);
      ?>
      <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
      <html>

      <head>
      <title>upload</title>
      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
      </head>
      <body>
      <form enctype="multipart/form-data" action="" method="post">
      <input name="datei" type="file" />
      <input type="submit" value="Datei speichern" />
      </form>

      <?php

      if(isset($_FILES['datei']['error']) and $_FILES['datei']['error'] === 0)
        {
            $datei = basename($_FILES['datei']['name']);
            $dateityp_client = $_FILES['datei']['type'];

      $max_byte_size = 60;

      $mimearray = array("image/gif","image/jpeg","image/pjpeg");

      $upload_verzeichnis = dirname($_SERVER['SCRIPT_FILENAME']) . '/upload/';

      if(in_array($dateityp_client, $mimearray))
         {
              if($_FILES['datei']['size'] <= $max_byte_size)
         {
              if (move_uploaded_file($_FILES['datei']['tmp_name'],"$upload_verzeichnis/$datei"))
         {
              echo "Datei erfolgreich hochgeladen!<br>";
              echo "Name: " . htmlspecialchars($_FILES["datei"]["name"]) . "<br>";
              echo "Größe: " . $_FILES["datei"]["size"] . " Byte<br>";
              echo "MIME-Type: " . $_FILES["datei"]["type"] . "<br>";
              }
              else { echo "Datei konnte nicht hochgeladen werden."; }
              }
              else { echo "Die Datei darf nur " . $max_byte_size . " Byte gross sein."; }
              }
              else { echo "Die Datei besitzt keine gültige Endung."; }
              }
      ?>
      </body>
      </html>

      1. Hello Susi F.,

        Den Hyperlink habe ich raus genommen, der war sowieso fehl am platz.

        Der Hyperlink als solches ist nicth schädlich, wenn die Bilder ja sowieso irgendwann über HTTP erreichbar sein sollen. Er ist nur dann schädlich, wenn nicht sichergestellt ist, dass es sich auch nur um Bilder handeln kann.

        Um das zu testen, könntest Du auch zusätzlich zum MIME-Type-Prüfung auf dem Server die PHP-Funktion

        getimagesize() http://de.php.net/manual/de/function.getimagesize.php verwenden

        Das mit den 60 Bytes ist nur eine probe gewesen um zu schauen ob das script, Dateien höherer Anzahl, durchlässt. Hat es nicht gemacht und ausgegeben wurde der Fehler.

        Wurde auch nicht bemängelt, sondern hat nur die Nebenfrage aufgeworden, was Du mit 60Byte großen Bildern willst.

        Auch habe ich vorher eine php Datei als gif getarnt also 1.php wurde 1.gif sowie 1.php wurde 1.php.gif, diese wurden auch nicht hochgeladen und der Fehler die Datei besitzt keine gültige Endung ist ausgegeben worden. Deswegen fühlte ich mich schon auf einer etwas Sicheren Seite da die scripte die ich gesehen habe auch so ungefähr aufgebaut waren.

        Das liegt aber wahrscheinlich daran, dass DEIN Client beim MIME-Type nicht gelogen hat, sondern den richtigen mitgeliefert hat.

        Jetzt hast Du auf mehrere Links verwiesen und ich weiß gar nicht mehr was ich machen soll. http://de3.php.net/manual/de/function.mime-content-type.php habe ich mir angeschaut und zu diesem Thema habe ich noch zwei andere Einträge von Dir gefunden (http://forum.de.selfhtml.org/archiv/2005/2/t100192/

        Mit der Funktion beschäftige ich mich gerade. Sie basiert auf dem Programm 'file' auf Linux-Servern. Es gibt auch eine vergleichbare Funktion für WinDOSen. Die suche ich gerade noch.

        Solange die PHP-eigene Funktion mime_content_type() zur Verfügung steht, kannst Du die benutzen.
        Was sagt denn deine Funktion get_defined_functions()? Ist die gewünschte Funktion dabei?

        und http://tutorial.riehle-web.com/scripts/mime-type.inc.txt).

        Die Funktion von Dennis liefert NUR den zur Endung gehörenden MIME-Content-Type.
        Das ist eben bei Fälschung meider nicht derjenige, der zum Inhalt gehört.
        Sie dürfte demnach auch nicht mime_content_type() heißen, sondern mime_extension_type()

        Des Weiteren habe ich mir auch die Links; http://httpd.apache.org/docs/2.2/mod/core.html#forcetype
        und
        http://httpd.apache.org/docs/2.2/mod/core.html#filesmatch angeschaut und hier habe ich einen total Error meines Kleinhirns erhalten!

        Dann nimm doch einfach das Großhirn dazu. :-)

        Die Konfigurationen habe ich Dir nur genannt, falls Du Dir auf dem Server ein _ungeparstes_ Verzeichnis bauen willst. Damit könnte man verhindern, dass PHP in einem bestimmten Verzeichnis tätig wird, auch wenn die Dateien sonst geparsed würden.

        Ich weiß nicht mehr was ich tun soll, das soll nicht heißen dass ich zu faul dafür bin,
        verstehe dass bitte nicht falsch aber ich komme an meine Grenzen.
        Kennst Du den jemanden der ein Upload Script wie es jetzt unten steht (nur auf Sicherer Basis) verkauft? Die Umbenennung des Dateinamens über eine POST übergebene ID sollte auf jeden fall vorhanden sein!

        Mal langsam. Es wird sich auch für Dich noch eine Lösung finden.
        Es ist aber nicht unbedingt alleine mit dem Script getan. MMn muss man auch in der Serverkonfiguration für zusätzliche Sicherheit sorgen (ungeparstes Verzeichnis).

        Ein harzliches Glückauf

        Tom vom Berg

        --
        Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de
        1. Hallo Tom vom Berg,

          nochmals DANKE, DANKE, DANKE für Deine Hilfe.
          Überhaupt ist dieses Forum Gold wert weil sehr viel erklärt wird und ich als Leie schon einiges dazugelernt habe. Nur bei vielen Themen genügt es auch nicht wenn man das Großhirn dazuschaltet! :-)

          Ich hatte gestern einen PC Ausfall und deshalb konnte ich mich nicht mehr melden. Irgendwie hat das Netzteil denn Geist aufgegeben. War wohl zu viel php im spiel! ;-)
          Na ja, zum glück hatte ich noch eins zur Reserve und jetzt läuft die Kiste wieder.

          Also zur Serverkonfiguration kann ich Dir sagen dass mein Projekt zurzeit bei einem Bekannten zu Testzwecken sowie auch in der Zukunft erst einmal auf einen Strato Server laufen wird.

          Die info.php sagt das System wäre SunOS, PHP Version 4.4.8,
          register_globals steht beides auf off,
          mime_content_type
          und
          mime_extension_type sind nicht aufgeführt aber es steht dort default_mimetype und die ist auf text/html eingestellt. Weitere mime wurden nicht aufgeführt.

          Habe dann nach extension gesucht und aufgeführt wurde extension_dir, eingetragen ist ./
          Bei type wurde mir aufgeführt;
          ctype functions ist enabled,
          Supported filetypes ist JPEG sowie TIFF,
          FreeType Support ist enabled,
          FreeType Linkage ist with freetype,
          MYSQL_MODULE_TYPE ist external,
          doctype-mode ist 1
          und
          doctype ist no value.

          Auch nicht dabei ist die Funktion get_defined_functions aber mit get habe ich folgendes gefunden;
          _ENV["REQUEST_METHOD"] ist auf GET,
          _SERVER["REQUEST_METHOD"] ist auf GET,
          REQUEST_METHOD ist auf GET
          und
          GetText Support ist eingestellt auf enabled.

          Weiter habe ich nach defined gesucht aber hier gab es gar nichts und bei functions wurde mir nur disable_functions ausgegeben mit no value und ctype functions und die ist enabled.

          Ich hoffe das ich jetzt an der richtigen stelle gesucht habe und Du auch was mit diesen Angaben anfangen kannst.

          Auch habe ich mal geschaut was es mit dem getimagesize auf sich hat und habe bei http://de.php.net/getimagesize auch was dazu gefunden. Nur weiß ich auch hier überhaupt nicht wo im script dieses eingebaut werden muss.

          Ich wünsche Dir erst einmal einen Harzlichen Sonnigen Montag!

          Gruß,

          Susi

          1. Hello,

            nochmals DANKE, DANKE, DANKE für Deine Hilfe.
            Überhaupt ist dieses Forum Gold wert weil sehr viel erklärt wird und ich als Leie schon einiges dazugelernt habe. Nur bei vielen Themen genügt es auch nicht wenn man das Großhirn dazuschaltet! :-)

            Wenn sinnvolle Rückmeldungen über Erfolg oder Misserfolg kommen, macht es auch Spaß zu helfen, denn wer füttert schon gerne "scharze Löcher"?

            Die info.php sagt das System wäre SunOS, PHP Version 4.4.8,
            register_globals steht beides auf off,
            mime_content_type
            und
            mime_extension_type sind nicht aufgeführt aber es steht dort default_mimetype und die ist auf text/html eingestellt. Weitere mime wurden nicht aufgeführt.

            Wenn Du Dein File *.php5 nennst, wirst Du eine ganz andere PHP-Info bekommen. :-)

            Auch nicht dabei ist die Funktion get_defined_functions

            http://de3.php.net/manual/de/function.get-defined-functions.php
            muss aber dabei sein. Es ist eine Funktion und keine Einstellung.

            Ich hoffe das ich jetzt an der richtigen stelle gesucht habe und Du auch was mit diesen Angaben anfangen kannst.

            Nö, such nochmal mit Hilfe der Funktion get_defined_functions()

            <?php   ### functions.php5 ###

            $_func = get_defined_functions();
                natsort($_func['internal']);
                natsort($_func['user']);

            echo "<pre>\r\n";
                echo htmlspecialchars(print_r($_func,1));
                echo "</pre>\r\n";

            ?>

            Ein harzliches Glückauf

            Tom vom Berg

            --
            Nur selber lernen macht schlau
            http://bergpost.annerschbarrich.de
            1. Hallo Tom vom Berg,

              meine Güte ich wurde gerade erschlagen von Text in der functions.php5.

              So, mal tief durchatmen und dann fange ich mal an mit der functions.php5.
              <?php
                  $_func = get_defined_functions();
                  natsort($_func['internal']);
                  natsort($_func['user']);

              echo "<pre>\r\n";
                  echo htmlspecialchars(print_r($_func,1));
                  echo "</pre>\r\n";
              ?>

              [35] => get_defined_functions steht drin aber ohne die runden Klammern () am ende, eher gesagt sind die ganzen angaben in Klammern eingeschlossen;

              mime_content_type und mime_extension_type stehen aber nicht drin!

              Dafür steht aber mit mime;
              [192] => image_type_to_mime_type
              [1077] => mb_preferred_mime_name
              [1096] => mb_encode_mimeheader
              [1097] => mb_decode_mimeheader
              [1172] => imap_mime_header_decode
              [1201] => iconv_mime_encode
              [1202] => iconv_mime_decode
              [1203] => iconv_mime_decode_headers

              und mit content;
              [483] => file_get_contents
              [484] => file_put_contents
              [504] => stream_get_contents
              [592] => ob_get_contents

              und mit extension;
              [39] => get_loaded_extensions
              [40] => extension_loaded
              [41] => get_extension_funcs
              [193] => image_type_to_extension
              [694] => spl_autoload_extensions

              und zum guten schluss mit type dieses;
              [38] => get_resource_type
              [193] => image_type_to_extension
              [192] => image_type_to_mime_type
              [430] => gettype
              [431] => settype
              [553] => filetype
              [744] => sqlite_fetch_column_types
              [958] => mysql_field_type
              [976] => mysql_fieldtype
              [883] => mysqli_rpl_query_type
              [1007] => mssql_field_type
              [1292] => imagetypes
              [1314] => ftp_systype
              [1345] => exif_imagetype
              [1407] => ctype_alnum
              [1408] => ctype_alpha
              [1409] => ctype_cntrl
              [1410] => ctype_digit
              [1412] => ctype_graph
              [1411] => ctype_lower
              [1413] => ctype_print
              [1414] => ctype_punct
              [1415] => ctype_space
              [1416] => ctype_upper
              [1417] => ctype_xdigit
              [1477] => zlib_get_coding_type

              Ich habe jetzt mehrfach überprüft ob nicht doch mime_content_type oder mime_extension_type irgendwo steht man kann ja auch mal was übersehen und deshalb prüfe ich öfter nach. Also definitiv steht es nicht in functions.php5.

              Jetzt noch mal tief Luft hohlen und dann geht es weiter mit der info.php5
              <?php
              phpinfo();
              ?>

              Die info.php5 schreibt mir das System wäre SunOS, PHP Version 5.2.5,
              register_globals steht beides auf off,
              mime_content_type
              und auch
              mime_extension_type sind beide nicht aufgeführt.

              Habe dann weiter nach mime gesucht, ausgegeben bekam ich nur dieses;
              default_mimetype  text/html  text/html

              dann nach content;
              Da gab es nichts.

              weiter nach extension;
              extension_dir  ./      ./

              und zum Schluss nach type;
              default_mimetype  text/html  text/html
              ctype functions ist enabled
              Supported filetypes ist Jpeg und Tiff
              FreeType Support ist enabled
              FreeType Linkage ist with freetype
              FreeType Version ist 2.1.7
              MYSQL_MODULE_TYPE ist external

              Ich will hoffen dass ich nicht von den Forenbetreibern erschlagen werde weil ich soviel zeug hier rein schreibe. :-)

              Bin mal auf Dein Statement gespannt ob ich es jetzt richtig gemacht habe. ;-)

              Beste Grüße,

              Susi

              1. Hello Susi,

                meine Güte ich wurde gerade erschlagen von Text in der functions.php5.

                Klar, das Script sollte alle verfügbaren Funktionsnamen anzeigen, und zwar in logisch/alphabetischer Reihenfolge.

                [35] => get_defined_functions steht drin aber ohne die runden Klammern () am ende, eher gesagt sind die ganzen angaben in Klammern eingeschlossen;

                Das ist klar, da Dir die Funktion get_defined_functions() alle Namen der verfügbaren Funktionen in einem Array mit den Unterarrays 'internal' und 'user' bereitstellt. Mit print_r() lassen wir das Array dann ausgeben. Damit die Ausgabe nicht gegen die Regeln von validem HTML verstößt, wird sie aber nicht direkt mit print_r() auf die Standardausgabe geschickt, sondern als String aufbereitet (dafür ist die 1 als zweites Argument) und dieser dann mittels htmlspecialchars() in eine HTML-konforme Ausgabe Konvertiert.

                Dass bei einem PHP5 bei strato die Funktion mime_content_type() nicht vorhanden ist, glaube ich nicht, bevor ich es nicht sleber geprüft habe, oder hier drei andere Stratokunden das Gleiche sagen.

                Aber du kannst sie dann ja in PHP nachbauen, wenn Du an das magic_mime_file herankommst, also exec() ausführen darfst. Das sollte aber bei Strato nicht das Problem sein, da die ihre User in eine chroot-Umgebung stellen und die benötigten System-Funktionen und -Files normalerweise vorhanden sind.

                Wenn Du mime_content_type() tatsächlich nicht hast und auch nicht nachbauen kannst, dann könntest Du relativ hohe Sicherheit immer noch mit der Funktion getimagesize() herstellen.

                Da Du nur Images uploaden lassen willst, wäre die Kontrolle mit getimagesize() sowieso nicht dumm. Die Funktion erkennt alle von PHP üblicherweise erkannten Image-Types. Du kannst dann noch selektieren, welche Du davon zulassen willst.

                Das wäre eine kurzfristige Lösung, die auch ohne ausfühlichen PHP-Lehrgang klappen sollte.

                Ein harzliches Glückauf

                Tom vom Berg

                --
                Nur selber lernen macht schlau
                http://bergpost.annerschbarrich.de
                1. Guten morgen Tom vom Berg,

                  oh, da habe ich wohl bei den Funktionsnamen einen kleinen Fehler gemacht und zwar bei der logischen alphabetischen Reihenfolge, diese wurde von mir nach denn Nummern sortiert! Die Ausgabe ist aber alphabetisch sortiert da hast Du Recht. Sorry, Sorry, Sory!!!

                  Nach der mime_content_type habe ich nochmals in der info.php sowie in der info.php5 und der functions.php5 gesucht. Dieser Name wurde aber nicht angezeigt.

                  Weiter habe ich nach der magic_mime_file in der info.php, info.php5 und functions.php5 geschaut, diese gab es auch nicht.

                  Exec wurde mir in functions.php5 als [286] => exec angezeigt!

                  Das ich nur Images Hochladen möchte ist nicht richtig, da habe ich mich wohl noch gar nicht richtig zu geäußert. Das script sollte schon die Möglichkeiten bieten nachfolgende Dateien Hochzuladen sowie überprüfen und bei Fehlern einen Fehler ausgeben zu können;

                  .jpg, .jpeg, .gif (auch animierte gif), .flv, .avi, .mpg, .mpeg, .doc und .pdf !

                  Hier sollten auch bei bedarf die Byte abgeändert werden können.
                  Zusätzlich soll das Script den Dateinamen automatisch umbenennen.
                  Als neuen Dateinamen wird eine über POST übergebene ID (Wert) zugewiesen. Also aus Hallo.gif wird dann als Beispiel 236.gif. Das Script kann dann ruhig eine schon vorhandene Datei überschreiben.

                  Also, ich merke gerade dass ich mit einer kurzfristigen Lösung wohl doch nicht weit komme und es selbst zu schreiben übersteigt einfach meine Fähigkeiten.

                  Deswegen eine direkte frage an Dich, könntest Du mir so ein Upload Script entwickeln und wenn ja was würde es mich ungefähr kosten?

                  Entschuldige wenn ich so direkt bin, aber ich möchte mein Projekt was ich jetzt schon fast ein Jahr im angriff habe langsam aber sicher veröffentlichen.

                  Ich hoffe das Du über meinen Unmut nicht all zu enttäuscht bist, aber für einen Laien sind viele Sachen Spanische Dörfer und man muss wissen wo die Grenze erreicht ist!

                  Ich würde mich über ein Angebot Deinerseits sehr freuen.

                  Einen harzlichen Gruß ,

                  Susi

                  1. Hello,

                    Exec wurde mir in functions.php5 als [286] => exec angezeigt!

                    Die Nummer hat nichts zu bedeuten für die Funktion. Sie ist nur die lfd. Nummer im Array. Die kann jedes Mal anders sein, je nachdem, ob inzwischen neue Funktionen hinzugekommen sind, oder sich durch Updates irgendetwas verschoben hat.

                    Das ich nur Images Hochladen möchte ist nicht richtig, da habe ich mich wohl noch gar nicht richtig zu geäußert. Das script sollte schon die Möglichkeiten bieten nachfolgende Dateien Hochzuladen sowie überprüfen und bei Fehlern einen Fehler ausgeben zu können;

                    .jpg, .jpeg, .gif (auch animierte gif), .flv, .avi, .mpg, .mpeg, .doc und .pdf !

                    Hier sollten auch bei bedarf die Byte abgeändert werden können.
                    Zusätzlich soll das Script den Dateinamen automatisch umbenennen.
                    Als neuen Dateinamen wird eine über POST übergebene ID (Wert) zugewiesen. Also aus Hallo.gif wird dann als Beispiel 236.gif. Das Script kann dann ruhig eine schon vorhandene Datei überschreiben.

                    Also, ich merke gerade dass ich mit einer kurzfristigen Lösung wohl doch nicht weit komme und es selbst zu schreiben übersteigt einfach meine Fähigkeiten.

                    Deswegen eine direkte frage an Dich, könntest Du mir so ein Upload Script entwickeln und wenn ja was würde es mich ungefähr kosten?

                    Das könnte ich machen und weil es in abgespecker Form dann später in den überarbeiten Artikel von Self http://aktuell.de.selfhtml.org/artikel/php/php-uploadcheck/index.htm hineinkommt (da habe ich ja gemeckert, dass der Sicherheitslücken propagiert), wird das auch nicht teuer :-)

                    Schreib mir mal eine Mail und mach einen Vorschlag. Wir werden uns da bestimmt einig.
                    Ich kann aber nicht versprechen, dass ich es vor dem Wochenende schaffe.
                    Schreib auch gleich ein paar Daten über den Server, den Du benutzt dazu, was Du darfst, wer der Hoster ist, Konsolenzugang über ssh oder ähnlich vorhanden ist usw.

                    Das größte Problem dabei ist, einen (für alle Anwender verfügbaren) Workaraound für das Programm 'file' (Linux) zu finden, der den strengen Kontolleuren nachher auch standhält.

                    Ein harzliches Glückauf

                    Tom vom Berg

                    --
                    Nur selber lernen macht schlau
                    http://bergpost.annerschbarrich.de
                    1. Das könnte ich machen und weil es in abgespecker Form dann später in den überarbeiten Artikel von Self http://aktuell.de.selfhtml.org/artikel/php/php-uploadcheck/index.htm hineinkommt (da habe ich ja gemeckert, dass der Sicherheitslücken propagiert), wird das auch nicht teuer :-)

                      »»

                      Schreib mir mal eine Mail und mach einen Vorschlag. Wir werden uns da bestimmt einig.
                      Ich kann aber nicht versprechen, dass ich es vor dem Wochenende schaffe.
                      Schreib auch gleich ein paar Daten über den Server, den Du benutzt dazu, was Du darfst, wer der Hoster ist, Konsolenzugang über ssh oder ähnlich vorhanden ist usw.

                      »»
                      Hallo Tom vom Berg,

                      das hört sich doch super an, vielen dank!!!
                      Das Du es nicht bis zum Wochenende schaffst ist nicht schlimm, mach Dir bloß keinen Stress. Ich werde Dich in den nächsten 3 Tagen auf Deine E-Mail Adresse selfhtml.tom@online.de kontaktieren. Hier werde ich Dir dann die erforderlichen Daten übermitteln und die anderen Einzelheiten können wir dann auch gleich klären!
                      Nachdem zwischen uns alles besprochen wurde kannst Du mit dem Script anfangen. Ich nehme wohl an das Du das Upload Script innerhalb 14 Tagen wohl hinbekommst.

                      Also bis in den nächsten Tagen.

                      Harzliche Grüße von Susi

                      1. Hello,

                        Nachdem zwischen uns alles besprochen wurde kannst Du mit dem Script anfangen. Ich nehme wohl an das Du das Upload Script innerhalb 14 Tagen wohl hinbekommst.

                        Ich habe damit, ehrlich gesagt, schon angefangen. Aber Dein Anliegen wird dafür sorgen, dass es auch fertig wird und nicht zur Doktorarbeit mutiert.

                        Es muss ja nur funktionieren, leicht einzubinden sein, nach menschlichem Ermessen sicher sein, also alle bisher bekannten Lücken abdecken... und und und :-))

                        Ein harzliches Glückauf

                        Tom vom Berg

                        --
                        Nur selber lernen macht schlau
                        http://bergpost.annerschbarrich.de