[Funktion] mime_type_conent

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Funktion] mime_type_conent

    hallo

    leider ist die funktion mime_type_content nicht verüfgbar.
    nun habe ich im inet eine aternative gefunden, die ich aber wegen deren kompexität, und fehlenden profi-php wissenn, nicht zurecht finde
    PHP-Code:
    <?php

    /*

    Magic mime file interpreter
    Copyright (c) 2004 by Phillip Berndt
    Version 1.0

    */

    if(!function_exists('mime_content_type'))
    {
    function 
    mime_content_type($file)
    {
    static 
    $mimeData;

    if(!isset(
    $mimeData))
    {
    $mimeFile file('./magic.mime');

    foreach(
    $mimeFile as $mimeLine)
    if(
    $mimeLine[0] != '#' && trim($mimeLine))
    {
    if(
    preg_match('/^(S+?)s+(S+?)s+(S+)(s+(.+?))?$/si'$mimeLine$regex_mimeDataSet))
    {
    $mimeDataSet['offset'] = str_replace('>'''$regex_mimeDataSet[1]);
    $indicator $regex_mimeDataSet[3];
    switch(
    $regex_mimeDataSet[2])
    {
    case 
    'string':
    $indicator str_replace(' '' '$indicator);
    $indicator str_replace('<''<'$indicator);
    $indicator str_replace('>''>'$indicator);
    $indicator str_replace('r'"r"$indicator);
    $indicator str_replace('n'"n"$indicator);
    $indicator preg_replace('/\\([0-9]{3})/e''chr($1);'$indicator);
    break;
    case 
    'byte':
    $indicator pack('c', @eval('return '.$indicator.';'));
    break;
    case 
    'short':
    $indicator pack('s', @eval('return '.$indicator.';'));
    break;
    case 
    'beshort':
    $indicator pack('n', @eval('return '.$indicator.';'));
    break;
    case 
    'leshort':
    $indicator pack('v', @eval('return '.$indicator.';'));
    break;
    case 
    'belong':
    $indicator pack('N', @eval('return '.$indicator.';'));
    break;
    case 
    'lelong':
    $indicator pack('V', @eval('return '.$indicator.';'));
    break;
    case 
    'long':
    $indicator pack('l', @eval('return '.$indicator.';'));
    break;
    }

    $mimeDataSet['indicator'] = $indicator;
    $mimeDataSet['mime'] = str_replace("r"''$regex_mimeDataSet[5]);

    $mimeData[] = $mimeDataSet;
    }
    }
    }

    $file_content file_get_contents($file);

    $retVal 'application/x-object';
    foreach(
    $mimeData as $key => $mimeTest)
    {
    $testStr substr($file_content$mimeTest['offset'], strlen($mimeTest['indicator']));

    if(
    $testStr == $mimeTest['indicator'])
    {
    $mimeType $mimeTest['mime'];
    if(
    $mimeType == '')
    {
    while(
    $mimeType == '')
    $mimeType $mimeData[++$key]['mime'];
    }

    $retVal $mimeType;
    }
    }

    return 
    $retVal;
    }
    }

    echo(
    mime_content_type('./testsvr.zip').'<br/>'); // Gibt application/x-zip aus
    echo(mime_content_type('./Beispiel.jpg').'<br/>'); // Gibt image/jpeg aus
    echo(mime_content_type('./winkel_wurf.fla').'<br/>'); // Gibt application/x-object aus
    echo(mime_content_type('./bzcat.exe').'<br/>'); // Gibt application/x-do************ec
    echo(mime_content_type('./option_group.htm').'<br/>'); // Gibt text/html aus
    echo(mime_content_type(__FILE__).'<br/>'); // Gibt application/x-httpd-php-5 aus


    ?>
    ich habe diese datei mime.php genannt.
    nun habe ich über die variable $file eine csv datei angeben.
    jedoch gibt der mir nur dann als echo folgendes zurück:
    application/x-object
    application/x-object
    application/x-object
    application/x-object
    application/x-object
    application/x-object

    leide sind meine kenntnisse nicht so gut um dieses script zu verstehen, kan mir da bitte jmd. helfen?

  • #2
    wenn du mit
    $extension=substr($dateiname,0,-(strrpos($dateiname,".")+1));
    dateiendung findest, dann kannst du mit
    mit if(isset($mimearray[$extension]))return $mimearray[$extension];
    mimetype anzeigen lassen.
    der array $mimearray muss du mit include von datei
    http://www.php-resource.de/forum/att...&postid=477054
    erreichen.
    die oben genannte datei, kannst du nur in quellcode sehen.
    copiere der quellcode und speichere als eine php- datei zum includen
    Slava
    bituniverse.com

    Kommentar


    • #3
      @slava das ist schlichtweg falsch, hatte ich dir schon mal geschrieben!

      extension!=mimetype
      verdammtnochmal!

      Kommentar


      • #4
        Original geschrieben von 3DMax
        @slava das ist schlichtweg falsch, hatte ich dir schon mal geschrieben!

        extension!=mimetype
        verdammtnochmal!
        ja das hast du mir schon gesagt.
        Aber eine Textdatei wird nicht mit einer graphikprogramm gestartet, und wenn ich eine .zip datei in .psd umbenenne, dann pfeift Photoshop auf diese datei und sendet eine Fehlermeldung.
        ich meine, dass es ausreichend ist, die daten durch ihre Endung zu mimetype zuordnen völlig ausreicht.
        http://de.selfhtml.org/diverses/mimetypen.htm
        und wenn die Endung unbekannt ist, dann machen wir application/x-object daraus.

        eigentlich für csv ist
        text/comma-separated-values
        zugeordnet.
        und für .htm komische weise
        application/xhtml+xml als auch text/html
        und am ende entscheidet die dazugehörige Program( nur durch die Endung) ob sie mit der datei zu recht kommt oder nicht.
        Ich bin eigentlich nicht sturr und werde gerne meine Meinung zur MimeTypen ändern, wenn ich ein logische Argument zum extrahieren von mimeTypen aus Dateiinhalt und nicht aus der Endung finde.
        Ich hoffe dass du mir dabei hilfst
        Slava
        bituniverse.com

        Kommentar


        • #5
          Original geschrieben von Slava
          Aber eine Textdatei wird nicht mit einer graphikprogramm gestartet, und wenn ich eine .zip datei in .psd umbenenne, dann pfeift Photoshop auf diese datei und sendet eine Fehlermeldung.
          ich meine, dass es ausreichend ist, die daten durch ihre Endung zu mimetype zuordnen völlig ausreicht.
          das musst du umgekehrt betrachten -> unbekannte extension und korrekter dateityp, bleiben wir bei php:
          include ist es z.b. scheißegal was die datei für eine endung hat (php, zip, jpg, txt, etc. ..) alles wird durch php geparst und wenn es keine php-datei ist (egal welche endung) gibt es einen parse-error, so wie bei deinem bsp. mit photoshop.
          nur wenn sich in dem file syntaktisch korrekter php-code befindet, wird dieser auch ausgeführt - und das ist die gefahr, wenn du nur die extension prüfst!

          Original geschrieben von Slava
          Ich bin eigentlich nicht sturr und werde gerne meine Meinung zur MimeTypen ändern, wenn ich ein logische Argument zum extrahieren von mimeTypen aus Dateiinhalt und nicht aus der Endung finde.
          Ich hoffe dass du mir dabei hilfst
          ein konkretes angriffszenario kann ich dir jetzt nicht nennen, aber es sollte aus o.g. gesichtspunkten deutlich werden und du kannst es dir bestimmt auch denken.
          es lädt jemand "pöhsen" php-code getarnt als bild (jpg, gif, ...) auf den server. der server akzeptiert das file aufgrund der extension und später erfolgt das große erwachen/sterben des webmasters

          Kommentar


          • #6
            Original geschrieben von 3DMax ein konkretes angriffszenario kann ich dir jetzt nicht nennen,
            ok, ich hab's mal versucht:
            PHP-Code:
            echo '<image src="'.readfile("pic.jpg").'">';
            // oder auch als image-src eine php-date, die das bild per readfile ausgibt, sollte jetzt keinen unterschied machen 
            "pic.jpg" - nach dem upload wurde nur die dateiendung auf 'jpg' geprüft:
            Code:
            <SCRIPT>alert("XSS")</SCRIPT>

            Kommentar


            • #7
              und wie ist es mit dem script, das ich gepostet habe?

              Kommentar


              • #8
                Original geschrieben von 3DMax
                es lädt jemand "pöhsen" php-code getarnt als bild (jpg, gif, ...) auf den server. der server akzeptiert das file aufgrund der extension und später erfolgt das große erwachen/sterben des webmasters
                welche Programm kommt darauf ein bild als PHP-code auszuführen?
                Ich persönlich habe es sogar nie versucht, ein bild als php zu betracheten.

                exsec(file_get_contents('bild.gif'))
                oder
                include('bild.gif');
                gute Idee!
                jtzt weis ich wie ich meine code verschlüsseln kann
                <SCRIPT>alert("XSS")</SCRIPT>
                ist einfach der schrei von dem Browser, das er mit deinem bild nicht zurecht kommt.
                Original geschrieben von handyaner
                und wie ist es mit dem script, das ich gepostet habe?
                keine Ahnung!
                ich würde das vermutlich mal Testen, aber mir fehlt ./magic.mime datei,
                und auch

                das hier
                PHP-Code:
                $indicator str_replace(' '' '$indicator);
                $indicator str_replace('<''<'$indicator);
                $indicator str_replace('>''>'$indicator);
                $indicator str_replace('r'"r"$indicator);
                $indicator str_replace('n'"n"$indicator); 
                kann ich nicht ganz nachvollziehen.
                Zuletzt geändert von Slava; 11.10.2006, 10:35.
                Slava
                bituniverse.com

                Kommentar


                • #9
                  Original geschrieben von Slava
                  welche Programm kommt darauf ein bild als PHP-code auszuführen?
                  in kombination mit einer anderen lücke, wenn z.b. include-parameter, die per get kommen nicht ausreichend geprüft werden.
                  aber eigentlich brauch ich ja nicht zu antworten, wenn du das alles so lustig findest.

                  das xss-besp. funktioniert bei mir im ie und ff.

                  Kommentar


                  • #10
                    Original geschrieben von 3DMax
                    in kombination mit einer anderen lücke, wenn z.b. include-parameter, die per get kommen nicht ausreichend geprüft werden.
                    aber eigentlich brauch ich ja nicht zu antworten, wenn du das alles so lustig findest.

                    das xss-besp. funktioniert bei mir im ie und ff.
                    1)gibt es noch Leute, die ohne Kontrolle ein GET Parameter in include verwenden?

                    2)ja natürlich brauchst du nicht zu antworten, das ist doch kein Zwangsforum.
                    wenn ich mich ein wenig lüstig ausgedruckt habe, dann hat es einfach mit meiner guter Stimmung zu tun.
                    wenn du Eindruck bekommen hast, dass ich mich über dein Beitrag lüstig mache, dann sage ich mal: sorry! In keinem Fall, sonnst würde ich dich nicht bieten meine Meinung zur MimeTypen zu ändern

                    3)<SCRIPT>alert("XSS")</SCRIPT>

                    vermutlich ist das einfach eine normale reaktion von Browser.
                    Er erwartet ein Bild von einem modul, der die Bilder bereitstellt und bekommt statt einem Bild eine exception.
                    Jetzt will er natürlich ein Allarm schlagen, der im form von einem alert kommt.

                    4) und jetzt noch ein mal lüstig
                    Slava
                    bituniverse.com

                    Kommentar

                    Lädt...
                    X