peter: Sicherheit - Hochgeladene XML-Datei parsen

Beitrag lesen

Hi dedlfix,

vielen Dank für deine zahlreichen Anregungen, werde das umfassend beherzigen.

if($_FILES['uploaddatei']['error']=='UPLOAD_ERR_OK')

UPLOAD_ERR_OK ist eine Konstante. Wenn du ihren Namen in '' setzt, wird der als String interpretiert. Du vergleichst hier also einen Zahlenwert in dem error-Element mit einem String. Das kommt sicher nur zufällig das gewünschte Ergebnis zustande, oder auch nicht. Hast du mal versucht, einen der anderen Fehler-Werte zu provozieren? Beispielsweise lässt sich ganz einfach UPLOAD_ERR_NO_FILE erzeugen, was in der Praxis sicher auch gelegentlich vorkommen wird.

Hab mir das mal angeschaut, die entsprechenden Konstanten haben ja auch Werte. Dann müßte ich doch so überprüfen können:

  
if($_FILES['uploaddatei']['error']==0)  
{  
//alles OK  
}  
  
if($_FILES['uploaddatei']['error']==4)  
{  
//keine Datei vorhanden  
}  

$DATEI=$_FILES['uploaddatei']['tmp_name'];

Dieses Umkopieren des Wertes bringt dir außer einer zusätzlichen Programmzeile nichts weiter ein. Verwende doch gleich $_FILES['uploaddatei']['tmp_name'] an der einen Stelle, an der du nun $DATEI stehen hast.

Zum Entwickeln mach ich das ganz gern so. Beschäftige mich erstmals mit dem Thema und ganz so leicht geht mir das auch nicht von der Hand. Da steckt schon ne Menge Arbeit und vor allem auch TRY and ERROR drin. Da isses wesentlich bequemer, $DATEI zur Verfügung zu haben und beim Programmieren nicht jedesmal $_FILES['uploaddatei']['tmp_name'] schreiben zu müssen. Ist ja auch mögliche Fehlerquelle (Flüchtigkeits-/Schreibfehler).

$parser=xml_parser_create();

Was ist, wenn der Parser nicht erfolgreich kreiert werden konnte?

$gpxdatei=fopen($DATEI,'r');

Auch hier ist wieder keine Fehlerbehandlung zu sehen.

xml_parse($parser, $data, feof($gpxdatei));

xml_parse() beschwert sich regelmäßig bei ungültigem XML.

Komme also vom Prinzip zu folgendem Ergebnis:

  
if($_FILES['uploaddatei']['error']==0)  
    {  
    //OK, weitermachen......  
    $parser=xml_parser_create();  
  
    if($parser)  
        {  
        //OK, weitermachen...  
        $gpxdatei=fopen($DATEI,'r');  
  
        if($gpxdatei)  
            {  
            //OK, weitermachen...  
             while ($data = fread($gpxdatei, 4096))  
                {  
                $parseOK=xml_parse($parser, $data, feof($gpxdatei));  
  
                if(!$parseOK)  
                    {  
                    //Fehler beim Parsen >ABBRUCH  
                    }  
                }  
            }  
        else  
            {  
            //Öffnen der Datei danebengegangen >ABBRUCH  
            }  
        }  
    else  
        {  
        //Parsererzeugung danebengegangen >ABBRUCH  
        }  
else  
    {  
    //irgendwas beim Dateiupload danebengegangen >ABBRUCH  
    //läßt sich mit ErrorCodes näher spezifizieren  
    }  
  

Eventuell wäre noch das Lesen der Datei ($data = fread($gpxdatei, 4096);) auf Erfolg zu überprüfen.

Vielen Dank nochmal für die vielen Hinwese und nützlichen Links.
Gruß
peter