Bilder Aufrufen

bayliner

New Member
Ich hab 0 Ahnung in php, habe aber trotzdem ein bisschen was gelesen und probiert:

Ich will PNG Bilder Aufrufen mittels einer php datei...


Beispiel:
meineadresse.de/show.php?file=bild1.png
meineadresse.de/show.php?file=bild2.png

Da soll dann nur das angewählte bild angezeigt werden.

PHP:
<?php
 // show.php
 $path='/home/domain.de/public_html/board/images/';
 $file=(!empty($_REQUEST['file']))?($path.'/'.$_REQUEST['file']):'';
 if(is_file($file)) {
  header ("Content-Type: image/png");
  readfile($file);
 }
?>

FRAGEN:

Es funktioniert soweit aber es kommt nur zahlensalat statt ein bild dabei raus? was mache ich Falsch ?

Wie ist es möglich mittels ?file=bild1 und ?file=bild2 die bild1.png und bild2.png anzuzeigen? Also nur mit dem Namen?
 
PHP:
<?php
 $path='/home/domain.de/public_html/board/images/';
 $file=(!empty($_REQUEST['file']))?($path.'/'.$_REQUEST['file']):'';
 if(is_file($file)) { 
            $im = imagecreatefrompng($file);

            header('Content-type: image/png');

            imagepng($im);
            imagedestroy($im);
}
?>

Das ganze nur über die Namen funktioniert so:
PHP:
<?php
 $path='/home/domain.de/public_html/board/images/';
 $file=(!empty($_REQUEST['file'].'.png'))?($path.'/'.$_REQUEST['file'].'.png'):'';
 if(is_file($file)) { 
            $im = imagecreatefrompng($file);

            header('Content-type: image/png');

            imagepng($im);
            imagedestroy($im);
}
?>
Ist aus dem Kopf aber sollte funktionieren
 
Last edited by a moderator:
Parse error: syntax error, unexpected '.', expecting ')'


das ist die Zeile:

$file=(!empty($_REQUEST['file'].'.png'))?($path.'/'.$_REQUEST['file'].'.png'):'';
 
So ist es Richtig :)

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

 $path='/home/domain.de/public_html/board/images/';
 $file=(!empty($_REQUEST['file']).'.png')?($path.'/'.$_REQUEST['file'].'.png'):'';
 if(is_file($file)) { 
            $im = imagecreatefrompng($file);

            header('Content-type: image/png');

            imagepng($im);
            imagedestroy($im);
}
?>


Gibt es noch eine Lösung um eine Standard Grafik anzugeben also wenn nur show.php?file= aufgerufen wird oder nur die show.php ?
 
Sorry, ich sagte ja, aus dem Kopf ;)
Standartgraphik:
PHP:
<?php
 error_reporting(E_ALL);
 ini_set('display_errors', 1); 

 $path='/home/domain.de/public_html/board/images/';
 $file=(!empty($_REQUEST['file']).'.png')?($path.'/'.$_REQUEST['file'].'.png'):'';
 if(is_file($file)) { 
            $im = imagecreatefrompng($file);

            header('Content-type: image/png');

            imagepng($im);
            imagedestroy($im);
}
else
{
            $std = '/home/domain.de/public_html/board/images/meineStandartdDatei.png';
            $im = imagecreatefrompng($std);

            header('Content-type: image/png');

            imagepng($im);
            imagedestroy($im);
}
?>

das ganze kann man dann jetzt noch was zusammenfassen:

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

 $path='/home/domain.de/public_html/board/images/';
 $file=(!empty($_REQUEST['file']).'.png')?($path.'/'.$_REQUEST['file'].'.png'):'';
 if(is_file($file)) { 
            $im = imagecreatefrompng($file);
}
else
{
            $std = '/home/domain.de/public_html/board/images/meineStandartdDatei.png';
            $im = imagecreatefrompng($std);
}
header('Content-type: image/png');
imagepng($im);
imagedestroy($im);
?>
 
Achtung. So wie das gerade steht, reißt ihr euch eine Directory Traversal Lücke ein. In den ersten Scripts für alle Files, im letzten "nur" für png.

Bsp.: meineadresse.de/show.php?file=../../../../../../../etc/passwd
 
Splange kein Bufferoverflow auftritt oder die verabeitende Funktion auch keine Verwundbarkeit für Zero-bytes hat sollte das klappen.
Aber ganz ehrlich: Traue niemals Variablen von Außen!

Ich würde testen, ob der Dateiname auch unterhalb des Bildverzeichnisses liegt und erlaubte Zeichen drin hat.
 
Wieso sollte man denn die Grafik bei jedem Aufruf per "imagepng()" neu kodieren?

Erheblich schneller dürfte es sein den MIME-Typ per "getimagesize()" zu ermitteln und dann per "readfile()" auszuliefern.
 
Hab das script Testweise Probiert und meine Website war schon am ersten Tag hacked xD


Was könnte man da machen?
 
Last edited by a moderator:
Weil vorher 2,5 jahre nix passiert ist und nun fand sich statt der seite ein gayporno SWF und ne index.html vor.

Dank Backups nix passiert :)
 
Back
Top