2016-04-29 15 views
0

Jedesmal, wenn ein Benutzer unserer Seite mit http zugreifen will, werden sie über diesen Code in der Application.cfc auf https umgeleitet:Coldfusion-Session-Tracking http vs https

If (CGI.HTTPS != "on") { 
     location(url="https://#Application.PortalApp.GetDomain()##CGI.SCRIPT_NAME#?#CGI.QUERY_STRING#", addtoken="false"); 
    } 

Das Merkwürdige ist, wenn sie nie haben Zugriff auf die Website über http, aber zufällig auf einen internen Link, der auf http statt https verweist, sie sind ausgeloggt. Sobald sie sich jedoch erneut anmelden, können sie auf einen http-Link zugreifen, zu https weitergeleitet werden und im System angemeldet bleiben.

Ich habe einige Zeile-für-Zeile-Debugging und die https-Sitzung wird überschrieben, wenn ein Benutzer http zugreifen. Aber sobald ein Benutzer auf http zugreift, teilt das https die sessionid.

Ist das korrektes Verhalten?

In den ColdFusion Administrator-Sitzungseinstellungen ist HTTPOnly auf "true" gesetzt und "secure cookie" auf "false" gesetzt.

Antwort

2

Denken Sie an sie als zwei völlig getrennte Domänen. Die Sitzung unter HTTPS ist eine komplett andere Sitzung als die unter HTTP. So funktioniert das.

Anstatt es auf Anwendungscodeebene zu steuern, sollten Sie Ihren Webserver so konfigurieren, dass nur Verbindungen über HTTPS zulässig sind, und HTTP Anfragen automatisch an HTTPS umleiten.

Weitere Informationen finden Sie in diesem Google Developer page, aber ich werde die Highlights einfügen.

HTTPS schützt die Integrität Ihrer Webseite

HTTPS Eindringlinge zu verhindern, dass Manipulationen an der Kommunikation zwischen Ihren Websites und Ihrer Benutzer-Browser hilft. Zu den Eindringlingen gehören absichtlich böswillige Angreifer und legitime, aber aufdringliche Unternehmen wie ISPs oder Hotels, die Anzeigen in Seiten einfügen.

HTTPS schützt die Privatsphäre und die Sicherheit Ihrer Benutzer

HTTPS verhindert Eindringlinge von der Möglichkeit, auf die Kommunikation zwischen Ihren Websites und Ihre Benutzer hören in passiv.

Sie wollen werden, um sicherzustellen, dass interne Links auf Ihrer Website nie HTTPS explizit mit, so in aussehen <base href="https://{yourDomain}" > in Ihren Layout-Dateien einstellen alle relativen URLs zu zwingen HTTPS zu verwenden.

+0

Markieren Sie dies als die Antwort, jedoch ist es wichtig zu beachten, dass HTTP-Session-IDs auf https übertragen, nur nicht umgekehrt. – Brad

0

Ein paar Vorschläge:

  • Einfach eine erste: Das ist die richtige Richtung nicht sein kann, aber was passiert, wenn statt CGI.HTTPS zu verwenden, Sie CGI.SERVER_PORT_SECURE verwenden?

  • Wenn CF die Sitzung überschreibt, wenn Sie von https zu http wechseln, dann behandeln Sie dies nicht am Frontend mit dem Webserver, sondern über CF? IIS und Apache verfügen alle über einfache Umschreibungen oder Weiterleitungen, die Ihnen möglicherweise etwas Zeit sparen, wenn Sie versuchen, mit CF umzugehen, insbesondere, wenn Ihre gesamte Anwendung trotzdem sicher ist.

0

Es scheint, dass die Überprüfung für Benutzer, die angemeldet sind, vor dem http zu https überprüfen und umleiten. Wenn möglich, sollten Sie zunächst nach https suchen (Umleitung, wenn http ist) und dann nach eingeloggtem suchen.

+0

Nein, die Sitzungsüberprüfung erfolgt nach der HTTPS-Überprüfung. – Brad

+0

Also klickt der Benutzer http, wird zu https umgeleitet und dann aufgefordert, sich anzumelden? Was bewirkt, dass der Benutzer die https-Sitzung bei http-Klick abbricht? –

+0

Wenn ein Benutzer über https auf unsere Website zugreift, erhält er eine eindeutige Sitzungs-ID von ColdFusion. Wenn sie dann über http (zB einen veralteten Link im Framework oder ein altes Lesezeichen) darauf zugreifen, wird diese https Sitzungs-ID für eine kurze Sekunde mit der URL über http überschrieben, bevor sie von unserer Application.cfc von http auf https umgeleitet wurden (und als Ergebnis werden sie ausgeloggt). Wenn sie vor dem Login über http auf http zugreifen, werden sie nicht abgemeldet, wenn sie nach der Anmeldung am System auf einen http-Link klicken. Es bedeutet, dass HTTP-Sitzungen auf HTTPS übertragen werden, nicht umgekehrt. – Brad

1

Ich hatte das gleiche Problem und dies wurde behoben.

Öffnen Sie auf Server2008 im IIS-Manager die ASP-Eigenschaften, erweitern Sie "Sitzungseigenschaften", und ändern Sie "Neue ID bei sicherer Verbindung" auf "false".

+0

Habe das nicht versucht, aber scheint eine logische Lösung zu sein. – Brad