[PHP] RFI + LFI vermeiden


  • Quelle: tionsys.de + erweiterte Anmerkungen


    /e: Bug rausgehaut, danke an @BubleBub:

  • Nabend ich hätte eine Frage zu diesem Satz hier.


    Zu guter letzt noch den Tipp: Seiten in ein Unterverzeichnis. Dann wird ein String vor dem $_GET gesetzt und quasi ausgeschlossen, dass eine externe Seite eingebunden wird.


    meinst du damit, dass das Verzeichnis evntl so aussieht?


    /var/www/controlpanel/index.php


    und hierher die "templates"?


    /var/www/controlpanel/tmpl/


    oder sollten dann die "templates" hier liegen:


    /var/www/tmpl



    Lg Cal44

  • if(preg_match('/^[a-z]+$/', $_GET['page'] == false)

    PHP
    if(preg_match('/^[a-z]+$/', $_GET['page']) == false)


    Klammer fehlt...
    Eleganter:

    PHP
    if(!preg_match('/^[a-z]+$/', $_GET['page']))


    /var/www/controlpanel/index.php
    und die templates
    /var/www/controlpanel/tmpl/


    Info auch:
    Bei Hostings hat man meistens nen OpenBaseDir.
    D.h. da wird ein bisschen geholfen.


    Oder bsp. wie ich das ganze immer regele...


    PHP
    $site = strtolower($_GET['site']); // PHP Dateien sind in dem Sinne immer klein, Rechtschreibfehler nicht mehr schlimm
    if(file_exists('pages/'.$site.'.php'))
    {
      	include_once('pages/'.$site.'.php');
    }
    else
    {
      	include_once('pages/error_404.php');
    }


    So ist man größtenteils abgesichert :rolleyes:

    Miete mich (nicht) :love:

  • Ist es nicht besser wenn man das so hier regelt?


  • Man braucht sich aber keinen RFI schutz einbauen, wenn man in seinen PHP Scripten keine $_GET Varriabeln verwendet oder liege ich da falsch?


    Wenn du $_GET, $_POST und einige $_SERVER ( useragent z.B. ) nutzt und mit diesen Variablen dateien einbindest, musst du dich davor schützen.
    Gegen RFI reicht aber auch ein einfacher Check mit file_exists oder das Speichern der Templates in einem anderen Verzeichnis.


    Oder bsp. wie ich das ganze immer regele...

    PHP
    $site = strtolower($_GET['site']); // PHP Dateien sind in dem Sinne immer klein, Rechtschreibfehler nicht mehr schlimm
    if(file_exists('pages/'.$site.'.php'))
    {
          include_once('pages/'.$site.'.php');
    }
    else
    {
          include_once('pages/error_404.php');
    }


    So ist man größtenteils abgesichert :rolleyes:


    Gegen RFI, aber nicht, wenn so etwas kommt:

    Code
    index.php?site=../../images/upload/avatar45.png


    Und in Avatar45 ein Schadcode drinne ist ( z.B. weil es ein Avatar ist, der hochgeladen wurde :whistling: )
    Wie man Schadcodes in Bilder steckt, erzähle ich jetzt hier mal nicht :D

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Cal44 aka Mert: Ja, ist auch sicher, aber du müsstest jede Seite in das Array eintragen - da lohn sich ein kurzer Check doch eher, zumal man ihn nicht immer updaten muss ;)
    Kann man aber auch so machen ;)

  • Das ist jezz nur für VServer gedacht oder auch für die eigene Hompage? :D


    Das ist jetzt für die eigene Homepage gedacht und dient der Abwehr einer Hackermethode, bei der fremder und eventuell Schädlicher Code eingeschleust wird. Das ist die kurze Variante der Erklärung ;)