Nick: Weiterleitung

Hallo!

Wie leite ich am besten von http://example.com/test.php auf http://example.com/test.php?datum=2013-06-05 weiter?

Gruß
Nick

  1. مرحبا

    Wie leite ich am besten von http://example.com/test.php auf http://example.com/test.php?datum=2013-06-05 weiter?

    mod_rewrite eignet sich für sowas.  Was ist dein Ziel?

    mfg

    --
     .
    ..:
    1. مرحبا

      Was ist dein Ziel?

      Und was genau meinst du mit "weiterleiten"?

      mfg

      --
       .
      ..:
      1. Und was genau meinst du mit "weiterleiten"?

        Serverseitige Weiterleitung.

    2. mod_rewrite eignet sich für sowas.  Was ist dein Ziel?

      Und wie greife ich da auf ein Datum aus dem PHP-Skript zu?

      1. مرحبا

        Und wie greife ich da auf ein Datum aus dem PHP-Skript zu?

        Du musst schon etwas genauer werden, wenn du Hilfe erwartest.

        Woher kommt das Datum? Wie kam es dahin, wo es herkommt? Was soll in der Adressleiste des Browsers stehen, was im Browser selbst?

        mfg

        --
         .
        ..:
        1. Woher kommt das Datum? Wie kam es dahin, wo es herkommt? Was soll in der Adressleiste des Browsers stehen, was im Browser selbst?

          Das Datum wird im Skript generiert. Was in der Adressleiste stehen soll, habe ich doch im Ausgangsposting geschrieben.

          1. مرحبا

            Was in der Adressleiste stehen soll, habe ich doch im Ausgangsposting geschrieben.

            Hast du nicht, sonst müsste ich ja nicht alle drei Nase lang nachhaken.

            mfg

            --
             .
            ..:
            1. مرحبا

              Was in der Adressleiste stehen soll, habe ich doch im Ausgangsposting geschrieben.

              Was soll denn der Server mit diesen Parametern anfangen? Für gewöhnlich braucht man die Parameter im Script, nicht umgekehrt ...

              mfg

              --
               .
              ..:
      2. Mit Deiner Beschreibung kann man echt kaum was anfangen.

        Ich kann also nur vermuten:

        Du fragst:

        Wie leite ich am besten von http://example.com/test.php auf http://example.com/test.php?datum=2013-06-05 weiter?

        und dann

        Und wie greife ich da auf ein Datum aus dem PHP-Skript zu?

        Ich vermute also:

        Du hast irgendwo das aktuelle Datum ermittelt, z.B.

          
        $heute=date('Y-m-d');  
        
        

        und willst in Abhängigkeit von diesem zu einer Webseite weiterleiten:

          
        header('Location:http://www.example.com/test.php?datum='.$heute);  
        exit;  
        
        

        oder gleich:

          
        header('Location:http://www.example.com/test.php?datum='.date('Y-m-d'));  
        exit;  
        
        

        Wenn es etwas anderes ist, dann versuche Dein Problem zu beschreiben.

        Jörg Reinholz

        1. Moin!

          Du hast irgendwo das aktuelle Datum ermittelt, z.B.

          $heute=date('Y-m-d');

          
          >   
          > und willst in Abhängigkeit von diesem zu einer Webseite weiterleiten:  
          >   
          > ~~~php
            
          
          > header('Location:http://www.example.com/test.php?datum='.$heute);  
          > exit;  
          > 
          
          

          Escaping fehlt!

            
          header('Location:http://www.example.com/test.php?datum='.rawurlencode($heute));  
          exit;  
          
          

          - Sven Rautenberg

          1. Escaping fehlt!

            Das ist jetzt sicher ein Späßchen gewesen? Was - bitte - sollte denn rawurlencode(date('Y-m-d')) bringen?

            Jörg Reinholz

            1. مرحبا

              Escaping fehlt!

              Das ist jetzt sicher ein Späßchen gewesen?

              Hab ich was verpasst?

              mfg

              --
               .
              ..:
            2. hi,

              Escaping fehlt!

              Das ist jetzt sicher ein Späßchen gewesen? Was - bitte - sollte denn rawurlencode(date('Y-m-d')) bringen?

                
              <?php  
              var_dump(rawurlencode(date('Y-m-d'))) ;  
              var_dump(date('Y-m-d')) ;  
              var_dump(date('Y-m-d') === rawurlencode(date('Y-m-d')));  
              
              

              string(10) "2013-06-06"
              string(10) "2013-06-06"
              bool(true)

              Aber es ist ein Kontextwechsel?

              mfg

              tami

              1. Aber es ist ein Kontextwechsel?

                Das ist durchaus so.

                Wenn ich aber von vornherein weiß, dass die _selbst_ generierten Daten im konkreten Fall keine unzulässigen Zeichen (hier: print $date =~ m/[^0-9-]/) enthalten, dann habe ich den Kontextwechsel implizit beachtet und brauche kein explizites rawurlencode() - welches voraussehbar keinerlei Effekt hat außer nahezu direkt (durch Beschäftigung und ergo Erwärmung  des Prozessors) und indirekt (Kohlendioxyd wegen des hierdurch bedingten Stromverbrauches) zur Erderwärmung beizutragen.

                Jörg Reinholz

                1. [latex]Mae  govannen![/latex]

                  Wenn ich aber von vornherein weiß, dass die _selbst_ generierten Daten im konkreten Fall keine unzulässigen Zeichen (hier: print $date =~ m/[^0-9-]/) enthalten, dann habe ich den Kontextwechsel implizit beachtet und brauche kein explizites rawurlencode() [...]

                  Man könnte höchstens argumentieren, daß dieser „implizit beachtete Kontextwechsel“ schon hinfällig sein kann, wenn man sich irgendwann entschließt, selbst generierte Daten auf dem Kontext entsprechend unzulässige Werte zu ändern. Wer schaut schon, ob bei der Verarbeitung dieser Daten irgendwo anders im Programm der Kontextwechsel dann immer noch gewährleistet ist?

                  ♫ FIIIIISCH!! ♪

                  Ric.. äh, Kai

                  --
                  var jQuery = $(hit);
                  „Die Borg würden nicht mal Spaß verstehen, wenn sie einen Vergnügungspark assimiliert hätten!” (B'Elanna Torres)
                  SelfHTML-Forum-Stylesheet
                  1. Wer schaut schon, ob bei der Verarbeitung dieser Daten irgendwo anders im Programm der Kontextwechsel dann immer noch gewährleistet ist?

                    <?foo $ModSarkasmus=true; ?>

                    Bei solch komplizierten Einzeilern, wie ...

                      
                    header('Location:http://www.example.com/test.php?datum='.date('Y-m-d'));  
                    
                    

                    ... ist das ja auch ernsthaft zu befürchten.

                    <?foo $ModSarkasmus=false; ?>

                    Jörg Reinholz

                    1. [latex]Mae  govannen![/latex]

                      Bei solch komplizierten Einzeilern, wie ...

                      header('Location:http://www.example.com/test.php?datum='.date('Y-m-d'));

                        
                      Nicht ablenken. In genau dem Beispiel, auf das Sven sich quotend bezog, war noch eine Variable $heute. Und zwischen der Zuweisung und der Verwendung kann theoretisch durchaus einiges an Code stehen, so daß man bei einer entsprechenden Änderung nicht direkt sieht, in welchem Kontext sie verwendet wird. Oder die Variable $heute wird in mehren Kontexten verwendet oder ...  
                        
                      
                      > ... ist das ja auch ernsthaft zu befürchten.  
                        
                      Ändert man "nur" das Datum-Format in einer Weise, daß ein Zeichen verwendet wird, das im URL-Kontext eine spezielle Bedeutung hat, produziert man Müll.  
                        
                      [♫ FIIIIISCH!! ♪](http://www.youtube.com/watch?v=4fwOWv_gm4M)  
                        
                      Ric.. äh, Kai  
                      
                      -- 
                      `var jQuery = $(hit);`{:.language-javascript}  
                      I am Pentium of Borg. Division is futile. You will be approximated.  
                        
                      [SelfHTML-Forum-Stylesheet](http://selfhtml.knrs.de/#h_stylesheet)  
                      
                      
                      1. Ändert man "nur" das Datum-Format in einer Weise, daß ein Zeichen verwendet wird, das im URL-Kontext eine spezielle Bedeutung hat, produziert man Müll.

                        Das vorliegend überhaupt diese Gefahr mit einem nennenswertem Risiko besteht kann ich nicht erkennen.

                        Der Frager hatte ein Problem in einem Bereich, den ich dem Grundlagenwissen zuordne. Wie groß und unübersichtlich kann das Skript wohl sein?

                        Aber: He! Wenn sich jemand die Hose mit der Beißzange anziehen will... dann kann ich den nach deutschem Recht nicht daran hindern. Jedenfalls nicht so lange er nur Performance verschwendet.

                        Jörg Reinholz

            3. Moin!

              Escaping fehlt!

              Das ist jetzt sicher ein Späßchen gewesen? Was - bitte - sollte denn rawurlencode(date('Y-m-d')) bringen?

              Fast jede Webapplikation hat an irgendeiner Stelle das Problem, dass durch unsaubere Programmierung Möglichkeiten zu Code-Injection eingebaut wurden.

              Die Herausforderung für die Programmierer ist also, solche Stellen möglichst einfach zu erkennen und zu beheben. Dies geschieht entweder manuell durch Anschauen des Codes oder tatsächlich automatisiert mit statischer Codeanalyse.

              Egal welchen Weg man wählt, wird man am Ende bei einer Zeile wie deiner landen und sich fragen: Was zum Henker steht wohl in der Variablen, und wie kann ich das herausfinden? Und man wird dann eine Suche starten nach den Stellen, in denen die Variable bearbeitet und gefüllt wird. Und im Zweifel wird die Stelle der Datumserzeugung auch keine statischen Formate enthalten, sondern dynamisch aus der Datenbank den konfigurierten Userwunsch, oder sonst was.

              Mit anderen Worten: Die Rückverfolgung, ob in einer Variablen überhaupt irgendwelche für den Kontextwechsel relevanten Zeichen stehen, oder ob die alle unverändert bleiben können, kann sich sehr aufwendig gestalten.

              Die einfachste Art, sich in seiner Applikation gegen sowas abzusichern: Einfach Escaping machen - ohne Diskussion über den konkreten Sinn an der konkreten Stelle. Das korrekte Escaping für den Kontextwechsel ist dort nie falsch - als Sonderfall lässt es den String lediglich unverändert.

              Die Tatsache, dass du ansonsten nur Performanceargumente dagegen anführst und direkt die arme Umwelt mit ins Boot holst, bestätigt die Schwäche deines Gegenarguments nur.

              Es geht nicht um Performance, es geht um Sicherheit. Die Performanceeinbußen eines zusätzlichen Funktionsaufrufs und unveränderter Stringausgabe sind zwar meß- aber nicht wahrnehmbar. Die Sicherheitseinbußen bei späterer, ungeeigneter Codeänderung an ganz anderen Zeilen als der Redirect-Header-Ausgabe hingegen werden nicht nur wahrnehmbar sein, sondern auch ganz andere Kosten verursachen können.

              Und nur darum geht es mir. Sicheres Programmieren kann man aufwendig betreiben, indem man bei jeder Variablenausgabe die Sinndiskussion des Escapings führt. Oder ganz schlicht und einfach erledigen, indem man einfach immer passendes Escaping betreibt, und sich dann niemals wieder daran erinnern muss, dass eine bestimmte Variable eben nicht alle Zeichen erlaubt, weil dahinter kein Escaping ist.

              Da Software ja in der Regel über einen langen Zeitraum lebt und gepflegt werden will, ist dieser zweite Ansatz deutlich weniger aufwendig. Und es ist nie verkehrt, als Vorbild in einem Forum immer auch Sicherheitsaspekte mit in den Code einfließen zu lassen - Unwissende werden deinen Code nämlich ohne Berücksichtigung dieser Sonderaspekte einfach nur kopieren - besser, er ist in sich sicher, nicht nur zufällig.

              - Sven Rautenberg

              1. Die Performanceeinbußen eines zusätzlichen Funktionsaufrufs und unveränderter Stringausgabe sind zwar meß- aber nicht wahrnehmbar.

                Das ist nicht ganz richtig. Denn gerade im verbreiteten Massenhosting auf hoch belasteten Servern wird sich jede Performanceverschlechterung in wahrnehmbarer Weise äußern, denn die einzelnen Verschlechterungen summieren sich zu abertausenden und Zeichenkettenoperationen sind, jedenfalls so weit ich darüber Bescheid weiß, sämtlich relativ "teuer".

                Die Sicherheitseinbußen bei späterer, ungeeigneter Codeänderung an ganz anderen Zeilen als der Redirect-Header-Ausgabe hingegen werden nicht nur wahrnehmbar sein, sondern auch ganz andere Kosten verursachen können.

                Du schreibst selbst "können". Darauf bin hier eingegangen. Im Übrigen hatte ich ja selbst vorgeschlagen gleich

                code lang=php]
                header('Location:http://www.example.com/test.php?datum='.date('Y-m-d'));
                exit;
                [/code]

                zu notieren - was jedes Argument, hier zu escapen, in Rauch aufgehen lässt (der natürlich schon wieder die "arme Umwelt" - die immer noch reich ist, dass wir sie ausbeuten können - belastet).

                Das dieses immer wieder von den Vertretern der "Du musst-hier-escapen-Fraktion" ignoriert wird wirkt doch recht zielorientiert. Ich hätte kein Problem damit, wenn irgendwer geschrieben hätte, dass diese Variante hinsichtlich möglicher, künftiger Änderungen sicherer ist.

                Im übrigen vermute ich, dass das Skript gar nicht mehr als diese Zeile(n) enthalten wird.

                Jörg Reinholz

                1. Moin!

                  Die Performanceeinbußen eines zusätzlichen Funktionsaufrufs und unveränderter Stringausgabe sind zwar meß- aber nicht wahrnehmbar.

                  Das ist nicht ganz richtig.

                  Also falsch?

                  Denn gerade im verbreiteten Massenhosting auf hoch belasteten Servern wird sich jede Performanceverschlechterung in wahrnehmbarer Weise äußern,

                  Das ist nicht ganz richtig...

                  denn die einzelnen Verschlechterungen summieren sich zu abertausenden und Zeichenkettenoperationen sind, jedenfalls so weit ich darüber Bescheid weiß, sämtlich relativ "teuer".

                  "Die Performanceeinbußen EINES zusätzlichen Funktionsaufrufs und unveränderter Stringausgabe sind zwar meß- aber nicht wahrnehmbar".

                  Ermessen wir doch mal erstens, wieviele Funktionsaufrufe zum korrekten Behandeln von Kontextwechsels man pro Request so brauchen wird.

                  Zweitens dann, wieviel Extra-Performance ein einzelner Funktionsaufruf im Vergleich zu keinem Aufruf verbraucht wird.

                  Drittens dann, wieviel Performance man wohl tatsächlich erwartet, wenn man auf einem hochbelasteten Shared-Server auch nur irgendein Skript aufrufen lässt (Tipp: You get what you pay for), und ob es vernünftig ist, dieses generelle Performanceproblem durch aufwendige Mikrooptimierung im sicherheitsrelevanten Codebereich zu lösen.

                  Das dieses immer wieder von den Vertretern der "Du musst-hier-escapen-Fraktion" ignoriert wird wirkt doch recht zielorientiert. Ich hätte kein Problem damit, wenn irgendwer geschrieben hätte, dass diese Variante hinsichtlich möglicher, künftiger Änderungen sicherer ist.

                  Hatte ich geschrieben.

                  Im übrigen vermute ich, dass das Skript gar nicht mehr als diese Zeile(n) enthalten wird.

                  Das ist irrelevant. Es geht darum, als Vorbildfunktion die Anwendung von kontextgerechtem Escaping darzustellen.

                  - Sven Rautenberg

                  1. hi,

                    Das ist irrelevant. Es geht darum, als Vorbildfunktion die Anwendung von kontextgerechtem Escaping darzustellen.

                    Ich möchte mal Svens Ansatz unterstützten, da gerade das kontextgerechte Escaping ja besonders schwierig ist aber besonders/einzig sicherheitsrelevant ist.

                    Das Argument mit der Umwelt könnte man eher auf einige Postings hier anwenden ;-) - kleiner Scherz, musst jetzt mal sein.

                    mfg

                    tami

                    1. hi,

                      Ich möchte mal Svens Ansatz unterstützten, da gerade das kontextgerechte Escaping ja besonders schwierig ist aber besonders/einzig sicherheitsrelevant ist.

                      s.a. Svens Posting zur Sicherheit

                      mfg

                      tami

                  2. Zweitens dann, wieviel Extra-Performance ein einzelner Funktionsaufruf im Vergleich zu keinem Aufruf verbraucht wird.

                    Wenn Du die Frage so stellst: Genau hundert Prozent des eigenen Performance-Verbrauchs.

                    und ob es vernünftig ist, dieses generelle Performanceproblem durch aufwendige Mikrooptimierung im sicherheitsrelevanten Codebereich zu lösen.

                    Die "Mikrooptimierung" ist eine "Nichtverschwendung". Siehe unten.

                    Das dieses immer wieder von den Vertretern der "Du musst-hier-escapen-Fraktion" ignoriert wird wirkt doch recht zielorientiert.

                    Wieso nur wird - mit erstaunlicher Beharrlich - ignoriert, dass ich tatsächlich schrieb:

                    oder gleich:

                    header('Location:http://www.example.com/test.php?datum='.date('Y-m-d'));

                    exit;

                      
                    
                    > > Ich hätte kein Problem damit, wenn irgendwer geschrieben hätte, dass diese Variante hinsichtlich möglicher, künftiger Änderungen sicherer ist.  
                      
                    
                    > Hatte ich geschrieben.  
                      
                    [Nein](https://forum.selfhtml.org/?t=213947&m=1463424).  
                      
                    
                    > > Im übrigen vermute ich, dass das Skript gar nicht mehr als diese Zeile(n) enthalten wird.  
                    >   
                    > Das ist irrelevant. Es geht darum, als Vorbildfunktion die Anwendung von kontextgerechtem Escaping darzustellen.  
                      
                    Ganz ehrlich: Ich denke, ich habe gute Gründe das [letzten Endes!] geforderte ...  
                      
                    `header('Location:http://www.example.com/test.php?datum='.rawurlencode(date('Y-m-d')));exit;`{:.language-php}  
                      
                    ... für absurd zu halten. Das gilt auch für die "quasipädagogische" Argumentation, wonach die fragenden zum sicheren Handling von Daten aufgefordert werden sollen.  
                      
                    Ich habe je durchaus Respekt und Verständnis vor Deiner Position - aber ich bleibe [im vorliegenden!] Fall bei der meinen. In anderen Fällen bin - wenn ich früh genug komme - definitiv auch ein Vorbeter der "Dein Zeug ist unsicher: Beachte den Kontextwechsel, escape möglicht nahe der Verwendung von Fremddaten" - Fraktion.  
                      
                    [Jörg Reinholz](http://www.fastix.org/)  
                    
                    
                  3. Moin!

                    Die Performanceeinbußen eines zusätzlichen Funktionsaufrufs und unveränderter Stringausgabe sind zwar meß- aber nicht wahrnehmbar.

                    Das ist nicht ganz richtig.

                    Also falsch?

                    Das habe ich erkennbar nicht ausdrücken wollen und eine Aussage, dass es falsch sei, träfe auch nicht zu. Wir haben hier kein booleansches Format. Zwischen "falsch" und "richtig" gibt es hier viele Abstufungen und nur unter extremen Umständen ist Deine Aussage voll richtig oder voll falsch. Zu diesen Umständen gehören dann auch Definitionen. Z.B. bedarf die Frage 'Was ist eine "wahrnehmbare" Performanceeinbuße?' einer Definition um sich fest legen zu können. Ich wette, genau so wie ich Rot- und Grüntöne anders wahr nehme als viele (aber nicht alle) und deshalb am liebsten "nach Zahlen male" nehmen auch verschiedene Menschen - sogar dieselben zu verschiedenen Lebens- oder Uhrzeiten die Länge von Zeitabschnitte anders wahr.

                    Ich habe bereits dargelegt, dass bei hoher Serverlast die Performanceeinbußen durchaus wahrnehmbar werden können. Das entspricht auch meiner Erfahrung. Und für die bin ich alt genug.

                    Jörg Reinholz

  2. مرحبا

    Wie leite ich am besten von http://example.com/test.php auf http://example.com/test.php?datum=2013-06-05 weiter?

    Jetzt verstehe ich hoffentlich dein Problem.

    Du willst anscheinend, dass beim Aufruf von "http://example.com/test.php", dass Script Intern "?datum=2013-06-05" dranhängt, und dementsprechend Inhalt ausgibt? Das Datum sieht Variabel aus, woher soll das Script wissen. welches Datum gesetzt ist? Diese Info muss auch beim umleiten irgendwie mitgegeben werden.

    mfg

    --
     .
    ..:
  3. Hallo,

    ich lass mich gern eines Besseren belehren, aber ich denke nicht, dass das möglich ist. Der Server kann zwar zu einer anderen Seite weiterleiten, aber er kann bei der Auslieferung der Seite nicht die Adressleiste des Browsers beeinflussen (siehe z.B. http://de.selfhtml.org/test.htm@title=hier). Der Browser nimmt halt das Dokument, das er zurückbekommt und zeigt es an.

    Viele Grüße
    Siri