Experimentell: SSL Patch

Antworten
Benutzeravatar
shadowcat
Administrator
Beiträge: 5283
Registriert: Di 5. Feb 2013, 10:36
Kontaktdaten:

Experimentell: SSL Patch

Beitrag von shadowcat »

Hat vielleicht mal jemand Lust, angehängten Patch zu testen?

Inhalt:

\backend\login\index.php
\backend\login\ajax_check_ssl.php
\templates\freshcat\js\login.js

Erwünschte Funktionsweise:

Wird die Login-Seite über HTTP aufgerufen, prüft das login.js, ob SSL verfügbar ist. Hierzu wird per AJAX ein (neues) Script aufgerufen, was auf der Serverseite prüft, ob SSL vorhanden ist. Meldet dieses Script nun "true" zurück, wird die Login-Seite per HTTPS neu geladen. Auf diese Weise ist der Login geschützt.

Einschränkungen:
* Der Check erfolgt über $_SERVER, was potentiell gehackt werden kann. Ich habe aber bisher nichts gefunden, was nicht nur besser ist, sondern auch zuverlässig funktioniert.
* Es kann sein, daß der Webserver zwar SSL (=HTTPS) kann, dort dann aber nicht für PHP konfiguriert ist. (War bei mir der Fall.) Dann bekommt man den Quellcode des Scripts statt der Anmeldeseite. :?
* Da das komplette Backend nach dem Login bei HTTPS bleibt, kann es zu Seiteneffekten kommen. Ich habe noch nicht alles durchtesten können. Es kann auch sein, daß es sich durch irgendwelche Links wieder auf HTTP umstellt, wobei das nicht ganz so dramatisch ist, weil dann das Kennwort nicht wieder übertragen wird.

WICHTIG:
Der Patch erfordert auch eine Änderung in der config.php.
define('CAT_URL', 'http://myserver/inst');
wird zu
define('CAT_URL', '//myserver/inst');
(Also das 'http:' entfernen.)

Ich lasse das mal eine Weile bei mir so laufen, keine Ahnung, wohin das führt. Für den Fall "Server kann SSL, dann aber kein PHP" müßte es noch eine Ausweichmöglichkeit geben, aber für den Patch ist das erst mal zweitrangig.

Achso, bitte auch auf Servern testen, die KEIN SSL können.

Dank im Voraus.
Dateianhänge
ssl_patch.zip
SSL Patch
(4.28 KiB) 318-mal heruntergeladen
My software never has bugs, it just develops random features.
If it’s not broken, keep fixing it until it is
Benutzeravatar
creativecat
Beiträge: 1430
Registriert: Mi 6. Feb 2013, 12:41
Kontaktdaten:

Re: Experimentell: SSL Patch

Beitrag von creativecat »

In den Pfingstferien werde ich mich mal hinsetzen und das testen. Definitiv drei Daumen hoch, dass du das Thema anpackst!
Benutzeravatar
shadowcat
Administrator
Beiträge: 5283
Registriert: Di 5. Feb 2013, 10:36
Kontaktdaten:

Re: Experimentell: SSL Patch

Beitrag von shadowcat »

Ich würde das nicht in v1.0.3 reinnehmen, aber als optionalen Patch kann man es ja trotzdem anbieten.

Bisher klappt das bei mir problemlos, einziger Seiteneffekt ist, daß die Seitenvorschau dann auch in HTTPS erfolgt. Aber auch das funktioniert einwandfrei. Wichtig ist nur die Änderung in der config.php.
My software never has bugs, it just develops random features.
If it’s not broken, keep fixing it until it is
digitalbricks
Beiträge: 3
Registriert: So 11. Aug 2013, 13:25

Re: Experimentell: SSL Patch

Beitrag von digitalbricks »

Hallo @shadowcat,

könntest Du nicht prüfen, ob PHP auf einer HTTPS-URL ausgeführt wird, indem Du dort ein Skript aufrufst und dessen Rückgabewert (z.B. JSON) checkst?
Sowas in der Art:

Code: Alles auswählen

$json_url = 'https://example.com/phptest.php';
$ch = curl_init( $json_url )
$result =  curl_exec($ch);
$data = json_decode($result);
$test = $data->{'hasPHP'};

if($test == 'true'){
   /*redirecting to HTTPS*/
} else {
  /*stay at HTTP*/
}
Und in der phptest.php

Code: Alles auswählen

header('Content-Type: application/json');
echo '{"hasPHP": "true"}';
Benutzeravatar
shadowcat
Administrator
Beiträge: 5283
Registriert: Di 5. Feb 2013, 10:36
Kontaktdaten:

Re: Experimentell: SSL Patch

Beitrag von shadowcat »

So einfach ist das leider nicht, wie ich in stundenlanger Recherche feststellen mußte. Es geht ja nicht darum, ob man bereits auf https ist - das ist sicherlich leicht zu ermitteln, das geht auch direkt über das $_SERVER-Array -, sondern ob grundsätzlich https möglich wäre. Curl zu nutzen ist auch keine zuverlässige Option, da Curl nicht überall verfügbar ist. Man kann auf das Vorhandensein von Apache-Modulen oder PHP-Erweiterungen (OpenSSL) prüfen, aber auch das ist nicht zuverlässig - andere Webserver-Software, andere SSL-Implementierung, schon hast Du verloren. (Z.B. auf IIS.)

Vom Prinzip her tut der Patch aber genau das, was Du vorschlägst: Er ruft per AJAX ein Script auf und schaut, was zurück geliefert wird. :)

Denkbar wäre auch ein Hinweis wie "Die Verbindung ist unverschlüsselt, wollen Sie versuchen, auf eine verschlüsselte Verbindung zu wechseln?" mit Link auf die https-URL, aber schön ist das auch nicht. 1. kann das trotzdem übersehen bzw. ignoriert werden, und 2. gibt's dann blöde Fehlerseiten, wenn https nicht verfügbar ist.
My software never has bugs, it just develops random features.
If it’s not broken, keep fixing it until it is
Benutzeravatar
shadowcat
Administrator
Beiträge: 5283
Registriert: Di 5. Feb 2013, 10:36
Kontaktdaten:

Re: Experimentell: SSL Patch

Beitrag von shadowcat »

Ich wüßte gern, ob das jemand produktiv im Einsatz hat. Bei mir lokal funktioniert es problemlos, aber bevor ich es in v1.1 fest einbaue, hätte ich gern ein Feedback. 8-)
My software never has bugs, it just develops random features.
If it’s not broken, keep fixing it until it is
Benutzeravatar
creativecat
Beiträge: 1430
Registriert: Mi 6. Feb 2013, 12:41
Kontaktdaten:

Re: Experimentell: SSL Patch

Beitrag von creativecat »

Sobald Notenschluss ist und meine Seminartage rum sind, werde ich es testen! Bin extrem interessiert daran, dass wir das einbauen ;-)
Benutzeravatar
creativecat
Beiträge: 1430
Registriert: Mi 6. Feb 2013, 12:41
Kontaktdaten:

Re: Experimentell: SSL Patch

Beitrag von creativecat »

So, jetzt habe ich das Ding endlich mal getestet.

Bei mir war jetzt das Problem, dass das Ganze in einer Subdomain läuft und ich das Inklusive-Paket bei all-inkl für SSL aktiviert habe, so dass ich dann auf https://ssl-account.com/subdomain.domain.de/ lande.

Wenn ich die config.php wie gewünscht anpasse funktioniert nichts mehr.
Ändere ich das http auf https (und meiner Ellenlangen ssl-account-Domain), dann funktioniert alles einwandfrei, wobei ich auf der Startseite dann separat die https://ssl-account.com/subdomain.domai ... ]index.php[/b] aufrufen muss, da der Aufruf von https://ssl-account.com/subdomain.domain.de/ irgendwie zu viele Umleitungen hervorruft... da suche ich gerade noch, wo diese Umleitungen denn nun genau herkommen ;-)

Ansonsten klappt alles inkl. Backend einwandfrei, wobei ich hier natürlich auch wieder auf die ssl-account-Domain umgeleitet werde.

Wenn ich SSL deaktiviere, die config.php wieder auf standard zurücksetze klappt auch wieder alles einwandfrei.
Entferne ich aber das http in der CAT_URL, werden keine Stylesheet oder JS geladen, weil dann das http oder https in den URLs fehlt:

Code: Alles auswählen

 <script type="text/javascript" src="/xyz.de/modules/.../script.js</script>
PS: Der SSL-Server ist schon bestellt und wird in den kommenden Tagen wohl auf einer meiner Domains aktiviert. Dann kann ich auch hier noch mal Feedback geben ;-)
Benutzeravatar
creativecat
Beiträge: 1430
Registriert: Mi 6. Feb 2013, 12:41
Kontaktdaten:

Re: Experimentell: SSL Patch

Beitrag von creativecat »

Da ich parallel an der Prüfung der Rechte im Backend teste ist mir aufgefallen, dass der Patch der login/index.php zu einer unendlichen Schleife führen kann, wenn ich auf die Login-Seite umleite.
Also speziell, wenn ich eben bereits in der Initialisierung der Cat_Backend die Rechte checke und gegebenenfalls nach login/index.php umgeleitet wird, entsteht eine never ending story ;-)
Benutzeravatar
shadowcat
Administrator
Beiträge: 5283
Registriert: Di 5. Feb 2013, 10:36
Kontaktdaten:

Re: Experimentell: SSL Patch

Beitrag von shadowcat »

In BlackCat v1.1 wird es folgende Funktionen geben, um mit "Schema-relativen URLs" zurecht zu kommen:

CAT_Helper_Validate::uri2path($url)
Ersetzt CAT_URL in $url durch CAT_PATH. Fehlt das Schema in der URL, wird dieses berücksichtigt.

CAT_Helper_Validate::getURI($url)
Ergänzt das Schema in $url, falls es fehlt. Es wird korrekt https zurückgeliefert, wenn die aktuelle Verbindung verschlüsselt ist, sonst http.
My software never has bugs, it just develops random features.
If it’s not broken, keep fixing it until it is
Antworten