Seite 1 von 1

Experimentell: SSL Patch

Verfasst: Di 20. Mai 2014, 14:45
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.

Re: Experimentell: SSL Patch

Verfasst: Di 20. Mai 2014, 15:34
von creativecat
In den Pfingstferien werde ich mich mal hinsetzen und das testen. Definitiv drei Daumen hoch, dass du das Thema anpackst!

Re: Experimentell: SSL Patch

Verfasst: Di 20. Mai 2014, 17:43
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.

Re: Experimentell: SSL Patch

Verfasst: Mi 11. Jun 2014, 20:42
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"}';

Re: Experimentell: SSL Patch

Verfasst: Mo 23. Jun 2014, 12:09
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.

Re: Experimentell: SSL Patch

Verfasst: Mo 7. Jul 2014, 16:18
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-)

Re: Experimentell: SSL Patch

Verfasst: Mo 7. Jul 2014, 17:24
von creativecat
Sobald Notenschluss ist und meine Seminartage rum sind, werde ich es testen! Bin extrem interessiert daran, dass wir das einbauen ;-)

Re: Experimentell: SSL Patch

Verfasst: Di 12. Aug 2014, 21:11
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 ;-)

Re: Experimentell: SSL Patch

Verfasst: Mi 13. Aug 2014, 08:17
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 ;-)

Re: Experimentell: SSL Patch

Verfasst: Di 19. Aug 2014, 15:30
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.