kostenloser Webspace werbefrei: lima-city


Anweisung über einen Link senden

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    fabian-riedel

    Kostenloser Webspace von fabian-riedel

    fabian-riedel hat kostenlosen Webspace.

    Ich habe folgenden Code:
    <?php
    if ($_GET) {
     if (isset($_GET["name"])) {
    
      switch ($_GET["name"]) {
    
       case "test" :
         include("test.html");
       break;
    
       default :
         include("index.html");
      }
    
     }
    }
    ?>

    Ich will wissen, wie ich den Code umändern muss dass egal was ich als url eingeb diese Datei eingefügt wird ohne dass ich genau diesen Dateinamen im Code vermerkt hab.
    Bsp:
    ?name=abcdefg
    -soll als Datei abcdefg eingefügt werden, ohne dass im Code steht:
    case "abcdefg" :
         include("abcdefg.html");
       break;


    Ich hoffe ihr versteht was ich mein.
    Grüßle



    EDIT: Sry ich hab die Lösung bereits gefunden...

    Beitrag zuletzt geändert: 14.9.2009 15:02:07 von fabian-riedel
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. e********l

    einfach als Variable, so wie du es schon tust.

    meineAdresse.html?meineSeiteDieIchEinbindenWill=abcdefg

    Allerdings solltest du in dem Falle unbedingt prüfen das es sich um eine lokale und gültige Seite handelt, denn sonst kann jeder von außern eine xbeliebige Seite einbinden und dein System komprometieren.

    //edit: Achja, die erste If Abfrage ist nutzlos. Das $_GET Array existiert immer!

    Beitrag zuletzt geändert: 14.9.2009 15:03:31 von evil-devil
  4. Sehr unsichere Variante.
    Wenn allow_url_include (oder wie das in der php.ini heißt) angeschalten ist, kann man ohne Probleme ein Skript auf dem Server ausführen über ?name=http://bsp/hack.php
    Wie wärs, wenn du all deine Seiten in einen Ordner wie z.b. "files" tust, diesen dann ausliest und wenn $_GET["name"] mit einer Seite übereinstimmt, diese nur dann einbindest? Das wäre ein sehr sicherer Weg!

    Edit: w00ps, paar Sekunden zu spät ;)

    Beitrag zuletzt geändert: 14.9.2009 15:06:14 von qap2
  5. t****o

    Also erstmal vorraus was mir gerade aufgefallen ist: Es heißt nicht s_GET sondern $_GET. Also ich würde das so machen:
    <?php
    if($_GET){
    $site = $_GET["site"];
    include "$seite.html";
    }
    ?>

    Um nun eine Seite über die URL einzubinden, musst du das eingeben:
    deineseite.php?site=home
    würde die home.html einbinden.

    telelo
  6. t*****b

    $name = $_GET["name"];
    empty($name) ? $name = "index";
    $file = "./content/".$name.".php";
    
    if(preg_match("/^[a-z0-9]$/i", $name)) {
     if(file_exists($file)) {
      include($file);
     } else {
      echo "Error404";
     }
    } else {
     echo "Dont try to hack!";
    }


    Die Dateien sind hierbei in dem Ordner "content" abgelegt und aufrufen kannst du diese über index.php?name=dateiname (ohne .php). Die Dateinamen können Kleinbuchstaben und Ziffern enthalten.

    /Edit: Syntaxfehler

    Beitrag zuletzt geändert: 14.9.2009 15:17:27 von trueweb
  7. e********l

    Trueweb, wozu machst du den RegExp? Der ist doch überflüssig, wenn du anschließend eh auf file_exists() prüfst.
    Ob man da nun einen ungültigen Namen oder gültigen angibt ist es prinzipiell egal. Er wird false zurückliefern.
  8. t*****b

    evil-devil schrieb:
    Trueweb, wozu machst du den RegExp? Der ist doch überflüssig, wenn du anschließend eh auf file_exists() prüfst.
    Ob man da nun einen ungültigen Namen oder gültigen angibt ist es prinzipiell egal. Er wird false zurückliefern.


    Vor allem Bei Windows könnte man dadurch auch andere Dateien auslesen. Oder auch nicht, da ein .php dran gehängt wird... Ok du hast recht. Aber sicher ist sicher, aber man könnte PHP-Dateien aufrufen, die sich nicht im Ordner content befinden und nicht zum includen geeignet sind ;)

    Beitrag zuletzt geändert: 14.9.2009 15:35:25 von trueweb
  9. e********l

    Um zu verhindern das er andere Orte abfragt würde ich deinen Ansatz in sofern kombinieren, dass man den Ordner immer mit angibt. Dann kann er noch so tolle Namen/Verzeichnisse in den den Parameter schreiben.

    Im Idealfall würde man auch eine Liste an erlaubten Namen bereitstellen und das System dagegen prüfen lassen. Bzw. nur CodeNamen für die Dateien verwenden.
  10. t*****b

    evil-devil schrieb:
    Um zu verhindern das er andere Orte abfragt würde ich deinen Ansatz in sofern kombinieren, dass man den Ordner immer mit angibt. Dann kann er noch so tolle Namen/Verzeichnisse in den den Parameter schreiben.


    Wenn du nicht die Zeichen überprüfst wie in meinem Script kann man index.php?name=:C/... oder ?name=./../../..windows/bla navigieren.
  11. e********l

    Bin ich mir nicht sicher ob das geht. Müsste ich daheim mal probieren, wenn die Rechte für den Webserver richtig gesetzt sind sollte der in den Verzeichnissen gar keine Leseberechtigung haben.
  12. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!