Seite 1 von 1

SLL Verbindung fürs Backend

Verfasst: Sa 11. Feb 2006, 19:53
von Beleuchtfix
Hallo, es wurde immer wieder angefragt, ob man nicht ins Backend per SSL Verbindung gehen kann bzw. jemanden dazu zwingen kann.

Änderungen von emergence sind integriert

Ich habe jetzt die index.php im contenido-Verzeichnis umgewandelt, so dass bei Bedarf automatisch eine SSL (https:) Verbindung aufgebaut wird. Der Bedarf wird in der config.php geregelt.

Vielleicht ist es die Änderung wert, mit übernommen zu werden.
.../contenido/index.php

Code: Alles auswählen

<?php

/*****************************************
* File      :   main.php  // index.php!
* Project   :   Contenido
* Descr     :   Contenido main file
*
* Authors   :   Olaf Niemann
*               Jan Lengowski
*
* Created   :   20.01.2003
* Modified  :   23.01.2003  11.2.2006  Florian Behrendt
*                           SSL Verbindung abfragen
*
* © four for business AG, www.4fb.de
******************************************/

include_once ('./includes/startup.php');

/*' Eine SLL Verbindung aufbauen.' */
/* zuerst Test ob $ssl_required true ist  */

// if ($ssl_required == true) {
if ($cfg["ssl_required"] == true) { 
 if (getenv('HTTPS') != 'on'){ // Nur SLL Verbindung erlaubt!
  
  $url = getenv('SCRIPT_URI');
  $urlneu = ereg_replace ("http://" ,"https://", strtolower($url));
  header ("location: $urlneu");
  die;
  }
  ;} // if ssl_required



cInclude ("includes", 'functions.i18n.php');

cInclude ("classes", 'class.xml.php');
cInclude ("classes", 'class.navigation.php');
cInclude ("classes", 'class.template.php');
cInclude ("classes", 'class.backend.php');

cInclude ("includes", 'cfg_sql.inc.php');


page_open(
    array('sess' => 'Contenido_Session',
          'auth' => 'Contenido_Challenge_Crypt_Auth',
          'perm' => 'Contenido_Perm'));

i18nInit($cfg["path"]["contenido"].$cfg["path"]["locale"], $belang);

cInclude ("includes", 'cfg_language_de.inc.php');
cInclude ("includes", 'functions.general.php');
cInclude ("includes", 'functions.forms.php');

$sess->register("belang");

// Create Contenido classes
$db  = new DB_Contenido;
$tpl = new Template;



// Sprache wechseln
if (isset($changelang) && is_numeric($changelang)) 
{ 
    $lang = $changelang;
}


// change Client
if (isset($changeclient) && is_numeric($changeclient)){
     $client = $changeclient;
     unset($lang);
}

if (!is_numeric($client) || $client == "") {
    $sess->register("client");
    $sql = "SELECT idclient FROM ".$cfg["tab"]["clients"]." ORDER BY idclient ASC";
    $db->query($sql);
    $db->next_record();
    $client = $db->f("idclient");
} else {
    $sess->register("client");
}
    
if (!is_numeric($lang) || $lang == "") {
    $sess->register("lang");
    // search for the first language of this client
    $sql = "SELECT * FROM ".$cfg["tab"]["lang"]." AS A, ".$cfg["tab"]["clients_lang"]." AS B WHERE A.idlang=B.idlang AND idclient='$client' ORDER BY A.idlang ASC";
    $db->query($sql);
    $db->next_record();
    $lang = $db->f("idlang");
} else {
	$sess->register("lang");
}

$perm->load_permissions();


if (isset($area)) {
    $sess_area = $area;
} else {
    $area = (isset($sess_area)) ? $sess_area : 'login';
}

$tpl->reset();

$tpl->set('s', 'HEADER',    $sess->url('header.php?changelang='.$lang.'&changeclient='.$client));
$tpl->set('s', 'CONTENT',   $sess->url('frameset.php?area=mycontenido&frame=1&menuless=1&changelang='.$changelang.'&lang='.$lang.'&client='.$client));
$tpl->set('s', 'VERSION', $cfg["version"]);
$tpl->set('s', 'CONTENIDOPATH', $cfg["path"]["contenido_fullhtml"]."favicon.ico");
$tpl->generate($cfg['path']['templates'] . $cfg['templates']['frameset']);

page_close();

?>
Ergänzung in der .../contenido/includes/config.php

Code: Alles auswählen

/* SLL Verbindung erforderlich  */
$cfg['ssl_required'] = true; // false
Man bräuchte eigentlich nur noch beim Setup diese Variable setzen.

Gruß
Florian

Verfasst: Di 14. Feb 2006, 11:21
von emergence
hmm...

anstelle von $ssl_required würd ich eine $cfg variable verwenden
zb

Code: Alles auswählen

$cfg['ssl_required'] = true; // false
und ich hätte vermutlich keinen meta tag generiert sondern die php funktion location verwendet... (wenn ich das benötigt hätte)

Verfasst: Di 14. Feb 2006, 11:49
von Beleuchtfix
Danke, ich schaus mir einmal an. (Ich bin immer froh, wenn ich die Funktionen finde, die ich brauche, wenn ich dann noch eine bessere Funktion finde, dann habe ich schon wieder etwas gelernt).

Gruß
Florian

Verfasst: Di 14. Feb 2006, 12:15
von Darth-Vader
Öhm, könnte man das nicht auch einfach mit mod_rewrite lösen? :roll:

Hab da mal schnel was gebastelt aber nicht getestet:

Code: Alles auswählen

#Force https for Backend
RewriteCond %{HTTPS} !=on
RewriteCond %{REQUEST_URI} ^/contenido/index.php
RewriteRule (.*) https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
Den Code dann einfach in eine Datei mit Namen ".htaccess" im Verzeichnis ../contenido/ speichern.


( Quelle: http://forum.domainfactory.de/forum/arc ... 38133.html bzw. google.de ;) )


so long,

Darth.

Verfasst: Di 14. Feb 2006, 12:27
von Beleuchtfix
Wahrscheinlich auch, doch ist mod_rewrite ein rotes Tuch für die meisten hier. Geht es auch bei anderen Servern als Apache?
Wenn man die 10 (optimierten) Zeilen von Anfang an in die front_content.php integriert kann sich jeder das als Einstellung einfach erstellen.

Im optimalen Fall könnte man das beim Setup auch festlegen und gleich die Pfade zum WYSIWYG richtig setzen.

Gruß
Florian

Verfasst: Di 14. Feb 2006, 12:35
von emergence
das mit .htaccess ist auch ne feine lösung..
nur geht das nicht auf iis (soll jetzt nicht heissen das ich gerne iis verwende...)

es gibt da noch ein paar andere ding die man vielleicht beachten sollte...
getenv('HTTPS') steht nicht immer zur verfügung (abhängig von der server konstellation) und manchmal steht auch nicht on drinnen...

bei manchen provider gibts gar keinen zugriff auf $_ENV ...
was ja auch ein nettes aha erlebniss bei mir ausgelöst hat... :motz:

dann hätte man ne endlosschleife...

na wie auch immer...

Verfasst: Di 14. Feb 2006, 12:45
von Beleuchtfix
Schade, dann haben wir hier zwar verschiedene "Einzellösungen" aber eben noch nicht das Universalergebnis.
Florian

Verfasst: Di 14. Feb 2006, 12:49
von emergence
naja universal lösung die immer läuft ist so ne sache...
man findet immer was man nicht beachtet hat...

Verfasst: Di 14. Feb 2006, 13:23
von Beleuchtfix
Ich habe Deine Vorschläge oben im Code übernommen.
Was ist der Vorteil von location. Ich musste da den Hinweis auf die Umleitung nämlich streichen, weil schon ein Header gesendet wurde?
Florian

Verfasst: Di 14. Feb 2006, 13:25
von Darth-Vader
eija, jedem wie es beliebt.
Ich mach das bei mir über htaccess. Wobei ich bei mir einfach folgendes in die httpd.conf (naja in wirklichkeit in die config der ssl-virtualhosts, bei apache2 is ja alles aufgesplittet) eingefügt habe:

Code: Alles auswählen

<Directory /ABSOLUTER PFAD ZUR SITE/contenido>
    SSLRequireSSL
</Directory>
Das geht halt eben nur bei Rootservern, bzw Servern bei denen man Schreibzugriff auf die config-files von Apache hat.
Und da Apache ca. 90% Marktanteil hat und ich selbst nichts anderes benutze kümmere ich mich nicht um die andern Webserver-varianten. :twisted:
Vorteil ist halt eben, dass es um einiges kürzer ist und ich nicht im code vom Layout und/oder Contenido rumbasteln muss... ;)


Wer was am Ende benutz ist seine Sache. Es gibt nie DIE Universallösung und schon garnicht in der IT, die mitunter die breiteste Wissenschaft ist... ;)

Verfasst: Di 14. Feb 2006, 13:27
von emergence
es ist nur ne andere form des redirects... die aber immer funktioniert...
soweit ich weiss gibts browser einstellungen die meta weiterleitungen unterbinden können...