HowTo:SSL-Proxy: Unterschied zwischen den Versionen

Aus WEB-Shop Software Wiki
Zur Navigation springenZur Suche springen
(zweite Änderung an includes/application_top.php)
Zeile 36: Zeile 36:
 
:::<code>$request_type = (getenv('HTTPS') == '1' || getenv('HTTPS') == 'on') ? 'SSL' : 'NONSSL';</code>
 
:::<code>$request_type = (getenv('HTTPS') == '1' || getenv('HTTPS') == 'on') ? 'SSL' : 'NONSSL';</code>
 
::<code>}</code>
 
::<code>}</code>
 +
----
 +
:Suche folgenden Code
 +
::<code>if (isset ($_REQUEST[session_name()])) {</code>
 +
:::<code>session_id($_REQUEST[session_name()]);</code>
 +
::<code>}</code>
 +
:und ersetzt diesen durch
 +
::<code>if (isset($_POST[session_name()]) and !empty($_POST[session_name()])) {</code>
 +
:::<code>session_id($_POST[session_name()]);</code>
 +
::<code>} elseif (isset($_GET[session_name()]) and !empty($_GET[session_name()])) {</code>
 +
:::<code>session_id($_GET[session_name()]);</code>
 +
::<code>}</code>
 +
  
 
Diese Änderungen fürten nun dazu das die SID (XTCid) in allen Links auftauchen.
 
Diese Änderungen fürten nun dazu das die SID (XTCid) in allen Links auftauchen.

Version vom 30. Juli 2009, 07:21 Uhr

Problem

Du möchtest deinen Webshop über https für die Kunden erreichbar machen und dein Provider bietet dir einen so genannten SSL-Proxy an. Das sieht dann in der Regel so aus. Dein Shop läuft z.B. unter www.deinShop.tld. Dein Provider nennt dir dafür die folgende SSL-Proxy url: http://www.ssl-proxy.tld/www.deinShop.tld

Zunächst könnte man meinen - na da schreibe ich doch die Config so um das alles über den proxy geroutet wird - aber das ist ein SEO-GAU, da über diesen ja auch andere Shops gehen und alle dann unter der geleichen Domain die Produkte anzeigen - daran sollest Du also nichtmal im Schlaf denken. Auch von einer Änderung in der .htaccess kann man nur abraten.

Zweiter Versuch

Status der Information: im Test

Hier nun der zweite Versuch die URLS bei den SSL-Proxy usern hinzubekomen...

Passe folgende Daten in der /includes/configure.php Datei an, hierbei werden alle SERVER als https angegeben:

define('HTTP_SERVER', 'http://www.deinShop.tld'); # Der "normale" Zugriff auf den Shop
define('HTTPS_SERVER', 'https://ssl-proxy.tld/www.deinShop.tld');  # was da genau rein muß sagt dir dein Provider
define('ENABLE_SSL', true); # hier als boolscher Wert ohne Anführungszeichen!!!

Anpassungen in der /admin/includes/configure.php:

define('HTTP_SERVER', 'http://www.deinShop.de') # Zugriff auf das Admin-Backend ohne HTTPS!!!
define('HTTP_CATALOG_SERVER', 'http://www.deinShop.de');  # normaler zugriff auf den Shop!!!
define('HTTPS_CATALOG_SERVER', 'https://ssl-proxy.tld/www.deinShop.de');  # das was der Provider genannt hat

Folgende Änderungen im Core musst Du vornehmen wenn Du eine Version <= 1.0.3a einsetzt: Die Änderungen die Du bereits beim ersten Versuch gemacht hast bleiben drin, zusätzlich nun folgendes ändern!

includes/application_top.php
Lösche den Block
// set the type of request (secure or not)
$request_type = (getenv('HTTPS') == '1' || getenv('HTTPS') == 'on') ? 'SSL' : 'NONSSL';
und füge unterhalb von
// set the top level domains
$http_domain = xtc_get_top_level_domain(HTTP_SERVER);
$https_domain = xtc_get_top_level_domain(HTTPS_SERVER);
diese Zeilen ein
// set the type of request (secure or not), include ssl-proxy check
if ($http_domain != $https_domain) {
$request_type = ($https_domain = (isset($_SERVER['HTTP_X_FORWARDED_HOST']) ? $_SERVER['HTTP_X_FORWARDED_HOST'] : $_SERVER['HTTP_HOST']) ? 'SSL' : 'NONSSL');
} else {
$request_type = (getenv('HTTPS') == '1' || getenv('HTTPS') == 'on') ? 'SSL' : 'NONSSL';
}

Suche folgenden Code
if (isset ($_REQUEST[session_name()])) {
session_id($_REQUEST[session_name()]);
}
und ersetzt diesen durch
if (isset($_POST[session_name()]) and !empty($_POST[session_name()])) {
session_id($_POST[session_name()]);
} elseif (isset($_GET[session_name()]) and !empty($_GET[session_name()])) {
session_id($_GET[session_name()]);
}


Diese Änderungen fürten nun dazu das die SID (XTCid) in allen Links auftauchen. Das liegt nun daran daß die PHP-Funktion session_start() die Konstante SID definiert. Daher wurde im Testshop noch die folgende Datei angepaßt:

inc/xtc_href_link_directurl.inc.php
Suche
if ( defined('SID') && xtc_not_null(SID) ) {
$sid = SID;
} elseif ( ($request_type == 'NONSSL' && $connection == 'SSL' && ENABLE_SSL == true)
und mache daraus
/* if ( defined('SID') && xtc_not_null(SID) ) {
$sid = SID;
} else */
if ( ($request_type == 'NONSSL' && $connection == 'SSL' && ENABLE_SSL == true)

eine identische Stelle gibt es in der Datei

inc/xtc_href_link_shopstat_url.inc.php

Derzeit wird noch untersuche warum diese Stelle zuvor kein Problem darstellte.

Erster Versuch - gescheitert da SEO-GAU


UPDATE: Wenn der gesamte Shop (bis auf die Startseite) unter der Domain des Providers läuft, ist das ein "SEO-GAU" für den Shop. Bis zu einer tragfähigen Lösung sollte die 1.0.3(a) nicht für einen Shop mit SSL-Proxy eingesetz werden.


Damit dies problemlos funktioniert müssen alle Seiten via SSL-Proxy abgerufen werden, selbst die Bilder-Links.

Recht einfach sollte das realisierbar sein durch einen entsprechenden redirekt in der /.htaccess vom Shop, hierfür sind folgende Zeilen in die Datei einzufügen:

# Diese Variante ist ungeeignet, da hierdurch die Client-Brower für jedes Objekt zwei anfragen stellen müssen.
# Der Redirect würde jede anfrage somit unnötig verlangsamen...

Dein Provider nennt Dir für deinen Shop www.deinShop.tld die SSL-Proxy Adresse https://ssl-proxy.tld/www.deinShop.tld Diese URL besteht aus zwei bestandteilen (SERVER: ssl-proxy.tld und dem PFAD: www.deinShop.tld)

Passe folgende Daten in der /includes/configure.php Datei an, hierbei werden alle SERVER als https angegeben:

define('HTTP_SERVER', 'https://ssl-proxy.tld'); # auch hier: https!!!
define('HTTPS_SERVER', 'https://ssl-proxy.tld');  # was da genau rein muß sagt dir dein Provider
define('ENABLE_SSL', true); # hier als boolscher Wert ohne Anführungszeichen!!!
define('ENABLE_SSL_CATALOG', 'true'); # hier mit Anführungszeichen - das muß so sein!</nowiki>
define('DIR_WS_CATALOG', '/www.deinShop.de/'); // absolute path required

Wenn Dein Shop im Hauptverzeichnis läuft so wars das, ansonsten mußt Du die Definition von DIR_WS_CATALOG entsprechend erweitern, z.B.:

define('DIR_WS_CATALOG', '/www.deinShop.de/ecb/'); // absolute path required

Anpassungen in der /admin/includes/configure.php:

define('HTTP_SERVER', 'https://ssl-proxy.tld') # HTTPS!!! was da genau rein muß sagt dir dein Provider
define('HTTP_CATALOG_SERVER', 'https://ssl-proxy.tld');  # HTTPS!!!
define('HTTPS_CATALOG_SERVER', 'https://ssl-proxy.tld');  # HTTPS!!!
define('ENABLE_SSL_CATALOG', 'true'); # hier mit Anführungszeichen - das muß so sein!
define('DIR_WS_ADMIN', '/www.deinShop.de/admin/'); // absolute path required
define('DIR_WS_CATALOG', '/www.deinShop.de/'); // absolute path required

DIR_WS_ADMIN und DIR_WS_CATALOG muß bei Shops in Unterverzeichnissen natürlich wieder entsprechend angepasst werden!

Änderungen im Core wenn Du eine Version <= V1.0.3a benutzt:

includes/application_top.inc
suche
$breadcrumb->add(HEADER_TITLE_TOP, HTTP_SERVER.$breadcrumbSID);
mache daraus
$breadcrumb->add(HEADER_TITLE_TOP, HTTP_SERVER.DIR_WS_CATALOG.$breadcrumbSID);

includes/modules/product_listing.php
suche
$module_smarty -> assign('products_sort_file', $_SERVER['REQUEST_URI']);
mache daraus
$module_smarty -> assign('products_sort_file', (strpos($_SERVER['REQUEST_URI'], DIR_WS_CATALOG) === false ? DIR_WS_CATALOG : NULL).$_SERVER['REQUEST_URI']);