Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: SSL-Verschlüsselung unvollständig

    Nils

    • Schreiberling
    • Beiträge: 422
    • Geschlecht:
    SSL-Verschlüsselung unvollständig
    am: 30. Dezember 2013, 01:21:15
    Hi,

    ist es normal, dass bei der Verschlüsselung mit eigenem SSL-Zertifikat beim Anklicken von detaillierten Artikelbeschreibungen anstatt des Schlosses ein Dreieck mit Ausrufezeichen in der URL-Zeile auftaucht?
    Anonsten ist auf allen Seiten das Schloss zu sehen.

    MFG
    Nils

    Linkback: https://www.modified-shop.org/forum/index.php?topic=28762.0

    wolkenkrieger

    • Mitglied
    • Beiträge: 181
    Re: SSL-Verschlüsselung unvollständig
    Antwort #1 am: 30. Dezember 2013, 05:33:12
    Ja, das scheint mir leider symptomatisch für den alten Code zu sein. Ich habe an diversen Stellen im Code festgestellt, dass entsprechende Aufrufe ohne die Angabe der SSL-Verschlüsselung gemacht werden und damit die default-Einstellung (naja ... die Jungs wissen, was ich meine^^) "NOSSL" greift.

    Alfred

    • Experte
    • Beiträge: 2.115
    Re: SSL-Verschlüsselung unvollständig
    Antwort #2 am: 30. Dezember 2013, 07:09:36
    Ja, das scheint mir leider symptomatisch für den alten Code zu sein.

    Das hat nichts mit dem Code des Shops zu tun sondern ist abhängig vom Template.

    @Nils: wenn du z.B /media/content/touch_it.gif mit http lädst liegt es nicht kommt halt das Dreieck.

    web28

    • modified Team
    • Beiträge: 9.404
    Re: SSL-Verschlüsselung unvollständig
    Antwort #3 am: 30. Dezember 2013, 11:35:05
    1. Kann man einen 1.06 komplett auf https laufen lassen, sollte man aber nicht (Problem ist die immer vorhandene SID in der URL)

    2. Müssen alle Grafiken richtig eingebuden werden, ansonsten werden die Garfiken mit http eingebunden und erzeugen so die SSL Fehler

    Gruss Web28

    wolkenkrieger

    • Mitglied
    • Beiträge: 181
    Re: SSL-Verschlüsselung unvollständig
    Antwort #4 am: 30. Dezember 2013, 13:13:36
    1. Kann man einen 1.06 komplett auf https laufen lassen, sollte man aber nicht (Problem ist die immer vorhandene SID in der URL)

    Würdest du das bitte mal näher ausführen?

    Es gibt diverse Stellen im Code, wo ganz gezielt entweder per NOSSL oder Weglassen des Parameters (womit dann NOSSL als default genommen wird) das Protokoll gewechselt wird. Deswegen kann man m.M.n.  den Shop gar nicht vollständig unter SSL-Verschl. laufen lassen - nicht, wenn man nicht in den Core eingreift.

    web28

    • modified Team
    • Beiträge: 9.404
    Re: SSL-Verschlüsselung unvollständig
    Antwort #5 am: 30. Dezember 2013, 14:35:20
    Wenn man in den Configs bei HTTP_SERVER https:// einträgt läuft der gesamte Shop unter https

    Gruss Web28

    wolkenkrieger

    • Mitglied
    • Beiträge: 181
    Re: SSL-Verschlüsselung unvollständig
    Antwort #6 am: 30. Dezember 2013, 17:35:25
    Wenn man in den Configs bei HTTP_SERVER https:// einträgt läuft der gesamte Shop unter https

    Aber das ist dann auch nur eine Krücke, die die unsauber gecodeten Stellen kaschiert. Vorgesehen ist diese Config-Variable dafür eigentlich nicht.

    Setze ich nämlich diese Krücke ein, läuft der Shop erzwungener maßen unter SSL - selbst dann, wenn ich ENABLE_SSL auf false gesetzt habe.

    Nicht, dass du mich falsch verstehst ... ich will euch nicht angreifen damit. Aber ihr bastelt Drittanbieter-Addons ein, philosophiert über eine wie auch immer geartete Kommerzialisierung (ok, du nun nicht unbedingt) der Software, müsst aber Krücken nutzen, um einfach unsauber programmierten Code zu überdecken.

    Ich sags mal ganz vorsichtig und bitte darum, das nicht in den falschen Hals zu bekommen: die Prioritäten ... ganz glücklich scheinen die mir nicht festgelegt zu sein :)

    hedon02

    • Viel Schreiber
    • Beiträge: 618
    Re: SSL-Verschlüsselung unvollständig
    Antwort #7 am: 30. Dezember 2013, 18:15:14
    :-? naja wenn er die "product_info" auf "https" umstellt und dann einen absoluten "link" zu einem Bild ohne "https" einbaut, dann ist das ja kaum die Schuld der Software wenn es Fehler gibt.

    Gruss

    web28

    • modified Team
    • Beiträge: 9.404
    Re: SSL-Verschlüsselung unvollständig
    Antwort #8 am: 30. Dezember 2013, 20:11:36
    @wolkenkrieger

    vielen Dank für dein Statement, leider hast Du anscheinend zu wenig Ahnung vom Shopsystem, ansonsten würdest Du in diesem Zusammenhang nicht von unsauber gecodeten Stellen sprechen.

    ENABLE_SSL stellt nur die sicherheitsrelevanten Seiten auf SSL und das völlig korrekt. Wenn Fehler auftreten liegt das am verwendeten Template, das der Shopsoftware beigelegte xtc5 Template ist unter SSL fehlerfrei.

    Man kann den Shop aber KOMLPETT auf SSL schalten, in dem man bei HTTP_SERVER https:// einträgt.
    Bei 1.06 und früher müssten aber noch einige Cookie Einstellungen geändert werden, damit das SEO-optimal funktioniert.
    Den Shop komplett auf SSL laufen zu lassen, kann Absicht sein (Google).
    Der Schalter ENABLE_SSL ist dann logischerweise unnütz.

    Gruss Web28

    wolkenkrieger

    • Mitglied
    • Beiträge: 181
    Re: SSL-Verschlüsselung unvollständig
    Antwort #9 am: 30. Dezember 2013, 22:10:23
    Ich will mich ja nicht mit dir streiten (wirklich nicht) aber wozu ist denn dann folgender Codeblock da?

    Code: PHP  [Auswählen]
    if ($connection == 'NONSSL' || $connection == '') {
          $link = HTTP_SERVER . DIR_WS_CATALOG;
        } elseif ($connection == 'SSL') {
          if (ENABLE_SSL == true) {
            $link = HTTPS_SERVER . DIR_WS_CATALOG;
          } else {
            $link = HTTP_SERVER . DIR_WS_CATALOG;
          }
        } else {
          die('</td></tr></table></td></tr></table><br /><br /><font color="#ff0000"><strong>Error!</strong></font><br /><br /><strong>Unable to determine connection method on a link!<br /><br />Known methods: NONSSL SSL</strong><br /><br />');
        }

    Wie du sicherlich besser als ich weist, werden diese Links NICHT im Template gebaut, sondern im Code selber. Benutze ich jetzt die beiden Konstanten so, wie sie ursprünglich gedacht sind (nämlich HTTP_SERVER für eine unverschlüsselte und HTTPS_SERVER für die verschlüsselte Verbindung), werden vollkommen unabhängig vom verwendeten Template Links generiert, die innerhalb einer SSL-Umgebung nichtverschlüsselte Verbindungen aufrufen. Das mag zwar funktonieren, wiederspricht aber dem grundlegenden Funktionssystem der SSL-Verbindung ansich.

    Ich geb dir mal ein Beispiel:

    mein Server ist so konfiguriert, dass der Shop auf einer Subdomain läuft, die gänzlich SSL-gesichert aufgerufen wird. Der Apache macht ein listen also NUR auf dem Port 443 - für die gesamte Subdomain. Selbst mit dem Standardtemplate werden Links generiert, die dann das SSL verlassen und eine entsprechende http-Adresse aufrufen (im Grunde wird alles, was nicht mit dem Konto und dem Checkout zu tun hat unverschlüsselt übertragen).

    Was passiert dann in dem Fall? Richtig: die Links können nicht aufgelöst werden, da der Apache gar nicht auf den Request reagiert.

    Das mag (programmier-) technisch durchaus richtig sein, protokolllogisch allerdings ist das absoluter Käse!

    Ich habe hier lokal eine Instanz zu laufen, die testweise mal so konfiguriert ist, wie es in der conf vorgesehen ist: also getrennt zwischen HTTP_SERVER und HTTPS_SERVER und SSL_enabled=true - das ist ein Mischmasch zwischen verschlüsselten und unverschlüsselten Übertragungen. Vollständig abgesichert läuft der Shop nur, wenn HTTP_SERVER auch auf die verschlüsselte Variante "verbogen" wird - damit wird aber der von mir oben gepostete Codeblock (der durchaus Sinn macht, wenn man die Konstanten in ihrer ursprünglichen Form nutzt) komplett ausgehebelt.

    Was bedeutet das nun? Das ständige Hin und Her der Protokolle öffnet Tore für Angriffe von aussen - so wird zum Beispiel eine Man-In-The-Middle-Attacke deutlich einfacher und ein XSS-Angriff eigentlich erst möglich.

    Was müsste meiner Meinung nach gemacht werden?

    Der von mir oben gepostete Block müsste geändert werden:

    Code: PHP  [Auswählen]
    if ($connection == 'NONSSL' || $connection == '') {
          $link = (ENABLE_SSL == true)? HTTPS_SERVER . DIR_WS_CATALOG: HTTP_SERVER . DIR_WS_CATALOG;
        } elseif ($connection == 'SSL') {
          $link = (ENABLE_SSL == true)? HTTPS_SERVER . DIR_WS_CATALOG: HTTP_SERVER . DIR_WS_CATALOG;
        } else {
          die('</td></tr></table></td></tr></table><br /><br /><font color="#ff0000"><strong>Error!</strong></font><br /><br /><strong>Unable to determine connection method on a link!<br /><br />Known methods: NONSSL SSL</strong><br /><br />');
        }

    Dann nämlich könnte man die Conf-Variablen in ihrem ursprünglichen Kontext nutzen und würde mit dem ENABLE_SSL den Shop erzwungener maßen komplett verschlüsselt kommunizieren lassen.

    Einstellungen beim Cookie usw. habe ich jetzt nicht im Blick. Da würdest du mir sehr helfen, wenn du mir entsprechende Hinweise geben würdest. Der Shop MUSS bei mir komplett unter SSL laufen.

    Ich hoffe, du fasst meinen Beitrag als das auf, als das er gemeint ist: einen konstruktiven Beitrag zur Verbesserung der Software und NICHT als flame oder sonstiges. Ich habs woanders schon mal geschrieben: ich habe größten Respekt vor eurer Arbeit und meine das auch so, wie ich es schreibe :)

    wolkenkrieger

    • Mitglied
    • Beiträge: 181
    Re: SSL-Verschlüsselung unvollständig
    Antwort #10 am: 30. Dezember 2013, 23:30:21
    Bezüglich der Cookieproblematik:

    du meinst (unter anderem) das

    Code: PHP  [Auswählen]
    // set the top level domains
    $http_domain = xtc_get_top_level_domain(HTTP_SERVER);
    //$https_domain = xtc_get_top_level_domain(HTTPS_SERVER);
    //$current_domain = (($request_type == 'NONSSL') ? $http_domain : $https_domain);
    $current_domain = $http_domain; //currently no https_domain support

    // set the session cookie parameters
    if (function_exists('session_set_cookie_params')) {
      session_set_cookie_params(0, '/', (xtc_not_null($current_domain) ? '.' . $current_domain : ''));
    } elseif (function_exists('ini_set')) {
      ini_set('session.cookie_lifetime', '0');
      ini_set('session.cookie_path', '/');
      ini_set('session.cookie_domain', (xtc_not_null($current_domain) ? '.' . $current_domain : ''));
    }

    in der application_top.php ??

    Wenn du willst, stricke ich es um und zwar so, dass die Konstanten in der Conf in ihrem ursprünglichen Kontext genutzt werden können und auch bei den Cookies und den anderen Prüfungen (SSL_SESSION_ID zum Bleistift) Beachtung finden und stell das mal zur Verfügung.

    Und um das mit der "Krücke" mal zu relativieren:

    Euer "Hack" (also HTTP_SERVER auf https stellen) zwingt den Shop, wie du richtiger weise anmerkst, komplett in den SSL-Modus. Da das dann aber auch passiert, wenn ich ENABLE_SSL auf false belasse, greifen bestimmte Sicherheitsechanismen nicht mehr (SSL_SESSION_ID - Check zum Beispiel) - und gaukeln eine Sicherheit vor, die gar nicht existiert (ich aktiviere diese Funktionen ja nicht umsonst).

    Du musst doch wirklich zugeben, dass das nicht sauber programmiert ist ...

    h-h-h

    • modified Team
    • Beiträge: 4.562
    Re: SSL-Verschlüsselung unvollständig
    Antwort #11 am: 31. Dezember 2013, 01:27:22
    Hallo zusammen,
    ich sehe auch ein Problem in der aktuellen SSL-Implementierung.
    Wenn ein Kunde sich einloggt, sollte nicht nur der Login, die Registrierung und der Checkout verschlüsselt übertragen werden werden, sondern nach dem Login muss eine neue Session-ID generiert werden, welche bis zum Logout nur noch verschlüsselt übertragen wird. Nur damit kann ein MITM-Angriff erschwert oder sogar verhindert werden.

    Dies ist leider zur Zeit nur durch Core-Änderungen, wie von (dir) wolkenkrieger schon erwähnt möglich.

    Viele Grüße,
    h-h-h

    wolkenkrieger

    • Mitglied
    • Beiträge: 181
    Re: SSL-Verschlüsselung unvollständig
    Antwort #12 am: 31. Dezember 2013, 12:32:57
    Hi h-h-h :)

    Das ist eigentlich nicht nötig. Wenn der Shop insgesamt unter SSL läuft. Denn dann wird die initiale SID ja schon innerhalb des verschlüsselten Kontext vergeben.

    Die Krücke (bleiben wir mal bei dem Arbeitstitel) ansich funktioniert ja (mein Apache, der nur auf 443 horcht, fühlt sich für jeden Request zuständig, soweit ich das jetzt überblicken kann und ich bei den Anpassungen alle Funktionen mal aufgerufen habe).

    Das heisst, dass die notwendigen Eingriffe in den Core durchaus überschaubar wären. Ob jetzt auch das Cookie nur innerhalb des SSL-Kontext funktionieren soll oder darf, müsste man dann ausdiskutieren. Sauber umgesetzt würde es das, wenn der Nutzer die Verschlüsselung via Konstante aktiviert, ganz klar.

    Allerdings weis ich mangels Erfahrung nun nicht, wie sich das dann mit mobile devices verhält .... können die dann auch SSL-Cookies oder würde es dort eines fallbacks bedurfen?

    Mir ist aber ansich nicht klar, warum nun ausgerechnet die Cookieproblematik nicht zuende entwickelt wurde. Die Ansätze sind ja da. Wenn es an anderer Stelle dann hakt ... dazu müsste mal einer vom Team was sagen.

    Ich bin gern bereit, da unterstützend tätig zu werden, habe aber schlicht die Zeit nicht, mich durch den gesamten Code zu wühlen und betroffene Stellen zu suchen.

    Die Fragen, die man ausdiskutieren sollte, lauten:

    1. Macht es überhaupt Sinn, nur Teilkommunikation zu verschlüsseln?
    2. Wenn ja, welchen Vorteil sollte dieses Vorgehen haben?
    3. Welche Nachteile hätte eine komplette Verschlüsselung?

    Mal meine Meinung dazu:

    Eine Teilverschlüsselung stammt aus den Anfängen der Verschlüsselung überhaupt. SSL-Connections waren einfach langsamer (und sind es auch heute noch) - handshaking usw. erzeugt Overhead - und man wollte das reduzieren.

    Das muss man aber heute nicht mehr :) Den Unterschied kann man allenfalls messen - subjektiv wird den keiner feststellen können. Und der Zugewinn an Sicherheit sollte die eine oder andere Millisekunde deutlich aufwiegen.

    Programmiertechnisch würde ein komplettes Verschlüsseln sogar einige Vereinfachungen bedeuten. Nämlich spätestens da, wo bisher entschieden werden musste, ob der Parameter "SSL" übergeben werden muss oder nicht, da dieser bei meiner oben vorgeschlagenen Änderung schlichtweg ignoriert wird, da ENABLE_SSL dann als Masterkonstante fungiert. Über diese Konstante kann dann entschieden werden, ob eine traditionelle Kommunikation (also Protokollpingpong^^) genutzt werden soll oder eine moderne (alles SSL und gut isses).

    Ich sags mal so: nutzt man die Konstante so, wie von mir vorgeschlagen, kann man ruhig mal einen falschen Parameter übergeben (oder ihn gar weglassen, wie es an einigen Stellen im Core ja auch geschieht) und läuft trotzdem nicht Gefahr, sich damit ein Loch aufzureissen.

    Einen eventuellen Error-handler (HTTPS_SERVER ist nicht entsprechend konfiguriert) kann man vorsehen ... den bedarf es aber meiner Meinung nach in der ersten Ausbaustufe nicht. Man kann einem Admin soviel zutrauen, dass er die Konfiguration nach Anleitung wohl richtig machen dürfte an der Stelle :)

    Für die Cookieproblematik müsste man eventuell eine neue Configvar einfügen, die den Switch zwischen unsecured und secured Cookie realisiert. Sauber wäre innerhalb einer ansonsten durchgezogenen SSL-Verschlüsselung auch das Cookie entsprechend zu behandeln. Hier sollte man aber - unabhängig vom restlichen Shop ... deswegen die neue var - einen fallback auf ungesicherte Cookies vorsehen.

    Nils

    • Schreiberling
    • Beiträge: 422
    • Geschlecht:
    Re: SSL-Verschlüsselung unvollständig
    Antwort #13 am: 31. Dezember 2013, 18:49:51
    Vielen Dank Euch allen für die rege Beteiligung!
    Mir hat es zumindest sehr weitergeholfen.
    Wie Ihr sehen könnt, läuft nun jede Seite mit Schloss in der URL-Zeile.

    Ich wünsche Euch allen einen Guten Rutsch ins Neue Jahr 2014 !

    LG
    Nils
    1 Antworten
    2737 Aufrufe
    29. Juli 2010, 15:16:39 von speedy
    5 Antworten
    1660 Aufrufe
    28. August 2021, 23:02:28 von noRiddle (revilonetz)
    1 Antworten
    2819 Aufrufe
    30. Januar 2011, 15:41:02 von DokuMan
    4 Antworten
    3844 Aufrufe
    10. März 2011, 18:09:01 von riffi_at