Shop Hosting
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: Nach Umstellung auf SSL leitete Admin login immer auf account.php

    0815

    • Viel Schreiber
    • Beiträge: 905
    Hallo,

    ich habe heute ein SSL-Zertifikat in meinen Shop eingebaut.
    Funktioniert auch so weit, dass alle Seiten (also nicht nur der Bereich zu dem man sich anmelden muss) verschlüsselt und erreichbar sind.
    Leider gibt es einen "kleinen" Haken. Ich kann mich zwar als Admin anmelden, komme aber nicht mehr ins Backend.

    Der aufruf von /admin/start.php leitet immer auf die account.php. Mit dem Klick auf account_edit.php ist es ebenso. Es scheint jeder Aufruf mit /admin/ in der URL betroffen zu sein.

    Irgendwie werden die Anfragen alle von define('FILENAME_LOGIN','../login.php'); in der /admin/application_top.php abgefangen und weil man bereits angemeldet ist führt das dann zur account.php.

    Ich habe weder hier im Forum, noch per Google-Suche eine Lösung meines Problems finden können und habe nun auch schon so viel rumprobiert, aber es will einfach nicht funktioniern.

    Es ist ja wohl eine Art redirect, aber ich habe keine Ahnung von welcher Datei der verursacht wird.
    M. E. bestimt eine banale Kleinigkeit, die mir nur gerade nicht ins Auge springt.

    Shopversion: 1.05
    Sessions werden in der Datenbank gespeichert.

    Über Hilfe würde ich mich sehr freuen.

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

    0815

    • Viel Schreiber
    • Beiträge: 905
    In der error_log habe ich folgende Meldungen gefunden:
    Code: PHP  [Auswählen]
    PHP Warning:  include(): Failed opening '/var/www/vhosts/testshop.de/httpdocs/lang/german/admin/' for inclusion (include_path='.:') in /var/www/vhosts/testshop.de/httpdocs/admin/includes/application_top.php on line 595, referer: https://www.testshop.de/account.php

    Zeile 595 aus der /admin/includes/application_top.php:
    Code: PHP  [Auswählen]
    include(DIR_FS_LANGUAGES . $_SESSION['language'] . '/admin/'.  $current_page);

    Das Verzeichnis der Sprachdateien für den Adminbereich wird nicht gefunden?

    In der /admin/includes/configure.php steht:
    Code: PHP  [Auswählen]
      define('DIR_WS_LANGUAGES', DIR_WS_CATALOG. 'lang/');
      define('DIR_FS_LANGUAGES', DIR_FS_CATALOG. 'lang/');

    Wenn ich die Sprache im Frontend auf english ändere, erhalte ich die o.g. Fehlermeldung mit
    Code: PHP  [Auswählen]
    ... /var/www/vhosts/testshop.de/httpdocs/lang/english/admin/' ...

    An der Spracherkennung kann es also nicht liegen.

    Wenn ich in der/admin/includes/application_top.php folgenden Block:
    Code: PHP  [Auswählen]
    // include the language translations
    require(DIR_FS_LANGUAGES . $_SESSION['language'] . '/admin/'.$_SESSION['language'] . '.php');
    require(DIR_FS_LANGUAGES . $_SESSION['language'] . '/admin/buttons.php');
    $current_page = basename($PHP_SELF);
    if (file_exists(DIR_FS_LANGUAGES . $_SESSION['language'] . '/admin/'.$current_page)) {
      include(DIR_FS_LANGUAGES . $_SESSION['language'] . '/admin/'.  $current_page);
    }

    hiermit ersetze:
    Code: PHP  [Auswählen]
    // include the language translations
    require(DIR_FS_LANGUAGES . $_SESSION['language'] . '/admin/'.$_SESSION['language'] . '.php');
    require(DIR_FS_LANGUAGES . $_SESSION['language'] . '/admin/buttons.php');
    $current_page = 'start.php';
    if (file_exists(DIR_FS_LANGUAGES . $_SESSION['language'] . '/admin/'.$current_page)) {
      include(DIR_FS_LANGUAGES . $_SESSION['language'] . '/admin/'.  $current_page);
    }

    ... dann komme ich wieder ins Backend und kann mich dort auch alle Seiten aufrufen.
    Auffällig ist jedoch, dass keine der Sprachvariablen (Überschriften, etc.) gefüllt werden.
    Es werden also tatsächlich das Sprachverzeichnis für den Adminbereich und die enthaltenen Dateien nicht gefunden.

    Warum?

    0815

    • Viel Schreiber
    • Beiträge: 905
    So, mittlerweile habe ich folgende "Lösung" in Gebrauch:

    In der /admin/includes/application_top.php verwende ich statt der ursprünglichen Codezeile
    Code: PHP  [Auswählen]
    $current_page = basename($PHP_SELF);

    nun diese Zeile
    Code: PHP  [Auswählen]
    $current_page = basename($_SERVER['SCRIPT_FILENAME']);

    Damit komme ich wieder ins Backend, erhalte beim Aufruf von /admin/customers.php, oder /admin/orders.php allerdings am Ende der Seite folgende Fehlermeldung, obwohl die Abfrage trotzdem Funktioniert und die Seite alle Werte anzeigt:
    Code: PHP  [Auswählen]
    Error!

    Unable to determine the page link!

    Function used:

    xtc_href_link('', '', 'NONSSL')

    Was ist denn da nun wieder falsch?

    BTW, ist folgende, bereits o.g. Zeile nicht eigentlich grundsätzlich eine Sicherheitslücke?
     
    Code: PHP  [Auswählen]
    $current_page = basename($PHP_SELF);

    0815

    • Viel Schreiber
    • Beiträge: 905
    Fixed!

    In der /admin/includes/application_top.php sieht meine fertige Lösung nun so aus:

    suchen nach:
    Code: PHP  [Auswählen]
    // include the language translations
    require(DIR_FS_LANGUAGES . $_SESSION['language'] . '/admin/'.$_SESSION['language'] . '.php');
    require(DIR_FS_LANGUAGES . $_SESSION['language'] . '/admin/buttons.php');
    $current_page = basename($PHP_SELF);
    if (file_exists(DIR_FS_LANGUAGES . $_SESSION['language'] . '/admin/'.$current_page)) {
      include(DIR_FS_LANGUAGES . $_SESSION['language'] . '/admin/'.  $current_page);
    }

    ersetzen durch:
    Code: PHP  [Auswählen]
    // include the language translations
    if(empty($PHP_SELF)) {
       if(!empty($_SERVER['SCRIPT_FILENAME'])) {
          $PHP_SELF = "/".basename($_SERVER['SCRIPT_FILENAME']);
       }
    }

    require(DIR_FS_LANGUAGES . $_SESSION['language'] . '/admin/'.$_SESSION['language'] . '.php');
    require(DIR_FS_LANGUAGES . $_SESSION['language'] . '/admin/buttons.php');
    $current_page = basename($_SERVER['SCRIPT_FILENAME']);
    if (file_exists(DIR_FS_LANGUAGES . $_SESSION['language'] . '/admin/'.$current_page)) {
      include(DIR_FS_LANGUAGES . $_SESSION['language'] . '/admin/'.  $current_page);
    }

    Den Code habe ich aus verschiedenen Quellen zusammengebastelt.
    Ob man das auch anders, d.h. schönder lösen kann, weiß ich nicht. Ich hoffe mal, dass ich daurch keine neue Sicherheitslücke erstellt habe. ;-)
    5 Antworten
    4294 Aufrufe
    04. März 2015, 11:16:36 von Saywer
    20 Antworten
    6533 Aufrufe
    03. Februar 2017, 19:48:39 von web28
    30 Antworten
    12287 Aufrufe
    14. Oktober 2014, 10:40:22 von WeXsler
               
    anything