PHP Navigation mit GET-Variabel

  • Hej,

    vorweg die forumssuche und google habe ich intensiv genutzt. sogar so oft, daß beide mittlerweile schon nach mir suchen. :) leider habe ich aber nicht die lösung meines problems gefunden.
    Ich möchte meine Homepage und deren Navigation per PHP realisieren. Dabei soll die Navigation über die GET-Variabel erfolgen - also, so wie forum-hilfe.de auch aufgebaut ist.
    richtig läuft: die richtige startseite wird beim ersten aufruf der index.php angezeigt.

    was nicht läuft: wenn ich die links anklicke, wird nur die error-datei angezeigt, NICHT die gewünschte site.

    wo ist der fehler?

    meine config.php (die navigation ist gleich mit integriert)


    meine index.php


  • Es gibt hier [php ][/ php] tags ;)

    PHP
    if(isset($_GET['section']) AND isset($section[$_GET['section']]))


    Als GET-Parameter definierst du menue/news.php. Der "entsprechende" Key iin $section ist aber nur "news".
    Die Bedingung KANN nicht true sein.
    Mal abgesehen davon, ist das 100-mal unsicher.
    Versuchs damit:

    PHP
    // URL: index.php?page=news
    switch ($_GET['page']) {
        case "news":
            include("news.php");
        break;
        default:
            include("home.php");
        break;
    }

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  • hm, ich wollte mir eigentlich auf dauer die "arbeit" sparen, config UND index zu bearbeiten.
    unsicherer warum? könnte so über hinzufügen in die URL von außen schabernack mit meiner homepage angefangen werden?

  • damn it! gibts solche böse mensch wirklich... (rhetorische frage)
    na was für ein glück, daß ich gefragt habe und den code nicht doch richtig hingewurschtelt habe und dann sowas passiert. Ich werd deinen vorschlag mal austesten (morgen).
    besten dank für's erste!!

  • Solche Menschen gibts, ja. Bei einer Privaten Homepage wirst du da sicherlich nicht betroffen sein, aber Seiten, die Bekannt sind, auf denen es was zu hohlen gibt, z.B. ICQ.com, Unendlichviele Adressdaten, müssen da höllisch aufpassen.

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  • Ändere doch dein file_exists ein bischen um und maskiere dein Get parameter, dann kannst du dir das schon sparen

    mfg


  • vorweg die forumssuche und google habe ich intensiv genutzt.


    Kurz gesagt: das ist gelogen! In jedem PHP-forum wurde dieses thema schon 'zig-fach besprochen und tutorials zu dem thema gibt es auch einige. Da muss man was finden, wenn man richtig sucht!

    Jawol. z.B. https://www.forum-hilfe.de/www.example.co…z_b%C3%B6se.php
    und schon hab ich code auf deinem Server/webspace ausgeführt und kann damit quasi alles.


    Und das ist falsch! ganz_boese.php wird nicht auf dem eigenen server ausgefuehrt, sondern von "meinserver" geparst geliefert

  • Zitat


    Und das ist falsch! ganz_boese.php wird nicht auf dem eigenen server ausgefuehrt, sondern von "meinserver" geparst geliefert


    Wer sagt denn, das sie datei PHP-Code enthält?!? ich kann von mir aus auch sowas (sinnloses) schreiben:

    PHP
    <?php
    echo "\<\?\php";
    echo "unlink(\"abc.php\");";
    echo "\?\>";
    ?>


    Übernimm dich mal nicht so.

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  • wenn denn doch keine gefahr besteht... wo liegt denn der fehler, dass mir immer nur die error.php angezeigt wird und nicht die korrekte seite? auch bei angepaßtem ordnerverlauf gehts nicht richtig.

    @gast... wenn ich beim lesen (forum+google) meinen fehler entdeckt hätte, würde ich hier nicht posten...

  • Dann hat es das, das ändert nichts am Problem.
    @TS:
    Schau mir mal deine array-keys und die entsprechenden GET-Parameter an. Fällt dir was auf?

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  • index.php?section=genealogie/gen-start.php

    d.h. $_GET['section'] = genealogie/gen-start.php
    dieser Key exisitert in deinem Array nicht.

    Fals du einen Ordner sozusagen für Includes freigeben möchtest, könntest auch das includen was im Get steht (eben mit file_exists prüfen ob die Datei exisitert)
    z.B.

    PHP
    if(file_exists($file = "includes/$_GET[section]")) {
      include $file;
    } else {
      header("HTTP/1.0 404 Not Found");
    }

    Bei der Variante musst du aber immer dran denken, dass alle Files die du auf dem Server hast im Prinzip includet werden können (fals man den Server nicht richtig einstellt).

    //P.S. Ach bleib lieber bei der Keyvariante - da kannste Sicherheitstechnisch (fast) nichts falsch machen *g*

    2 Mal editiert, zuletzt von Grevas (18. Dezember 2010 um 14:00)

  • Abgesehen davon das dein PHP Code so nicht funktioniert ist das doch ganz einfach:

    PHP
    <?php 
    if (ctype_alnum($_GET['section']))include 'genealogie/'. $_GET['section'] . '.php';
    ?>

    Wenn man möchte noch ein file_exists drumpacken

  • Abgesehen davon das dein PHP Code so nicht funktioniert [...]

    Klar funktioniert der?
    Fehlt natürlich noch der standard include, fals 'section' leer ist...

    PHP
    if(!isset($_GET['section']) || empty($_GET['section'])) {
      include 'index.html';
    }
    elseif(file_exists($file = "includes/$_GET[section]")) {
      include $file;
    }
    else {
      header("HTTP/1.1 404 Not Found");
    }

    Fals man immer die selbe Endung hat, kann man die natürlich noch dazu schreiben, damit die nicht in der URL Sichtbar ist.

    2 Mal editiert, zuletzt von Grevas (19. Dezember 2010 um 13:39)

  • Nur weil etwas geht ist es nicht sauber bitte nicht immer überall " verwenden und nirgends Trennen, dass ist sehr unsauber


    Code
    [COLOR=#000000][COLOR=#007700]elseif([/COLOR][COLOR=#0000bb]file_exists[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]$file [/COLOR][COLOR=#007700]= '[/COLOR][COLOR=#dd0000]includes/'.$_GET['section'][/COLOR][COLOR=#007700])) {
      include [/COLOR][COLOR=#0000bb]$file[/COLOR][COLOR=#007700];
    }
    [/COLOR][/COLOR]

    Außerdem finde ich auch das eine Variablezuweisung nichts in einer Überprüfung zu suchen hat

    Code
    [COLOR=#000000][COLOR=#007700]elseif([/COLOR][COLOR=#0000bb]file_exists[/COLOR][COLOR=#007700]([/COLOR][COLOR=#007700]'[/COLOR][COLOR=#dd0000]includes/'.$_GET['section'][/COLOR][COLOR=#007700])) {[/COLOR][/COLOR]
    [COLOR=#000000][COLOR=#007700]   include [/COLOR][/COLOR][COLOR=#000000][COLOR=#007700]'[/COLOR][COLOR=#dd0000]includes/'.$_GET['section'][/COLOR][/COLOR][COLOR=#000000][COLOR=#007700];
    }
    [/COLOR][/COLOR]

    Aber du hattest recht, es geht, aber das ist ja oft so in PHP

    4 Mal editiert, zuletzt von Pion (19. Dezember 2010 um 16:20)

  • Wenn man keine Ahnung hat ... und so weiter :P

    Maße dir bitte nicht an, zu entscheiden was sauber ist und was nicht. Diese Möglichkeiten gibt es nicht umsonst in PHP.

    //P.S. bevor hier eine tirade gestartet wird wie 'unsauber' php ist, schau dir bitte Sprachen wie Python oder Perl an. Dann können wir weiterreden.

    Einmal editiert, zuletzt von Grevas (19. Dezember 2010 um 20:18)