mabuhay: Lange URL's, Pfad des Inhaltes in URL

Hi

Ich habe eine Homepage in PHP Programmiert, der Inhalt wird dabei mit index.php?content=xyz aufgerufen. Da sich der Inhalt auch in Unterordner befindet geb ich sozusagen die Ordnerstruktur in der Adresse mit, z.B. ?content=home.news.history zeigt die History an welche sich in home/news/history.php befindet.
Seht Ihr dabei einen Nachteil? z.B. Suchmaschinen welche damit nicht klarkommen? Oder ist es sowieso schlecht wenn der Pfad des Inhaltes in der URL zu sehen ist?

mabuhay

  1. Hey,

    warum machst du aus deinen URLs nicht das z.B.:

    http://_deine_seite_.de/history

    Das ist doch auch viel leichter für den User sich das zu merken oder?

    Gruß,
    Rakedia

  2. Hallo!

    Ich habe eine Homepage in PHP Programmiert, der Inhalt wird dabei mit index.php?content=xyz aufgerufen. Da sich der Inhalt auch in Unterordner befindet geb ich sozusagen die Ordnerstruktur in der Adresse mit, z.B. ?content=home.news.history zeigt die History an welche sich in home/news/history.php befindet.

    Ich würde es anders machen.

      
    if($_GET['content'] == "home"){  
        include("home.php");  
    } else if($_GET['content'] == "gb"){  
        include("gb/gb.php");  
    } else if($_GET['content'] == "foobar"){  
        include("foobar/foobar.php");  
    } else {  
        echo "Bitte lassen Sie die GET-Parameter unveräändert :-)";  
    }  
    
    

    Damit werden deine Parameter überprüft und es können nur die Seiten angezeigt werden, bei denen du das auch willst.

    Seht Ihr dabei einen Nachteil?

    Die Sicherheit könnte leiden. Aber das können wir nicht beurteilen, solange wir deinen Code nicht kennen. Und die Punkte als Ersatz für die "/" halte ich auch nicht für optimal. Ob es damit wirklich zu Problemen kommen könnte, weiß ich aber nicht.

    z.B. Suchmaschinen welche damit nicht klarkommen?

    Soweit ich weiß, haben Suchmaschinen (zumindest früher) zwischen "normalen" URLs (rezepte/pilz/index.html) und anderen URLs (index.php?content=pilzIndex) unterschieden. Ob das heute noch so ist, weiß ich nicht.

    Oder ist es sowieso schlecht wenn der Pfad des Inhaltes in der URL zu sehen ist?

    Du musst auf jeden Fall überprüfen, ob der Pfad im GET-Parameter dem entspricht, was du willst. Ich würde es so machen, wie oben.

    ciao, ww

    --
    Schäuble:
      "Wir können alles. Außer Rechtsstaat."
    1. Hi

      Wenn ich alles mit if und elseif oder switch mache,  muss ja dann bei jeder neu erstellten Datei der Code geändert werden. Wie funktioniert das denn bei grösseren Webprojekten? Ich hab schon etwa 100 unterschiedliche Dateien.

      mfg
      mabuhay

      1. Hi!

        Wenn ich alles mit if und elseif oder switch mache,  muss ja dann bei jeder neu erstellten Datei der Code geändert werden.

        Ja, wenn du es so machst, wie du es gerade tust...

        Wie funktioniert das denn bei grösseren Webprojekten? Ich hab schon etwa 100 unterschiedliche Dateien.

        Und diese 100 Dateien sollen alle so auf die gleiche Art und Weise eingebunden werden?
        Wäre es dann nicht eventuell besser, wenn dein Content aus einer Datenbank kommen würde?
        Dann hättest du nicht 100 verschiedene Seiten, sondern vielleicht nur eine.
        Nimm mal wieder die Wikipedia als Beispiel.
        Du besteht auch aus unzähligen Seiten. Aber es existiert nicht jeweils ein Dokument für jeden einzelnen Artikel.
        Da gibt es nur eine Datei und der Content kommt aus einer Datenbank.

        Und wenn du nicht für jedes Dokument deinen Switch-Block erweitern willst, dann könntest du es natürlich auch so machen, daß die Datei eingebunden wird, deren Namen du im URL übergibst.
        Aber dann mußt du in jedem Fall vorsichtig vorgehen.
        Dann würde ich das Script so schreiben, daß man keine Pfade per URL übergeben kann.
        Filtere Sonderzeichen aus dem URL, so daß man keinen Slash als Pfadtrenner übergeben kann.
        Filtere auch alle möglichen Codierungen für den Slash.
        Binde eine Datei dann halt nur ein, wenn diese auch in deinem include-Dateien-Verzeichnis vorhanden ist.
        Es darf in keinem Fall möglich sein, daß irgendeine Datei eingebunden wird, die du nicht eingeplant hast.
        Ein include( $_GET['dateiname'] ); ohne jegliche Prüfung wäre Wahnsinn.

        Schöner Gruß,
        rob

      2. hi,

        Wenn ich alles mit if und elseif oder switch mache,  muss ja dann bei jeder neu erstellten Datei der Code geändert werden.

        Dann nutze halt ein Array, in dem du die erlaubten Begriffe und Unterseiten ablegst.

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
  3. Hallo mabuhay,

    Ich habe eine Homepage in PHP Programmiert, der Inhalt wird dabei mit index.php?content=xyz aufgerufen. Da sich der Inhalt auch in Unterordner befindet geb ich sozusagen die Ordnerstruktur in der Adresse mit, z.B. ?content=home.news.history zeigt die History an welche sich in home/news/history.php befindet.
    Seht Ihr dabei einen Nachteil?

    Die Lesbarkeit und, falls schlecht implementiert, die Sicherheit. Ich würde gegen ersteres Mechanismen wie mod_rewrite o.ä. einsetzen. Um unerwünschten Zugriff zu vermeiden, musst du sicherstellen dass nur die Dokumente, die für die Öffentlichkeit bestimmt sind, ausgeliefert werden.

    z.B. Suchmaschinen welche damit nicht klarkommen? Oder ist es sowieso schlecht wenn der Pfad des Inhaltes in der URL zu sehen ist?

    Suchmaschinen ist es meines Wissens relativ egal, wie die URL einer Seite aussieht.

    Schöne Grüße,

    Johannes

    1. Suchmaschinen ist es meines Wissens relativ egal, wie die URL einer Seite aussieht.

      Es ist mir nicht egal wie deine URL aussieht vor dem ersten '&'
      Es ist mir aber scheissegal wie der Rest aussieht
      freundliche Slurps Yahoo!

  4. Hi!

    Ich habe eine Homepage in PHP Programmiert,

    Meinst du Homepage oder Website?

    Seht Ihr dabei einen Nachteil?

    Ja, die Adressen sehen nicht besonders schön aus und sind nicht besonders einfach zu merken.

    z.B. Suchmaschinen welche damit nicht klarkommen?

    Den Suchmaschinen ist das egal. Den Usern aber vielleicht nicht...

    Oder ist es sowieso schlecht wenn der Pfad des Inhaltes in der URL zu sehen ist?

    Das der Pfad zu sehen ist, muß nicht schlecht sein.
    Sofern du serverseitig eine anständige Prüfung durchführst, ist das kein Problem.
    Wenn du jedoch keine ordentliche Prüfung durchführst und folgendes einsetzt, ist es mehr als schlecht:

    <?php  
    $file = str_replace( ".", "/", $_GET['content'] );  
    include( $file );  
    ?>
    

    In diesem Fall wäre es möglich, beliebige Dateien dort einzubinden und das könnte gefährlich werden.
    Selbst wenn man es nicht schafft, bösartigen Code damit auszuführen, so könnte man dort eventuell deine .htpasswd (oder anderes) einbinden.
    Diese Datei würde dann zwar nicht ausgeführt werden, aber die dann ausgegebene Fehlermeldung könnte Teile dieser Datei (wie z.B. Paßwörter oder Paßwort-Hashes) preisgeben.
    Du darfst also in keinem Fall einfach alles einbinden, was per URL übergeben wird.
    Da du deinen Code nicht gepostet hast, weiß ich nicht, ob das Script ausreichend gesichert ist.

    Du mußt aber auch nicht den kompletten Pfad der einzubindenen Datei übergeben.
    Das könntest du doch auch im Script "verstecken".
    Reicht es denn nicht, den Dateinamen oder irgendeinen Begriff per URL zu übergeben?
    Dein Script bindet dann die entsprechenden Dateien aus den entsprechenden Verzeichnissen ein.

    <?php  
    switch ( $_GET['content'] )  
    {  
     case 'history':  
      include( './home/news/history.php' )  
      break;  
     case 'xyz':  
      include( './irgend/was/xyz.php' )  
      break;  
     default:  
      include( 'standardseite.php' );  
      break;  
    }  
    ?>
    

    In jedem Fall würde ich die URL-Parameter so wählen, daß einfach zu merkende Adressen rauskommen.

    "Ich kenne eine tolle Seite. Schau dir mal http://example.com/index.php?content=home.news.history an."
    Das klingt nicht so gut, wie: "Besuch mal http://example.com/index.php?site=history".

    Und noch besser wäre es, wenn du die URL mit Hilfe von mod_rewrite umschreiben würdest.
    Damit könntest du deinen Usern dann Adressen wie http://example.com/history präsentieren und intern würde der Server dann http://example.com/index.php?content=home.news.history ausliefern.
    Das wäre für die menschlichen User in jedem Fall einfacher.
    Schau dir beispielsweise mal die Adressen in der Wikipedia an.
    Die sehen alle so aus: http://de.wikipedia.org/wiki/ARTIKELNAME.
    Die haben auf ihren Servern auch keine Millionen von echten Verzeichnissen angelegt...

    Schöner Gruß,
    rob

    1. DankeDankeDanke

      für die vielen Antworten. War mir schon klar dass es nicht soo schön aussieht, hatte aber noch keine Idee wie ich es anstellen könnte auf eine einfache und praktische Lösung zu kommen. Werd mir mal mod_rewrite anschauen...

      mfg
      mabuhay