Thomas D: https "aktivieren": Denkanstöße

Hi,

also ich möchte (z.B. für die Registrierung) bei einer Homepage https verwenden, damit die Registrierungsdaten verschlüsselt übertragen werden.

Ich habe mir gedacht, dass dies am einfachsten zu realisieren ist, indem ich bei dem Verweis auf das Registrierungsformular einfach vor die URL "https://" anhänge. Das sieht dann so aus:

<?php  
   $url = 'https://'.$_SERVER['HTTP_HOST'].'/'.$site;  
   header('Location: '.$url);  
?>

...wobei in $site die Zieldatei gespeichert ist.
Funktioniert soweit auch super.
Nun zu meiner Frage:
Wie sollte ich das ganze möglichst "sauber" implementieren.
-> Sollte ich eine Session Variable verwenden, die bei jedem Seitenaufruf überprüft, ob https oder http verwendet werden soll.
-> Oder sollte ich beim Verlinken auf ein Script verweisen, das htps:// davorhängt und dann weiter verlinkt. (Vielleicht auch mit der oben beschriebenen Variante, wenn $site eine Session Variable ist, die das "eigentliche" Ziel speichert?)
-> ...
-> ...

lg Thomas D

  1. Moin!

    Nein. Du willst Dafür sorgen, dass das Formular ein korrektes Ziel  (action) hat.

    <form method="post" name="foo" action="https://<?php echo $_SERVER['HOSTNAME']; ?>/dir/skriptname.php">

    Sollte erst Dein auswertendes Skript die von Dir gezeigte Umleitung enthalten, dann ist das Kind nämlich schon in den Brunnen gefallen weil die Daten bereits im Klartext übertragen wurden.

    MFFG (Mit freundlich- friedfertigem Grinsen)

    fastix

    1. Verdammt, auf diese Lösung hätte ich auch kommen sollen. =)
      Vielen Dank für die Hilfe. Die Lösung gefällt mir sehr gut, würde mich aber auch noch für andere Lösungen interessieren (, um meinen Horizont zu erweitern =) ).

      ---------------------------------------------------------------------------------------------

      Nein. Du willst Dafür sorgen, dass das Formular ein korrektes Ziel  (action) hat.

      Mein Code war dazugedacht um überhaupt erst die Seite mit den Formularen aufzurufen. Also konkret: Ich klicke einen Button, der verweist auf das Script, welches https:// vorsetzt und dann wird auf die Seite mit den Formularen weiterverlinkt. _Danach_ werden Daten eingeben und übertragen. (Hatte ich leider zu schlecht erklärt.)

      lg Thomas D

      1. Hi,

        Mein Code war dazugedacht um überhaupt erst die Seite mit den Formularen aufzurufen. Also konkret: Ich klicke einen Button, der verweist auf das Script, welches https:// vorsetzt und dann wird auf die Seite mit den Formularen weiterverlinkt.

        Und warum machst du das nicht gleich mit einem stinknormalen Link auf die Formularseite, bei dem du das Protokoll HTTPS explizit mit angibst?

        Das ist sinnvoller, als per Location-Header in der Gegen herumzuleiten.
        (Das Formular ausgebende Script selber kann dann ggf. noch mal prüfen, ob es auch per HTTPS aufgerufen wurde, und wenn nicht noch mal explizit auf die HTTPS-„Version“ seiner selbst umleiten.)

        MfG ChrisB

        --
        RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
        1. Moin!

          (Das Formular ausgebende Script selber kann dann ggf. noch mal prüfen, ob es auch per HTTPS aufgerufen wurde, und wenn nicht noch mal explizit auf die HTTPS-„Version“ seiner selbst umleiten.)

          Falls das Formular selbst schon unbedingt mit dem HTTPS-Protokoll angezeigt werden können soll ist folgendes zu empfehlen:

          if ( (! isset $_SERVER['HTTPS']) or ('off' == $_SERVER['HTTPS']) {  
             # garstiger Kommentar: ('off' == $_SERVER['HTTPS']) ist für den Microsoft-Shit-Server  
             $url=https://'.$_SERVER['HTTP_HOST'].'/'.$site;  
             header("Location: $url");  
             die ("<html>  
                      <head>  
                        <title>Umleitung</title>  
                      </head>  
                      <body>  
                           <h1>umleitung<h1>  
                           <p>  
                               <a href='$url'>Bitte klicken Sie auf den Link um das  
                               sichere https-Protokoll  zu verwenden.</a>  
                           </p>  
                      </body>  
                   </html>  
             ");  
             # exit  
          }
          

          Die korrekte Adresse mit Protokoll solltest Du im Formular-Tag dennoch wie gezeigt setzen, obwohl bei korrekter Programmierung ein relativer Link funktioniert. Falls nämlich ein Benutzer die URL von Hand eitippt

          MFFG (Mit freundlich- friedfertigem Grinsen)

          fastix

          1. Tach,

            Falls das Formular selbst schon unbedingt mit dem HTTPS-Protokoll angezeigt werden können soll

            das sollte es _immer_, für den Nutzer its ansonsten nicht ersichtlich wie seine Daten übertragen werden. Aus meiner Sicht kann man heutzutage in fast allen Fällen relativ problemlos alles verschlüsselt anbieten, wenn man eh ein Zertifikat hat; Serverhardware auf Webservern ist meist eher so überdimensioniert, dass die Prozessoren eh nix zu tun haben.

            mfg
            Woodfighter

            1. Moin!

              das sollte es _immer_, für den Nutzer

              Ja. Aber "können" näher am "sollen" als dieses am "müssen".

              für den Nutzer its ansonsten nicht ersichtlich wie seine Daten übertragen werden

              Hm. Welche Reaktion bewirkt wohl ein "Ihre Daten werden verschlüsselt übertragen."

              MFFG (Mit freundlich- friedfertigem Grinsen)

              fastix

              1. Tach,

                Hm. Welche Reaktion bewirkt wohl ein "Ihre Daten werden verschlüsselt übertragen."

                ich hoffe Vorsicht.

                mfg
                Woodfighter

                1. Moin!

                  Hm. Welche Reaktion bewirkt wohl ein "Ihre Daten werden verschlüsselt übertragen."
                  ich hoffe Vorsicht.

                  Ich auch. Aber sollte man die nicht _immer_ walten lassen?

                  Das es leider nicht an dem ist zeigt sich gerade beim aktuellen Datenschutzskandal. Da konnte doch die Geldkartenbezahlereiabwicklungsfirma überhaupt nur auf die absolut kruse Idee kommen, Datensätze mit denen der Kundenkarteninhaber zusammenzuführen, weil diese Firma (über ihre Tochterfirma) auch diese Kundenkartendaten hat. Und wer hat Kundenkarten? Alles unvorsichtige Menschen. 17 Millionen(*) an der Zahl.

                  Deren Daten wurden übrigens gewiss verschlüsselt übertragen...

                  *) Die reine Zahl könnte zu dem Schluss führen, das wären alles Ossis. Ist aber ein Trugschluss.

                  MFFG (Mit freundlich- friedfertigem Grinsen)

                  fastix

      2. Leider beim verherigen Post vergessen.

        Kann ich das auch zum Beispiel so verwenden:

        <form action="https://<?php echo $_SERVER['HTTP_HOST']?>/dir(LOGIN_DATEN_AUSWERTEN.php" method="post">  
           <input type="text" name="userlogin">  
           <input type="password" name="passwordlogin">  
           <input type="submit" value="Login">  
        </form>
        

        Werden dann Passwort und Username auch verschlüsselt übertragen? Ich dachte das die Seite "zuvor" bereits mit https:// aufgerufen werden muss? Also das die Seite mit dem Login Bereich verschlüsselt aufgerufen werden muss.

        lg Thomas D

        1. Hi,

          Kann ich das auch zum Beispiel so verwenden:
          [code lang=html]<form action="https://<?php echo $_SERVER['HTTP_HOST']?>/dir(LOGIN_DATEN_AUSWERTEN.php" method="post">[/quote]

          Werden dann Passwort und Username auch verschlüsselt übertragen?

          Natürlich - *nur* dann.

          Ich dachte das die Seite "zuvor" bereits mit https:// aufgerufen werden muss? Also das die Seite mit dem Login Bereich verschlüsselt aufgerufen werden muss.

          Denk' mal nach: Welche Daten willst du verschlüsselt übertragen? Die, die der Nutzer im Formular eingibt und dann an den Server schicken lässt. Und wohin werden die geschickt? An die Adresse, die du im action-Attribut des Formulars angibst.

          Die Seite, auf der sich das Formular befindet, ebenfalls schon per HTTPS auszuliefern, ist allerdings gängige Praxis - um dem Nutzer zu suggerieren, dass er sich hier in einem verschlüsselten „Bereich“ befindet, in dem Seiten Daten gesichert übertragen werden. Andernfalls kann er nämlich vorher nicht trivial erkennen, *dass* seine Formulardaten überhaupt verschlüsselt übertragen werden. (Umgekehrt besteht damit natürlich auch keine Sicherheit, denn die Formulardaten dann wieder nur an eine HTTP-Adresse zu schicken, wäre natürlich möglich.)

          MfG ChrisB

          --
          RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?