Kann man diese if-else-include-Abfrage optimieren?

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Kann man diese if-else-include-Abfrage optimieren?

    Hallo,

    kann man das ev. kürzer machen? Ist auf Nummer sicher aufgebaut,
    also nicht bloß include($_GET['go']); und fertig...

    PHP Code:
    if(isset($_GET['go']))

    {    if(
    file_exists("php/".$_GET['go'].".php"))
        
        {
            
            include(
    "php/".$_GET['go'].".php");
            
        }

        else
        
        {

        include(
    "php/home.php");
        
        }

    }

    else

    {include(
    "php/home.php");} 
    Das wäre schon wieder unsinnig oder:

    PHP Code:
    if(isset($_GET['go']) && if(file_exists("php/".$_GET['go'].".php")) 

  • #2
    Re: Kann man diese if-else-include-Abfrage optimieren?

    Original geschrieben von Truncate
    Das wäre schon wieder unsinnig oder:
    wieso?
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Comment


    • #3
      Re: Kann man diese if-else-include-Abfrage optimieren?

      Original geschrieben von Truncate
      Ist auf Nummer sicher aufgebaut,
      also nicht bloß include($_GET['go']); und fertig...
      so so, auf nummer sicher.
      1. relative pfadangaben sind erlaubt, ala: ../../
      2. ist magic_quotes_gpc aus, kann man durch nullbytes sogar dein ".php" austricksen und jede beliebige datei includen

      Comment


      • #4
        Re: Re: Kann man diese if-else-include-Abfrage optimieren?

        Original geschrieben von 3DMax 1. relative pfadangaben sind erlaubt, ala: ../../
        Gut, das heißt also ich muss $_GET['go'] mittels RegEx überprüfen,
        ob nur Buchstaben und Zahlen darin vorkomme, richtig?

        Original geschrieben von 3DMax 2. ist magic_quotes_gpc aus, kann man durch nullbytes sogar dein ".php" austricksen und jede beliebige datei includen
        Da müßte dann obige RegEx auch ausreichen oder? Ich mein Punkte sind ja dann nicht mehr erlaubt...

        Comment


        • #5
          PHP Code:

          $valid_sites 
          = array('home','impressum','foo');

          if(isset(
          $_GET['go']) AND in_array($_GET['go'], $valid_sites)){
            include(
          '../includes/inc.'.$_GET['go'].'php');
          }else{
            include(
          '../includes/inc.home.php');

          Ma so als Anstoß.

          file_exists kann übrigens nicht die Existenz von entfernten Dateien prüfen.

          Von daher müsste man also um was einzuschleusen auf der selben Kiste sein - bei Shared-Hosting aber möglich.


          Anmerkung: Diese Funktion kann nicht mit entfernten Dateien arbeiten, da der Zugriff auf die Datei, die bearbeitet werden soll, über das Dateisystem des Servers möglich sein muss.
          aus: http://de3.php.net/file_exists

          Comment


          • #6
            Re: Re: Re: Kann man diese if-else-include-Abfrage optimieren?

            ja, die idee mit dem regex ist gut.

            Original geschrieben von Truncate
            Da müßte dann obige RegEx auch ausreichen oder? Ich mein Punkte sind ja dann nicht mehr erlaubt...
            muss ja nicht unbedingt ein punkt vorkommen:
            Code:
            ../../../etc/passwd%00
            erschlägst du aber trotzdem damit.

            pregos vorschlag mit der whitelist ist sehr zu empfehlen. also dateien explizit zu erlauben, anstatt versuchen, die parameter zu bereinigen.

            Comment


            • #7
              Gut, danke euch beiden!

              Nehme die Array-Variante... weil ich muss die restlichen angehängten Parameter sowieso schon mittels (langsamer) RegEx checken.

              Comment


              • #8
                Original geschrieben von Truncate
                Nehme die Array-Variante...
                ich hätte beide genommen

                Comment

                Working...
                X