sandra: https - wann kann ich wieder in http?

Hi,

auf meiner Website wird mometan, sobald jemand ein Formular ansurft, in https gewechselt. Nun ist meine Frage, wann ich wieder HTTP wechseln kann.
Also die Daten werden per POST übergeben.

Wenn nun die seite form.php das Formular aufruft, welches als action="senden.php" hat, kann dann senden.php schon wieder im HTTP aufgerufen werden, oder kann ich erst danach wechseln?
Bzw. muss form.php schon in https aufgerufen werden oder reicht es, wenn das form https://host.de/senden.php aufruft?

Suche nach einer Lösung, wo der https-Modus nur so kurz wie möglich aktiviert ist.

Freue mich auf euer Feedback.

LG
sandra

  1. Hallo Sandra,

    Suche nach einer Lösung, wo der https-Modus nur so kurz wie möglich aktiviert ist.

    Anfragen werden an den Server entweder via HTTP oder via HTTPS gestellt. Die Anfrage nach der Datei "senden.php", die die Daten nachher verarbeiten soll, enthält

    1.) eine übliche Anfrage zum Aufruf einer Website,
    2.) die zu übertragenden Daten.

    Du willst, dass zumindest die Daten verschlüsselt übertragen werden. Also muss der ganze Aufrufvorgang der Seite, die die Daten erhalten soll, via HTTPS erfolgen. Du solltest also <form action="https://..."> schreiben.

    Wenn du wieder "zurück" möchtest, dann solltest du auf der Seite, die durch das action-Attribut aufgerufen wird (wohl "senden.php"), einfach nur Links setzen, die ausdrücklich mit "http://..." beginnen.

    Grüße,
    Peter

    1. Wenn du wieder "zurück" möchtest, dann solltest du auf der Seite, die durch das action-Attribut aufgerufen wird (wohl "senden.php"), einfach nur Links setzen, die ausdrücklich mit "http://..." beginnen.

      Die Links sind alle ohne Host gesetzt (also "/news/april"), daher ist das schwierig.

      Da für die Seite allerdings ohnehin JS nötig ist, kann ich dann doch bei senden.php einfach eine js-Anweisung schreiben, die direkt auf http umleitet:

      $(document).ready(function { document.location.href="http://www.host.de'.$_SERVER['REQUEST_URI'].$_SERVER['PATH_INFO'].'";  
      });
      

      Das müsste dann doch funktionieren (wenn ich in senden.php abfrage, ob http oder https-Aufruf, und halt nur bei https die daten verarbeite/sende)..?

      LG

      1. Mir wird grade ganz anders, besonders nachdem ich diesen Artikel gelesen habe.

        Entscheide dich für ein Protokoll - HTTPS oder nicht und spring nicht willkürlich herum. Ein ordentliches SSL-Zertifikat kostet eine stange Geld und hat durchaus einen Zweck.

        Brauchst du SSL um z.B. sensible Daten zu übertragen? Wenn ja, verwende es.

        Wenn nein - verzichte gänzlich auf SSL.

        1. Entscheide dich für ein Protokoll - HTTPS oder nicht und spring nicht willkürlich herum. Ein ordentliches SSL-Zertifikat kostet eine stange Geld und hat durchaus einen Zweck.

          Habe ein Zertifikat von Equifax

          Brauchst du SSL um z.B. sensible Daten zu übertragen? Wenn ja, verwende es.

          Ja, brauche ich

          Wenn nein - verzichte gänzlich auf SSL.

          Für die normalen Artikel brauche ich es nicht. Wieso sollte ich eine stinknormale Seite über https senden, wenn ich es nur für sensible Daten brauche??

          1. Habe ein Zertifikat von Equifax

            Spielt keine Rolle.

            Brauchst du SSL um z.B. sensible Daten zu übertragen? Wenn ja, verwende es.

            Ja, brauche ich

            Warum willst du die SSL-Verbindung dann nicht konsequent verwenden?

            Wenn nein - verzichte gänzlich auf SSL.

            Für die normalen Artikel brauche ich es nicht.

            Ok - es spricht

            Wieso sollte ich eine stinknormale Seite über https senden, wenn ich es nur für sensible Daten brauche??

            Einerseits - wieso nicht?

            Andererseits: was hindert dich daran einfach nur das verwendete Protokoll vor den entsprechenden URL zu setzen?

            Ja, ich weiß du hast absolute Pfadangaben zum Wurzelverzeichnis ...

            Deine vorgeschlagene Lösung mit JavaScript ist jedenfalls hHaarsträubend, potentiell gefährlich, schlichtweg eine Katastrophe.

            Du könntest das ganze zumindest vernünftig machen und eine serverseitige Technologie nutzen - z.B. die Server-Variable HTTPS die dir unter Apache bzw. mod_rewrite auch zur Verfügung steht.

            1. Wieso sollte ich eine stinknormale Seite über https senden, wenn ich es nur für sensible Daten brauche??

              Einerseits - wieso nicht?

              Weil ich unter anderem Seiten habe, die Livebilder / Webcams öffentlicher Anbieter einbinden. Da diese über http laufen, gibt es beim Aufruf dieser Seiten eine Warnmeldung (Achtung, unsicherer Content), das möchte ich nicht haben.

              Reicht das als Grund?

              Du könntest das ganze zumindest vernünftig machen und eine serverseitige Technologie nutzen - z.B. die Server-Variable HTTPS die dir unter Apache bzw. mod_rewrite auch zur Verfügung steht.

              Das JS hätte ich wie folgt eingebunden:

              if ($_SERVER["HTTPS"]) {  
              echo '<script language="JavaScript">  
              document.location.href="http://www.host.de'.$_SERVER['REQUEST_URI'].$_SERVER['PATH_INFO'].'";  
              </script>';  
              }
              
              1. Weil ich unter anderem Seiten habe, die Livebilder / Webcams öffentlicher Anbieter einbinden. Da diese über http laufen, gibt es beim Aufruf dieser Seiten eine Warnmeldung (Achtung, unsicherer Content), das möchte ich nicht haben.

                Reicht das als Grund?

                Ja.

                if ($_SERVER["HTTPS"]) {

                echo '<script language="JavaScript">
                document.location.href="http://www.host.de'.$_SERVER['REQUEST_URI'].$_SERVER['PATH_INFO'].'";
                </script>';
                }

                  
                Habe ich nicht mehr als deutlich zum Ausdruck gebraucht, dass diese Lösung eine Katastrophe ist?  
                  
                Einerseits ist die Lösung syntaktisch fehlerhaft bzw. nicht valide. Das Beispiel verstößt gegen RFC 2606, du lässt den Client etwas machen was der Server besser und sicherer machen kann, du verlässt dich auf das vorhandensein von JavaScript - mir fehlen die Worte.
                
                1. Einerseits ist die Lösung syntaktisch fehlerhaft bzw. nicht valide. Das Beispiel verstößt gegen RFC 2606, du lässt den Client etwas machen was der Server besser und sicherer machen kann, du verlässt dich auf das vorhandensein von JavaScript - mir fehlen die Worte.

                  Die gesamte Website setzt Javacript voraus, dass ist also nicht das Problem.

                  Da ich die Daten noch im https verarbeiten möchte, dann aber direkt auf http wechseln will, kann ich das über htaccess schlecht machen. Oder gibt es da einen Befehl für Seite erst komplett ausführen und dann weiterleiten? Ist mir nämlich nicht bekannt..

                  Alle Links Absolut mit Host angeben möchte ich auch nicht, da ein Umzug der Seite nicht ausgeschlossen ist, und das Ganze sehr umfrangreich ist.

                  Wenn ich generell JS voraussetze, ist es dann immernoch katastrophal, dass ich hierfür JS verwenden möchte? Oder hat das "katastrophal" einen anderen Grund?

                  1. Die gesamte Website setzt Javacript voraus, dass ist also nicht das Problem.

                    Ich würde das als Problem ansehen, aber das ist deine Sache.

                    Da ich die Daten noch im https verarbeiten möchte, dann aber direkt auf http wechseln will, kann ich das über htaccess schlecht machen. Oder gibt es da einen Befehl für Seite erst komplett ausführen und dann weiterleiten? Ist mir nämlich nicht bekannt..

                    Nein, das ist nicht möglich - in üblichen Szenarien ist das aber auch unsinnig. Aber es ist deine Seite, mach was du willst.

                    Alle Links Absolut mit Host angeben möchte ich auch nicht, da ein Umzug der Seite nicht ausgeschlossen ist, und das Ganze sehr umfrangreich ist.

                    Ich hab' da mal etwas von einem Konzept gehört, dass sich "Variable" nennt - moderne Sprachen unterstützen auch "globale Variablen" oder "Konstanten". Könnte doch etwas für dich sein?

                    Oder hat das "katastrophal" einen anderen Grund?

                    Es hindert niemanden, das JavaScript-Verhalten außer Kraft zu setzen und durch eine eigene Routine zu ersetzen. Dafür reicht eine infizierte Browser-Extension oder vergleichbares.

                    Sämtliche ungesicherte Logik die ausschließlich auf dem Client stattfindet ist potentiell gefährlich.

                  2. Mahlzeit sandra,

                    Die gesamte Website setzt Javacript voraus, dass ist also nicht das Problem.

                    Auf der einen Seite verlässt Du Dich auf eine potentiell unsichere und gefährliche Client-seitige Technologie und setzt diese teilweise sogar voraus - auf der anderen Seite möchtest Du aber *unbedingt* ein einzelnes Formular mittels https übertragen ... das wirkt IMHO irgendwie schizophren.

                    Da ich die Daten noch im https verarbeiten möchte, dann aber direkt auf http wechseln will, kann ich das über htaccess schlecht machen.

                    Das brauchst Du doch auch gar nicht.

                    Oder gibt es da einen Befehl für Seite erst komplett ausführen und dann weiterleiten? Ist mir nämlich nicht bekannt..

                    Das kommt darauf an, was Du unter "verarbeiten" verstehst. Bitte definiere das einmal.

                    Ich würde es normalerweise so machen, dass das Server-seitige (PHP-)Skript, das die Daten verarbeitet, dies entsprechend dem EVA-Prinzip auch tut und ganz zum Schluss im Erfolgsfall einfach mittels

                    [link:http://de3.php.net/manual/de/function.header.php@title=header]('Location: http://www.example.com/some/path/to/some_file.html');

                    auf das gewünschte Ziel umbiegt - und da kann (und sollte!) man prima sowohl Protokoll als auch Host, Pfad und Datei (gern teilweise aus $_SERVER) angeben.

                    Was genau ist das Problem dabei?

                    Alle Links Absolut mit Host angeben möchte ich auch nicht, da ein Umzug der Seite nicht ausgeschlossen ist, und das Ganze sehr umfrangreich ist.

                    Du kennst $_SERVER?

                    Wenn ich generell JS voraussetze, ist es dann immernoch katastrophal, dass ich hierfür JS verwenden möchte? Oder hat das "katastrophal" einen anderen Grund?

                    Nur den, dass Deine ganzen Bemühungen um Sicherheit dadurch teilweise zunichte gemacht werden (könnten) ...

                    MfG,
                    EKKi

                    --
                    sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
      2. Hallo sandra,

        $(document).ready(function { document.location.href="http://www.host.de'.$_SERVER['REQUEST_URI'].$_SERVER['PATH_INFO'].'";

        Das ist ja <zensiert>. Warten, bis die Seite geladen ist, und dann weiterleiten. Und dafür auch noch ein Framework verwenden. Schon mal was von .htaccess und .htsslaccess gehört?

        Gruß, Jürgen

        1. Schon mal was von [...] .htsslaccess gehört?

          Ich nicht - die Uni Münster (lt. Google und Bing) schon - das war's aber auch ;)

          1. Hallo suit,

            Schon mal was von [...] .htsslaccess gehört?

            Ich nicht - die Uni Münster (lt. Google und Bing) schon - das war's aber auch ;)

            ups, man soll nicht von sich auf andere schließen. Da war unser Serveradmin wohl recht fleißig. Aber Weiterleiten per .htaccess von http auf https ist doch Standard?

            Gruß, Jürgen

            1. Aber Weiterleiten per .htaccess von http auf https ist doch Standard?

              Wenn du im .htaccess-File mod_rewrite verwendest, dann ja.

              Geht natürlich auch direkt in der Apache-Config. Ein .htaccess-File sollte imho immer die Notlösung sein, ein echtes Config-File ist aus Performancegründen immer vorzuziehen.

  2. Hi!

    Wenn nun die seite form.php das Formular aufruft, welches als action="senden.php" hat, kann dann senden.php schon wieder im HTTP aufgerufen werden, oder kann ich erst danach wechseln?

    Mit welchem Request werden denn die sensiblen Daten übermittelt? Und wie soll der Browser wissen, dass er dafür HTTPS verwenden soll, wenn es nicht in der URL steht?

    Bzw. muss form.php schon in https aufgerufen werden oder reicht es, wenn das form https://host.de/senden.php aufruft?

    Enthält das leere Formular sensible Daten? Wenn ja, muss es über HTTPS angefordert werden, sonst kann es auch mit HTTP versendet werden. Allerdings weiß ein Benutzer in der Regel nicht, dass das Ziel eines Formulars auf sichere Weise angesprochen wird. Er sieht das und eventuell auch eine besondere Anzeige im Browser nur, wenn die Seite mit HTTPS aufgerufen wurde. Insofern ist es sinnvoll, schon das leere Formular per HTTPS aufzurufen, damit der Browser das anzeigen kann, und der Benutzer schon informiert ist. Zudem wird es doch sicherlich auch eine serverseitige Prüfung der Daten und gegebenenfalls einige Validierungsrunden geben. Du solltest dir dazu mal die Affenformulartechnik ansehen, dann klärt sich deine Frage von selbst, weil du nur noch ein Dokument hast, statt je eins für Formular und der Verarbeitung.

    Lo!