kostenloser Webspace werbefrei: lima-city


index.php?site=

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    gil-galad

    gil-galad hat kostenlosen Webspace.

    ich bin verwirrt ^^ :D
    Erst hat ichs mit Swtch jetzt hab ichs so gemacht wie trueweb gesagt hat...(wär schön wenn trotzdem das von oben ab ändern könnte wie dort steht.)

    Mach ichs jetzt mit Swtch? Aber mir scheint das nen weng umständlich erst in der einen datei das ganze hinschreiben und dann noch für die navi, oder wird das anders gemacht?
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

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


  3. ich bin verwirrt ^^ :D
    Erst hat ichs mit Swtch jetzt hab ichs so gemacht wie trueweb gesagt hat...(wär schön wenn trotzdem das von oben ab ändern könnte wie dort steht.)

    Mach ichs jetzt mit Swtch? Aber mir scheint das nen weng umständlich erst in der einen datei das ganze hinschreiben und dann noch für die navi, oder wird das anders gemacht?

    Je nach Projektgröße kannst du entweder die Switchabfrage nehmen, oder die Seiten in ein Array packen, dann kann man aus diesem Array auch automatisch eine Navigation erstellen.
    Ich würde dir aber nur die Switchabfrage empfehlen, da du anscheinend noch nicht so gut PHP kannst.

    MfG Lucas
  4. Autor dieses Themas

    gil-galad

    gil-galad hat kostenlosen Webspace.

    stimmt ^^ :)

    Aber mich würde halt gern intresieren obs auch einfacher geht, denn die switch abfrage macht nen umständlichen eindruck ;)
  5. t****y


    stimmt ^^ :)

    Aber mich würde halt gern intresieren obs auch einfacher geht, denn die switch abfrage macht nen umständlichen eindruck ;)

    Dann lern PHP, wenn dir das umständlich ist, dann lass es lieber ganz bleiben. Du musst zumindest den Willen haben es zu lernen und die Switchabfrage ist eigentlich sogar ziemlich einfach. http://tut.php-q.net/
    Das kannst du dir ja mal anschauen, bis Switch-Abfragen ist es garnicht mal so weit und Arrays und andere Schleifen werden dir auf dem Weg dann auch erklärt!
  6. n****x

    trueweb schrieb:
    Wieso so umständlich?
    ...
    include("inh/".$site.".php");
    ...


    Der lucas hat ja schon den allgemeinen Grundsatz "keine Variablen" aufgestellt. Ich will mal kurz anmerken warum:


    $site = '../../blubb';
    ...
    include("inh/".$site.".php");

    Der Pfad ist jetzt "inh/../../blubb.php"

    Das löst jedes bekannte File-System so auf, dass zwei Verzeichnisebenen über "inh" eine Datei "blubb.php" angesprochen wird (wenn vorhanden). Das hast du so bestimmt nicht gewollt. Solche "speziellen Pfade" wie "../" oder "./" wirken auch innerhalb einer Pfadangabe, nicht nur am Anfang.

    Man kann daher nur wiederholen:
    Solche Sachen parametrisieren!
    Der in der URL übergebene Wert darf nicht direkt in einen Pfad umgesetzt werden!
    Ein Array (Hash) ist für so einen Fall die brauchbarste Lösung.

    Man kann das Array auch automatisch erstellen. Die Befehle dazu lauten opendir() und readdir() -- angewendet auf das Verzeichnis, in dem sich die zu "includenden" Dateien befinden.
  7. Autor dieses Themas

    gil-galad

    gil-galad hat kostenlosen Webspace.



    ******* schrieb:

    stimmt ^^ :)

    Aber mich würde halt gern intresieren obs auch einfacher geht, denn die switch abfrage macht nen umständlichen eindruck ;)

    Dann lern PHP, wenn dir das umständlich ist, dann lass es lieber ganz bleiben. Du musst zumindest den Willen haben es zu lernen und die Switchabfrage ist eigentlich sogar ziemlich einfach. http://tut.php-q.net/
    Das kannst du dir ja mal anschauen, bis Switch-Abfragen ist es garnicht mal so weit und Arrays und andere Schleifen werden dir auf dem Weg dann auch erklärt!


    Ich hab nicht gesagt das ich zu faul bin.
    Mir gings daraum das ich bei switch
    in zwei dateien eigentlich was eintragen muss, einmal die sachen zum switchen und einmal die navi, und das find ich neeen bisschen umständlich und hab gefragt obs auch einfacher geht :D
  8. t*****b

    @notfux und lucas9991:
    Bei meiner Methode geht es mir darum, dass man nicht den Quellcode jedesmal mit einem Case erweitern muss, wenn man eine neue Seite hinzufügt. Das file-exists() ist keine Sicherheitsabfrage, sondern damit man Error404 auslesen kann falls die Datei nicht existiert.
    Wenn jemand den Parameter ändert, ist es piepsegal, da man da nur Seiten einfügen kann, die man sowieso über http öffnen kann. Wenn jetzt jemand Passwörter oder sonst was in Textdateien ablegt, ist er/die selber schuld, aber diese lassen sich auch über http anzeigen. Denkt mal drüber nach.
  9. Autor dieses Themas

    gil-galad

    gil-galad hat kostenlosen Webspace.


    trueweb schrieb:
    @notfux und lucas9991:
    Bei meiner Methode geht es mir darum, dass man nicht den Quellcode jedesmal mit einem Case erweitern muss, wenn man eine neue Seite hinzufügt. Das file-exists() ist keine Sicherheitsabfrage, sondern damit man Error404 auslesen kann falls die Datei nicht existiert.
    Wenn jemand den Parameter ändert, ist es piepsegal, da man da nur Seiten einfügen kann, die man sowieso über http öffnen kann. Wenn jetzt jemand Passwörter oder sonst was in Textdateien ablegt, ist er/die selber schuld, aber diese lassen sich auch über http anzeigen. Denkt mal drüber nach.


    Hat deins jetzt doch keine sicherheitslücke? :)

    Der ganze thread ist ein auf und ab ^^

    @trueweb: wenn man das jetz nach deinem prinzip macht und index.php aufruft kommt immer Erroro bla bla ...
    d.h. es fehlt ja noch was, aber was, ich find auch keine lösung hab mal weng rumgeschaut ..aber da kamen nur fehler ^^ (-g-)

    Beitrag geaendert: 27.12.2006 0:19:29 von gil-galad

  10. @notfux und lucas9991:
    Bei meiner Methode geht es mir darum, dass man nicht den Quellcode jedesmal mit einem Case erweitern muss, wenn man eine neue Seite hinzufügt. Das file-exists() ist keine Sicherheitsabfrage, sondern damit man Error404 auslesen kann falls die Datei nicht existiert.
    Wenn jemand den Parameter ändert, ist es piepsegal, da man da nur Seiten einfügen kann, die man sowieso über http öffnen kann. Wenn jetzt jemand Passwörter oder sonst was in Textdateien ablegt, ist er/die selber schuld, aber diese lassen sich auch über http anzeigen. Denkt mal drüber nach.

    Nicht denken, lesen würde auch helfen...
    index.php?site=../index.php
    Jetzt darfst du denken. ;-)
    Aber bitte rekursiv denken!

    gil-galad schrieb:
    [...]
    Ich hab nicht gesagt das ich zu faul bin.
    Mir gings daraum das ich bei switch
    in zwei dateien eigentlich was eintragen muss, einmal die sachen zum switchen und einmal die navi, und das find ich neeen bisschen umständlich und hab gefragt obs auch einfacher geht :D

    Es wurde eine einfachere Lösung genannt, die aber schwieriger zu programmieren ist und wofür man eine gewisse Erfahrung braucht.

    Beitrag geaendert: 27.12.2006 10:19:23 von lucas9991
  11. Autor dieses Themas

    gil-galad

    gil-galad hat kostenlosen Webspace.

    Hm okay..
    Mal kucken wie ichs ungefair mach ;)

    Wer noch tipps hat nur heer damit
  12. addlebrainedcity

    addlebrainedcity hat kostenlosen Webspace.


    trueweb schrieb:
    Wieso so umständlich?
    ...
    include("inh/".$site.".php");
    ...


    Der lucas hat ja schon den allgemeinen Grundsatz "keine Variablen" aufgestellt. Ich will mal kurz anmerken warum:


    $site = '../../blubb';
    ...
    include("inh/".$site.".php");

    Der Pfad ist jetzt "inh/../../blubb.php"

    Das löst jedes bekannte File-System so auf, dass zwei Verzeichnisebenen über "inh" eine Datei "blubb.php" angesprochen wird (wenn vorhanden). Das hast du so bestimmt nicht gewollt. Solche "speziellen Pfade" wie "../" oder "./" wirken auch innerhalb einer Pfadangabe, nicht nur am Anfang.


    Na und?
    Dann macht man vorher einmal str_replace ("/", "_", $page); und fertig.
    Und für die ganz schlauen:
    str_replace("%2F","_",$page);

    Schon kann das Verzeichniss nicht mehr gewechselt werden.

    Mfg
    addlebrainy
  13. t*****b


    Nicht denken, lesen würde auch helfen...
    index.php?site=../index.php
    Jetzt darfst du denken. ;-)
    Aber bitte rekursiv denken!


    Das kann man verhindern, außerdem würde dadurch ein Timeout entstehen und fertig, etwas Schlimmes kann man dadurch nicht machen. Die Sicherheit der Webseite und des Servers ist dadurch nicht beeinträchtigt (außerdem muss der Hacker erst einmal wissen, wie die Seite implementiert wird, der denkt sich doch auch über Include ;) ).
    Achja, lasst den ganzen Schmarrn am Besten und arbeitet gleich mit Template-Systemen und fertig mit der Diskussion.
  14. Autor dieses Themas

    gil-galad

    gil-galad hat kostenlosen Webspace.

    <?
    
         $site = $_GET['site'];
         str_replace('%2F','_',$page);
    
         if (file_exists('inh/'.$site.'.php'))
    
    
    
         {
    
                 include('inh/'.$site.'.php');
    
         }
    
         else
    
         {
    
                 echo 'ERROR 404: Die Seite existiert nicht';
    
         }
    
        ?>


    Ich habs jetzt so gemacht & nach addlebrainedcity müsste es sicher sein?! :)
    Und nach trueweb weitgehend auch ^^

    Allerdings hab ich noch immer das Problem wenn ich index.php aufruf das Error 404: bla bla kommt.
    :(
    Wie kann ich das beheben?

    Beitrag geaendert: 27.12.2006 11:06:34 von gil-galad
  15. t*****e


    Allerdings hab ich noch immer das Problem wenn ich index.php aufruf das Error 404: bla bla kommt.
    :(
    Wie kann ich das beheben?

    Beitrag geaendert: 27.12.2006 11:06:34 von gil-galad


    Nun, dazu müsstest du einfach abfragen, ob die variable 'site' überhaupt gesetzt ist:

    if (!$_GET['site'])
    {
       $_GET['site'] = 'home';
       //Oder wie auch immer deine Startseite heißen soll
    }


    Wenn ich dein PRoblem richtig verstanden habe, sollte es damit funktionieren.

    Beitrag geaendert: 27.12.2006 11:50:44 von thopage
  16. Autor dieses Themas

    gil-galad

    gil-galad hat kostenlosen Webspace.

    Du hast es vollkommen richtig verstanden ;) Es geht genau so wies soll ^^
    thx


  17. Nicht denken, lesen würde auch helfen...
    index.php?site=../index.php
    Jetzt darfst du denken. ;-)
    Aber bitte rekursiv denken!


    Das kann man verhindern, außerdem würde dadurch ein Timeout entstehen und fertig, etwas Schlimmes kann man dadurch nicht machen. Die Sicherheit der Webseite und des Servers ist dadurch nicht beeinträchtigt (außerdem muss der Hacker erst einmal wissen, wie die Seite implementiert wird, der denkt sich doch auch über Include ;) ).
    Achja, lasst den ganzen Schmarrn am Besten und arbeitet gleich mit Template-Systemen und fertig mit der Diskussion.

    Aliendwarfs Apache habe ich damit wunderbar zum Absturz gebracht.
    Außerdem belastet so etwas den Server nur unnötig.
    Man kann natürlich alles durch Einschränkungen richtig biegen etc. Das ist aber Wirkungs- und nicht Ursachenbekämpfung.
    Template-Systeme...kein Kommentar.
  18. Autor dieses Themas

    gil-galad

    gil-galad hat kostenlosen Webspace.

    Dankeschön ;)
    Mal schauen ....^^
  19. addlebrainedcity

    addlebrainedcity hat kostenlosen Webspace.


    Template-Systeme...kein Kommentar.


    Keine Template-Systeme. Wenn man seine eigene Seite den eigenen Anforderungen ideal anpassen will/muss, dann macht man's selber. (Sofern du mit Template-Systeme CMSe meinst)

    Mfg
    addlebrainy
  20. Also mit einem Template-System meint Lucas folgendes.
    <?php
        //Klasse zum Schreiben und Speichern von Templates
      class TPLParser{
          //Deklaration der Variablen
        var $template;  // Variable zum Speichern des Templates
        var $vars = array(); //Der Key wird spaeter mit Value ersetzt    
          
          //Konstruktor, der beim Initialisieren der Klasse aufgerufen wird
          //Parameter:
          //$vars     = Array, indem der Key fuer die Suche dient und der Inhalt das zu Ersetzende ist
          //$file     = Name der Templatedatei
          //$path     = Pfad zur Templatedatei
        function TPLParser($vars = array(), $file, $path = 'templates'){
            //Variablen abspeichern
          $this->vars = $vars;        
            //Laden des Templates
          $this->load($path.'/'.$file);       
            //Parsen des Templates
          $this->parse();          
        }      
          //Funktion zum Laden des Template-Files
          //Parameter:
          //$file = Name der Templatedatei
        function load($file){
            //Falls die Datei existiert, wird sie Zeilenweise in ein Array gelesen 
          if(file_exists($file))
            $this->template = @implode('', @file($file));
          else {
              //Andernfalls wird ein Fehler ausgegeben
            print "Die Datei $file existiert nicht!";
            exit;
          }                 
        }      
          //Funktion zum Parsen des Templates
        function parse(){
            //Variablen fuer das Parsen initialisieren
          $search  = array(); 
          $replace = array(); 
            
            //Uebergebene Variablen in die Masken einlesen
          foreach($this->vars as $key => $value) { 
            $search[]  = "`\{$key\}`is"; 
            $replace[] = $value; 
          }
            //Ersetzen der Schluesselwoerter und gleichzeitiges abspeichern der Templates
          $this->template = preg_replace($search, $replace, $this->template);
        }
      }
    ?>


    Dabei hat man einfach Schablonen, in die irgendein Inhalt eingefügt wird. Somit arbeitet man komplett ohne Includes, was den Zweck betrifft. Eine sichere und elegante Methode.

    Beitrag geaendert: 28.12.2006 10:19:45 von i-spacke

  21. Also mit einem Template-System meint Lucas folgendes.
    [...]

    Nun gut, also doch ein Kommentar von mir...
    Viele Leute denken, dass es die Aufgabe einer Klasse für Templates auch das Cachen und ähnliches ist, was vollkommen falsch ist, aber sich leider stark in die Köpfe eingebrannt hat.

    @spacke :
    $search[] = '`\{'.preg_quote ($key, '`').'\}`is';
    Wäre sinnvoller, sonst könnte es zu Problemen kommen.
  22. 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!