doppelter seitenaufruf.. warum?

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

  • doppelter seitenaufruf.. warum?

    OK... Ich fange einfach mal von Grund auf an und erkläre was ich zusammengebaut habe.

    Ich habe eine index.php. Auf dieser Seite wird über include("$_GET["page"]"); eine Seite eingebunden, die dann wechseln soll.
    Die Variable wird bei mehrseitigen Formularen über den action-Teil geändert.

    Die Änderung erfolgt so:

    PHP-Code:
    <form id="form1" name="form1" method="post" action="
    <?php 
    $url_alt 
    $_SERVER["PHP_SELF"]."?".$_SERVER["QUERY_STRING"];
    // Auslesen der gesamten URL

    $url_neu str_replace($_GET["page"], "order" $url_alt );
    // Auslesen des Wertes der Variablen und ersetzen durch neue Var

    echo $url_neu;
    // Ausgabe der neuen URL...
    ?>">
    D.h. die POST-Daten werden an die neue URL übermittelt. Eigentlich dachte ich das funktioniert so. Aber auf der letzten Seite möchte ich die Daten per Mail verschicken.
    Diese Mail wird nun immer 2 Mail verschickt. Leider weiß ich nicht so ganz warum. Ich vermute, dass die Seite 2 mal aufgerufen wird. Aber auch hier weiß ich nicht warum das so sein sollte...

    Bin langsam am verzweifeln, da ich alles nur ungern nochmal neu schreiben würde.

    Ich bin für jeden Tip dankbar. Auch für Kritik. Aber bitte versucht bei Kritik auch einen Verbesserungsvorschlag zu machen mit dem nicht nur Profis was anfangen können!


    Danke

    Grüße Tobias
    Wenn die Sonne der Kultur niedrig steht, werfen selbst Zwerge einen Schatten. (Karl Kraus)

  • #2
    und was hilft uns dieser codeschnipsel da oben?
    Freedom is a state of mind. Not a state in which we live.

    troxdev.ch | animefieber

    Kommentar


    • #3
      so rufe ich die neue Seite auf. Aber das ist wohl egal.

      Auf der index.php steht folgendes:

      include($_GET["page"].".php");

      in dem Browser wird folgende URL direkt eingegeben:

      http://localhost/index.php?page=components/module/order

      Es wird also die order.php in der index.php eingebunden. In der order.php wird über mail() eine Mail verschickt. Diese Mail wird aber immer 2 Mail verschickt und ich weiß nicht warum.

      Wenn ich die order.php über
      http://localhost/components/module/order.php aufrufe, dann gehts und die Mail wird nur ein mal verschickt...
      Wenn die Sonne der Kultur niedrig steht, werfen selbst Zwerge einen Schatten. (Karl Kraus)

      Kommentar


      • #4
        Original geschrieben von enforcer
        Auf der index.php steht folgendes:

        include($_GET["page"].".php");
        Dann beseitige bitte diese immense Sicherheitslücke als allererstes!
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          Da ich nicht der Profi bin (wie schon beschrieben)... wie binde ich dann Seiten ein, bzw. wie übergebe ich neue Seiten, wenn nicht über $_GET?
          Wenigstens ein Stichwort wonach ich suchen muss....

          Ich habe versucht mich daran zu halten
          http://www.it-academy.cc/article/147...verwenden.html

          Die Endung erst im Script hinzufügen...
          Zuletzt geändert von enforcer; 06.02.2007, 15:00.
          Wenn die Sonne der Kultur niedrig steht, werfen selbst Zwerge einen Schatten. (Karl Kraus)

          Kommentar


          • #6
            Original geschrieben von enforcer
            Wenigstens ein Stichwort wonach ich suchen muss....
            http://www.google.de/search?q=sicher...24_GET+include

            Ja, ich weiss - wahnsinnig schwer, auf sowas selber zu kommen ...
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar


            • #7
              Auf der index.php steht folgendes: include($_GET["page"].".php");
              Brandgefährlich!!
              Bei aktivierten Url-Wrappern holst du dir damit u.U. Tot und Teufel ins Haus!!

              Edit:
              Och, viel zu spät...
              Wir werden alle sterben

              Kommentar


              • #8
                Ich habe ja schon geschrieben wie ich vorgegangen bin...

                Ich habe in Google "inlude $_GET" eingegeben und unter anderem obige Seite erhalten.
                Da stehts so drin, so hab ichs gemacht.

                Aber abgesehen von dem Sicherheitsproblem verstehe ich immer noch nicht, warum meine Mail dann 2mal verschickt wird.

                Sollte dies hier ein Forum sein, indem Fragen weniger Wissenden nicht gerne gesehen sind, dann ist das ok und ich such mir ein anderes.
                Aber bitte sagt mir das dann.

                Zur Sicherheit

                Was wäre wenn ich schreibe:
                include("folder".$GET["page"].".php");

                Dann müsste die File doch auf meinem Server im Ordern folder liegen und die endung php haben, oder?
                Das wäre doch dann sicher...
                Zuletzt geändert von enforcer; 06.02.2007, 15:10.
                Wenn die Sonne der Kultur niedrig steht, werfen selbst Zwerge einen Schatten. (Karl Kraus)

                Kommentar


                • #9
                  Wenn ich auf meine Page schreibe: Spring von der Brücke, um eine Million Euro zu bekommen und du bei google nach "Million Euro" suchst, würdest du es dann auch tun?

                  Im Internet steht _SEHR_ viel Scheiße über sowas!

                  Nimm n vernünftiges switch-case Konstrukt und filtere nur die erlaubten Seiten heraus. Beispiele gibts dazu genug.

                  Hauptsache das $_GET kommt aus dem include raus, weil damit wäre es mir ein leichtes, Zugriff auf alle deine Daten zu bekommen :-)
                  Für alle die Fehler suchen, gibts gratis tolle Debuggingmöglichkeiten:
                  var_dump(), print_r(), debug_backtrace und echo.
                  Außerdem gibt es für unsere Neueinsteiger ein hervorragendes PHP Tutorial zu PHP 4 und PHP 5 (OOP)
                  Es heißt $array['index'] und nicht $array[index]! Und nein, das ist nicht egal!
                  Dieses Thema lesen, um Ärger im Forum und verzögerte Hilfen zu vermeiden.

                  Kommentar


                  • #10
                    Du solltest den übergebenen Parameter gegen eine Liste gültiger Datei-Namen checken, dann hast du da auch keine Sicherheitslücke in der Größe eines Scheunentors mehr.
                    PHP-Code:
                    $pages = array(
                        
                    'page_a.ext',
                        
                    'page_b.ext',
                        
                    'page_c.ext',
                    );

                    $page $_GET['page'];

                    if (
                    in_array($page$pages))
                    {
                        include 
                    $page;
                    }
                    else
                    {
                        die; 
                    // oder bspw. inkludieren der startseite

                    Nieder mit der Camel Case-Konvention

                    Kommentar


                    • #11
                      Original geschrieben von enforcer
                      Sollte dies hier ein Forum sein, indem Fragen weniger Wissenden nicht gerne gesehen sind, dann ist das ok und ich such mir ein anderes.
                      Aber bitte sagt mir das dann.
                      Im Gegenteil.

                      Aber ein wenig Grundlagenwissen setzen wir schon voraus, und Themen wie gerade dieses naive Einbinden von allem möglichen per include wurden schon zigfach behandelt.

                      Dieses Problem musst du zuerst beseitigen - andernfalls ist deine Seite mit allerhöchster Wahrscheinlichkeit so leicht angreifbar, dass alles weitere was du vielleicht mit Hilfe von hier erstellst schon morgen wieder von jedem x-beliebigen über's www gelöscht werden könnte.

                      Was wäre wenn ich schreibe:
                      include("folder".$GET["page"].".php");

                      Dann müsste die File doch auf meinem Server im Ordern folder liegen und die endung php haben, oder?
                      Nein, maximal letzteres - aber aus dem Verzeichnis folder kommt damit jeder heraus, der weiss wie man ins nächsthöhere Verzeichnis wechselt.
                      Zuletzt geändert von wahsaga; 06.02.2007, 15:22.
                      I don't believe in rebirth. Actually, I never did in my whole lives.

                      Kommentar


                      • #12
                        also dann eher so

                        PHP-Code:
                        switch($_GET["page"])

                        case 
                        seite1: include("seite1.php"); break;
                        case 
                        seite2: include("seite2.php"); break; 
                        Ich hoffe schon, dass ich etwas Grundwissen mitbringe, aber über dieses Einbinden steht nichts in meinen 2 Büchern bzgl. Sicherheitsaspekt. Und das suchen bei Google war dann wohl auch nicht das wahre, da ich mich an falsche Infos gehängt habe.

                        Wenn ich wüsste wo ich darüber nachlesen kann wie ich Seiten sicher einbinde ohne Sie fest zu definieren wie bei switch-case würde ich da nachlesen.
                        ich kann doch für eine HP mit 100 Seiten keine 100 cases aufstellen...

                        und Themen wie gerade dieses naive Einbinden von allem möglichen per include wurden schon zigfach behandelt.
                        war ja ursprücnglich eigentlich gar nicht meine Frage
                        Wenn die Sonne der Kultur niedrig steht, werfen selbst Zwerge einen Schatten. (Karl Kraus)

                        Kommentar


                        • #13
                          Original geschrieben von enforcer
                          also dann eher so
                          PHP-Code:
                          switch($_GET["page"])

                          case 
                          seite1: include("seite1.php"); break;
                          case 
                          seite2: include("seite2.php"); break; 
                          Nur, wenn du irgendwo auch die beiden Konstanten seite1 und seite2 definiert hast - hast du?
                          Ich hoffe schon, dass ich etwas Grundwissen mitbringe, aber über dieses Einbinden steht nichts in meinen 2 Büchern bzgl. Sicherheitsaspekt.
                          Was muss dazu erst in Büchern stehen, damit man sowas erkennt?

                          Du nimmst einfach das als Dateinamen, was per Parameter übergeben wird. Dass dieser Parameter sich durch jeden Benutzer beliebig ändern lässt, sollte klar sein.
                          Also sollte mit gesundem Menschenverstand ebenso glasklar sein, dass das ohne Überprüfung des Wertes ein erhebliches Risiko darstellt.

                          Wenn ich wüsste wo ich darüber nachlesen kann wie ich Seiten sicher einbinde ohne Sie fest zu definieren wie bei switch-case würde ich da nachlesen.
                          ich kann doch für eine HP mit 100 Seiten keine 100 cases aufstellen...
                          Du musst nicht über jeden Kleinkram etwas nachlesen - du darfst es auch mit selbst Nachdenken versuchen.

                          Beispielsweise ein Array liesse sich auch sehr simpel nutzen, um darin erlaubte Werte zu definieren, und dann den übergebenen Wert dagegen abzuprüfen - und entsprechend zu reagieren.
                          war ja ursprücnglich eigentlich gar nicht meine Frage
                          Mag sein, aber es ist dein allerdringendstes Problem, welches zuallererst gelöst werden muss, damit du nicht dich selbst und andere gefährdest.
                          (Weil dein Server sonst ganz schnell bspw. zur Spam-Schleuder, oder auch zum Warez- oder Kinder********************-Hostingservice werden kann.)
                          I don't believe in rebirth. Actually, I never did in my whole lives.

                          Kommentar


                          • #14
                            OK. Nächster versuch.

                            Ich habe eine Datei sessions.inc.php erstellt.
                            Da hab ich nun folgendes drinstehn:

                            PHP-Code:
                            $sections = array();
                            $sections['startseite']        =    "components/com_content/start.php";
                            $sections['seite1']        =    "components/com_content/seite1.php"
                            In meiner index.php wird das nun wie folgt eingebunden:
                            PHP-Code:
                                             if(isset($_GET['page']) AND isset($sections[$_GET['page']]))
                                            {
                                                include 
                            $sections[$_GET['page']];
                                            }  
                                            else
                                            {
                                                include 
                            $sections['start'];
                                            } 
                            Ist das nun sicher?
                            Wenn die Sonne der Kultur niedrig steht, werfen selbst Zwerge einen Schatten. (Karl Kraus)

                            Kommentar


                            • #15
                              Ja, das ist schon besser.


                              (Allerdings bleibt es IMHO nach wie vor eine Unsitte, bei fehlerhaften Parametern kommentarlos auf die Startseite zu verzweigen. Für solche Fälle ist eine 404 Not Found-Seite die richtigere Wahl.)
                              I don't believe in rebirth. Actually, I never did in my whole lives.

                              Kommentar

                              Lädt...
                              X