Pfad weg bekommen

  • PHP

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Manawyrm.

    Pfad weg bekommen

    Hey Leute,
    Ich habe vor einiger Zeit mit einem Freund ein Script mit PHP geschrieben. Das Script soll eine Datei laden.

    script:

    PHP-Quellcode

    1. $pfad = ".".DIRECTORY_SEPARATOR."page".DIRECTORY_SEPARATOR;
    2. $default = $pfad."home.php";
    3. if(isset($_GET['p']) && !empty($_GET['p'])){
    4. $_GET['p'] = str_replace("\0", '', $_GET['p']);
    5. $file = basename(realpath($pfad.$_GET['p'].".php"));
    6. $path = $pfad.$file;
    7. if(!empty($file) && file_exists($path))
    8. {
    9. include($path);
    10. } else {
    11. include($default);
    12. }
    13. } else {
    14. include($default);
    15. }


    home.php:

    PHP-Quellcode

    1. echo 'Willkommen Welt';


    Normales weißer sollte nur: "Willkommen Welt" auf der Seite stehen.
    Mir wird aber: ".\page\ Willkommen Welt" angezeigt. Könnt ihr mir sagen wieso mir auch der Pfad angezeigt wird ?
    Gruß K4RTOFF3L

    Das Problem zu erkennen ist wichtiger, als die Lösung zu erkennen, denn die genaue Darstellung des Problems führt zur Lösung. - Albert Einstein
    Das Einbinden von Dateien mit Einbezug von Nutzerdaten sollte nach Möglichkeit vermieden werden!

    PHP-Quellcode

    1. $_GET['p'] = str_replace("\0", '', $_GET['p']);

    Verhindert wahrs. recht gut einen Angriff nach Local File Inclusion, aber nicht nach RFI und auch hilft auch nicht bei Directory Traversal Angriffen.

    PHP-Quellcode

    1. $file = basename(realpath($pfad.$_GET['p'].".php"));
    2. $path = $pfad.$file;


    $_GET['p'] ist mal home
    wird also $pfad/home.php draus.
    Realpath macht jetzt /var/www/blabla/home.php drauß.
    dann wird mit Basename wieder home draus gemacht.

    Wird dann wieder mit dem Pfad verknüpft.
    Ist also $pfad/home