Sven Rautenberg: ### Brett vor'm Kopf ###

Beitrag lesen

Moin!

So nun mal zum Abschluss:

Dein Code ist allerdings noch deutlich verbesserungswürdig!

  

> <?php  
> ######################  
> /*  
> Hier muss jetzt noch die Berechtigungsprüfung rein.  
> Da ich nicht weiss, wie diese aussieht, lass ichs offen.  
> // if($_SESSION['xy'] != 'blabla'){die('ZUGRIFF VERBOTEN');}  
>   
> */  
> ######################  
> $hier = $_SERVER['PHP_SELF'];  
  
// Wozu sinnlos kopieren?  
  

> $bildverz = 'pics/';  // inkl. slash am Ende  
  
// Eine Definition, zu der du sagen solltest, wie sie zu verstehen ist. Welcher Pfad ist hier anzugeben?  
  

> $bildpfad = $_SERVER['DOCUMENT_ROOT'];  
  
// Wieder eine sinnlose Kopie.  
  

> $bildpfad = str_replace('\\','/',$bildpfad);  
  
// Wozu das? In $_SERVER['DOCUMENT_ROOT']; sind keine Backslashes enthalten, die man in Slashes wandeln müßte. Wenn doch, dann kann das verwendete XAMP-System damit auch umgehen. Ansonsten würde der Apache nämlich streiken müssen.  
  

> $bildpfad = substr($bildpfad,0,strrpos($bildpfad,'/'));  
  
// Eine undurchsichtige Stringoperation, die von unsicheren Annahmen ausgeht. $_SERVER['DOCUMENT_ROOT'] endet nicht zwingend mit einem Slash, was dir hier dann mehr abschneidet, als du willst...  
  

> $bildpfad = $bildpfad.'/'.$bildverz;  
  
// ...nur um am Ende dann zu einem absoluten Pfad zu kommen, der dann doch innerhalb des DOCUMTENT_ROOT liegt, aber einfacher und sinnvoller so definiert würde:  
  
$bildpfad = "/pfad/zum/bild/dir/";  
  
// Das ist einfach und klar verständlich. Und funktioniert immer.  
  
  

> ################# Ausgabesteuerung einzelne Bilder #############  
> if($_GET['pic'])  
  
// An dieser Stelle wirft dir PHP eine NOTICE beim Skriptaufruf ohne Parameter, der vermeidbar ist.  
  
if (isset($_GET['pic']) // besser so fragen, ob Variablen definiert sind.  
  

> {  
> $pic = $_GET['pic'];  
  
// wieder eine sinnlose Kopie!  
  

> $pic = stripslashes($pic);  
  
// Das darf nur passieren, wenn magic_quotes_gpc auf ON steht.  
  

> $pic = urldecode($pic);  
  
// Das darf nicht passieren, GET-Parameter sind schon dekodiert.  
  
// Es fehlt eine wirksame Prüfung, ob in $pic nicht ggf. relative Pfadangaben eingeschleppt würden. Die Stringfunktion basename() ist dafür sehr geeignet (auch wenn sie unter Filesystem-Funktionen steht).  
  

> if(!file_exists($bildpfad.$pic) ){echo '<h1>DATEI NICHT GEFUNDEN</h1>';}  
> // diese Ausgabe würde ich dann aber durch ein default image ersetzen  
> else{  
> clearstatcache();  
  
// Der Aufruf von clearstatcache() an dieser Stelle ist mehr als sinnlos - er kostet bei Dateimetadatenoperationen (die du nicht benutzt) auch richtig Performance, wenn man ihn unbedacht anwendet.  
  

> $pictyp = str_replace('.','',strrchr($pic,'.'));  
> header('content-type:image/'.$pictyp);  
  
// JPEG-Bilder werden typischerweise mit der Endung ".jpg" gespeichert - der ihnen zugeordnete Mime-Typ lautet aber "image/jpeg". Du schickst hier also falsche Headerangaben.  
  
// Korrekte Mime-Typen erhält man beispielsweise durch die Funktionen getimagesize(), image_type_to_mime_type() oder mime_content_type().  
  

> header('Content-Disposition: filename='.$pic);  
  
// Durch die ungeprüfte Weiterreichung von $pic ergibt sich an dieser Stelle ggf. Angriffspotential auf den Benutzerbrowser.  
  

> readfile($bildpfad.$pic);  
> exit(); // keine weitere Ausgabe  
  
// Das Skript wird nur dann abgebrochen, wenn tatsächlich erfolgreich ein Bild gefunden und ausgegeben wurde. In allen anderen Fällen läuft das Skript bei einem Request nach einem Bild weiter in den HTML-generierenden Teil.  
  

> }  
> }  
>   
>   
>   
> ######### Eigentliche Seite #####################################  
> // Nur ein Beispiel zur Bildausagabe  
> if($godir = opendir($bildpfad))  
> {  
>   
>     while (false !== ($file = readdir($godir))){  
>          $i++; if($i > 200){die('SICHERHEITS - STOP');}  
  
// Der Sicherheits-Stopp sollte parametrierbar (Definition einer Konstanten am Skriptanfang) und kommentiert sein.  
  

>  if ($file == "." || $file == "..") {continue;}  
>     $src = "$hier?pic=$file";  
>             $imgs .= '<a href="'.$src.'"><img width="100" height="100" src="'.$src.'" border="0"></a><br>'."\r\n";  
  
// Wieder reichlich sinnlose Kopiererei.  
// Die Variable $imgs wird nicht initialisiert.  
// Die Dateinamen als URL-Parameter werden nicht kodiert!  
  
// Die Thumbnail-Generierung ist ausgelassen, der Browser würde die Bilder komplett herunterladen und selbst skalieren müssen.  
  

>     }  
>   
> closedir($godir);  
> }  
> ?>  

- Sven Rautenberg

--
"Love your nation - respect the others."
0 92

Problem mit fopen!

Phil
  • php
  1. 0
    Wolke
    1. 0
      Phil
      1. 0
        Wolke
        1. 0
          Phil
          1. 0
            Christoph Schnauß
            1. 0
              Phil
              1. 0
                Christoph Schnauß
                1. 0
                  Phil
                  1. 0
                    Wolke
                    1. 0
                      Phil
                      1. 0
                        Wolke
                        1. 0
                          Phil
                          1. 0

                            Doppelposting

                            Christoph Schnauß
                            • menschelei
                          2. 0
                            Wolke
                            1. 0
                              Phil
                              1. 0

                                Kein Doppelposting

                                Wolke
                                1. 0
                                  Phil
                                  1. 0

                                    Provider austricksen

                                    Christoph Schnauß
                                  2. 0
                                    Wolke
                                    1. 0
                                      Phil
                                      1. 0
                                        Christoph Schnauß
                                      2. 0
                                        Wolke
                                        1. 0
                                          Phil
                                          1. 0

                                            weiter gehts

                                            Wolke
                                            1. 0
                                              Phil
                                              1. 0
                                                Wolke
                                                1. 0
                                                  Phil
                                                  1. 0
                                                    Wolke
                                                    1. 0
                                                      Phil
                                                      1. 0
                                                        Wolke
                                                        1. 0
                                                          Phil
                                                          1. 0
                                                            Wolke
                                                            1. 0
                                                              Phil
                                                              1. 0
                                                                Wolke
                                                            2. 0
                                                              dedlfix
                                                              1. 0
                                                                Wolke
                                                                1. 0
                                                                  Sven Rautenberg
                                                                  1. 0
                                                                    Wolke
                                                                    1. 2
                                                                      Sven Rautenberg
                                                                      1. 0
                                                                        Wolke
                                                                        1. 0
                                                                          Auge
                                                                          1. 0

                                                                            ### Brett vor'm Kopf ###

                                                                            Wolke
                                                                            1. 0
                                                                              Sven Rautenberg
                                                                              1. 0
                                                                                Wolke
                                                                                1. 0
                                                                                  Sven Rautenberg
                                                                                  1. 0
                                                                                    Wolke
                                                                                    1. 0
                                                                                      Sven Rautenberg
                                                                  2. 0
                                                                    Wilhelm Turtschan
                                                                2. 0
                                                                  dedlfix
                                                                  1. 0
                                                                    Wolke
                                                                    1. 2
                                                                      dedlfix
                                                                      1. 0
                                                                        Wolke
                                                                        1. 0
                                                                          Sven Rautenberg
                                                                          1. 0
                                                                            Wolke
                                                                            1. 0
                                                                              Sven Rautenberg
                                                                              1. 0
                                                                                Phil
                                                                                1. 1
                                                                                  dedlfix
                                                                                2. 2
                                                                                  Sven Rautenberg
                                                                              2. 0
                                                                                Wolke
                                                                        2. 0
                                                                          dedlfix
                                                        2. 1
                                                          dedlfix
                                                2. 2
                                                  Sven Rautenberg
                                            2. 0
                                              Christoph Schnauß
                                              1. 0

                                                Du irrst dich

                                                Wolke
                                          2. 0
                                            Tobias Kloth
                                        2. 0
                                          Tobias Kloth
                                    2. 0

                                      Doppelposting

                                      Christoph Schnauß
                                      • meinung
                                  3. 0
                                    Tobias Kloth
                                    1. 0
                                      Vinzenz Mai
                                    2. 0
                                      Phil
                              2. 0
                                Christoph Schnauß
                      2. 0
                        Christoph Schnauß
              2. 0
                Tobias Kloth
          2. 1
            Wolke
            1. 0
              Phil
              1. 1
                Wolke
            2. 1
              dedlfix
      2. 0
        Christoph Schnauß
    2. 0
      Christoph Schnauß
      1. 1
        Wolke
        1. 1
          dedlfix
  2. 0
    tom0201
    1. 0
      Phil
      1. 0
        tom0201
        1. 0
          Phil
          1. 1
            Christoph Schnauß
            1. 0
              Phil
        2. 0
          Christoph Schnauß
      2. 0
        Christoph Schnauß
        1. 0
          Phil
          1. 0
            Christoph Schnauß