KEINE Includes via Variablen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • KEINE Includes via Variablen

    HI!

    Ich will noch mal ne Diskussion aus dem Snippets-Forum auffrischen.

    Es ist ja allseits bekannt, dass man kein
    PHP-Code:
    include($_GET['var']); 
    benutzen sollte.

    Nun ist mir aber in den Sinn gekommen, dass ich eine Seite hätte, wo gaaaanz viele einzelne Scripte miteinander verbunden sind.

    Einfach wäre es nun index.php?shit=aktion zu verwenden. Nur will ich/man das ja nicht.

    Wie also vorgehen?
    -> Das speichern in der DB fällt weg, da es sich um Scriptdateien handelt. Und eval+DB-Verbindung spricht wohl kaum für performance.
    -> Nun könnte man alle Dateien mit einer if() abfrage ausstatten, so dass man alle includet, aber nur die entsprechende ausgeführt wird.
    -> Oder eben ein switch(), was ich aber bei der Menge vermeiden möchte, da es schwer zu Pflegen wird.

    Jemand eine Idee?

  • #2
    wenn die seite aus gaaaaanz vielen einzelen scripten besteht, dann werden diese doch in der seite selbst includet.

    würde also nicht dem include($_GET["var"])-Nutzen widersprechen.

    Kommentar


    • #3
      naja, wenn du kein switch machen willst, einfach prüfen, ob $_GET['var'] brauchbaren Inhalt hat (z.B. keine /, keine ../ etc) damit kriegt man es schon ziemlich sicher. Dateien die nicht angesehen werden sollen müssen dann natürlich irgendwo liegen, wo sie durch deine Prüfung geschützt sind.
      hopka.net!

      Kommentar


      • #4
        @Hopka: Genau dass soll vermieden werden, also keine großartigen Abfragen. Da steckt kein Sinn hinter!

        @graf: Ich meine, dass idr. nur eine einzige dieser Dateien (o. Aktionen) benötigt wird. Welche das ist, würde ich gerne über einen Parameter in der URL bestimmen.

        Kommentar


        • #5
          ok, aber wenn eine aktion/funktion ein bestimmte datei benötigt, kann sie doch dann enstprechend geholt werden.

          also in der art:
          if (aktion == "machDuMa") {
          include "machDuMa.php";
          ... aktionen basierend auf MachDuMap
          }

          das gleiche mit functions.
          so gesehen, würde sie nicht über einen parameter übergeben werden.
          oder ist das dein WILLE?

          oder meinst du es noch anders?

          Kommentar


          • #6
            Ich meine, dass du diese gaaaanz vielen Scripte in einen Ordner packst, und dann prüfst, dass nicht jemand über die Werte, die an das Script übergeben werden auf andere Ordner zugreift. Also prüfen, dass in der Variable wirklich nur der Name einer Aktion (der i.d.R. nur aus Buchstaben besteht), und keine Pfadangabe ist.
            Nicht prüfen, ob die Aktion zugelassen ist, sondern gucken, dass man über diese Variable keine Dateien öffnen kann, die einen nix angehen - Denn dass ist doch der Grund, weshalb man das nicht benutzen sollte, oder?
            hopka.net!

            Kommentar


            • #7
              darum geht's doch aber nicht

              Kommentar


              • #8
                @hopka: ich mag das ansich nicht! Lies dir mal den aktuellen Thread im Snippet Forum von Benny durch, da steht auch warum...

                @graf: Also die Aktionen (die in einzelnen dateien vorliegen) müssen ja irgendwie angesteuert werden. Das heißt, ich muss ja irgendwie mitteilen, dass die auflist-seite angezeigt wird. Von daher halte ich Get-Parameter (mittels Rewrite) für sehr gut geeignet.
                Nun soll aber eben nicht tausend mal ein swich(), geschweige den if/elseif gemacht werden. Daher hatte ich die idee alle dateien zu includen und in den dateien selbst mittels if zu prüfen. Das erleichtert die Wartung. Mich stört aber, dass ich dann alle Dateien includen muss.

                Aber mir fällt absolut nichts besseres ein.

                Kommentar


                • #9
                  Also die Aktionen (die in einzelnen dateien vorliegen) müssen ja irgendwie angesteuert werden. ...
                  also jede Aktion eine Datei?
                  Nun soll aber eben nicht tausend mal ein swich(), geschweige den if/elseif gemacht werden. Daher hatte ich die idee alle dateien zu includen und in den dateien selbst mittels if zu prüfen. Das erleichtert die Wartung. Mich stört aber, dass ich dann alle Dateien includen muss.
                  Aber mir fällt absolut nichts besseres ein.
                  und was ist wenn du ein assoz. array nimmt mit der aktion als key und den zu includenden files als value-ARRAY ?

                  Oder hab ich das Problem immer noch nich gecheckt?

                  Kommentar


                  • #10
                    ich will auch mal

                    vielleicht ist das ja ne idee:
                    PHP-Code:
                    if(isset($_GET['action']))
                      {
                          
                    $thismodul $mainpath."/inc/datei".$_GET['action'].".php";
                          if(
                    ereg("([0-9]{3,4}))",$_GET['action']) && file_exists($thismodul))
                          {
                           include(
                    $thismodul);
                          }
                          else
                          {
                          include(
                    $mainpath."/inc/standard.php");
                          }
                      } 
                    includet werden nur dateien, die "datei000.php - datei9999.php" heissen,
                    im absoluten pfad "mainpath" liegen und natürlich existieren.

                    müsstest halt nen kleinen würgaround coden, der deine dateien umbenennt und uppt.
                    Kissolino.com

                    Kommentar


                    • #11
                      @tobiaz: was dabei?

                      Kommentar


                      • #12
                        Sorry, hab von Berni leider immer noch nicht meine Maildaten bekommen, so dass ich seit ner Woche keine Mails mehr bekomme

                        das zweite kommt meiner idee eigentlich sehr nahe. Ob das umbenennen jetzt unbedingt von nöten ist, weiß ich nicht. Ich bin bislang hingegangen, mit isset() und file_exists() überpfüft und dann habe ich absolut includet. Vielleicht sollte ich da noch ne RegEx einbauen, die mir sicher stellt, dass der String nur a-Z enthält und evtl 0-9.

                        Bei der Idee von Graf muss ich leider trotzdem alles doppelt pflegen (Aktions-Datei und Liste).

                        Danke euch soweit schon mal. wer noch ne idee hat, z.b. zwecks regex, wenn sie wirklich nötig sind. beim absoluten includen sollte man ja keine ebene höher kommen-

                        Kommentar

                        Lädt...
                        X