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: Login via URL

    Christain123

    • Neu im Forum
    • Beiträge: 3
    Login via URL
    am: 09. April 2013, 10:28:53
    Hallo,

    kann ich mich über eine URL ins Backend anmelden.

    Ich habe schon mit "meinshop/login.php?process=action&email_address=email&password=password" versucht aber das klappt nicht. Kann ich die login.php irgendwie modifizieren, dass das klappt?



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

    Matt

    • Experte
    • Beiträge: 4.241
    Re: Login via URL
    Antwort #1 am: 09. April 2013, 11:03:13
    Das willst du aus Sicherheitsgründen gar nicht haben.

    Christain123

    • Neu im Forum
    • Beiträge: 3
    Re: Login via URL
    Antwort #2 am: 09. April 2013, 11:12:37
    ;) Doch schon ganz gerne. Geht das denn irgendwie?

    Christain123

    • Neu im Forum
    • Beiträge: 3
    Re: Login via URL
    Antwort #3 am: 09. April 2013, 11:19:01
    ich wollte halt gern ein Modul im Backend regelmäßig starten. Gibts da irgend ne Möglichkeit?

    DokuMan

    • modified Team
    • Beiträge: 6.669
    • Geschlecht:
    Re: Login via URL
    Antwort #4 am: 10. April 2013, 09:13:48
    Was soll das Modul machen?
    Evtl kannst du es auch direkt über die Datenbank oder einen Cronjob (über ein separates ausführbares Skript) starten

    keineLustmehr

    • Schreiberling
    • Beiträge: 360
    • Geschlecht:
    Re: Login via URL
    Antwort #5 am: 10. April 2013, 12:16:29
    ;) Doch schon ganz gerne. Geht das denn irgendwie?

    Ich geb Matt recht. DAS WILLST DU NICHT!

    Warum? Weil in Deinem Browser steht User UND PASSWORT im KLARTEXT. Browserverlauf auslesen ist da die kleinste Übung und schwupps kann jeder an Deinen Shop. Also Nein, Du willst das nicht.

    Falls Du es trotzdem immer noch willst, dann bei
    Code: PHP  [Auswählen]
    if (isset ($_GET['action']) && ($_GET['action'] == 'process')) {
            $email_address = xtc_db_prepare_input($_POST['email_address']);
            $password = xtc_db_prepare_input($_POST['password']);
     
    zusätzlichen Code einfügen, der auch $_GET['email_address'] und $_GET['password'] auswertet und nutzen kann.

    Aber wie gesagt Du öffnest damit Manipulationen Tür und Tor.

    Volker

    keineLustmehr

    • Schreiberling
    • Beiträge: 360
    • Geschlecht:
    Re: Login via URL
    Antwort #6 am: 16. April 2013, 13:14:39
    Mir hat das keine Ruhe gelassen und habe ein bißchen gebastelt. Folgendes ist rausgekommen:

    In der admin/includes/application_top.php folgedes einfügen:
    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);
    }

    // === Volker Strähle ===
    // === Login Function Start ===
    // include needed functions
    require_once (DIR_FS_INC.'xtc_validate_password.inc.php');
    require_once (DIR_FS_INC.'xtc_array_to_string.inc.php');
    require_once (DIR_FS_INC.'xtc_write_user_info.inc.php');

    function API_Login(){
            if (isset ($_GET['action']) && ($_GET['action'] == 'process')) {
                    $email_address = xtc_db_prepare_input($_POST['email_address']);
                    $password = xtc_db_prepare_input($_POST['password']);

                    // Check if email exists
                    $check_customer_query = xtc_db_query("select customers_id, customers_vat_id, customers_firstname,customers_lastname, customers_gender, customers_password, customers_email_address, customers_default_address_id from ".TABLE_CUSTOMERS." where customers_email_address = '".xtc_db_input($email_address)."' and account_type = '0'");
                    if (!xtc_db_num_rows($check_customer_query)) {
                            $_GET['login'] = 'fail';
                            $info_message = TEXT_NO_EMAIL_ADDRESS_FOUND;
                    } else {
                            $check_customer = xtc_db_fetch_array($check_customer_query);
                            // Check that password is good
                            if (!xtc_validate_password($password, $check_customer['customers_password'])) {
                                    $_GET['login'] = 'fail';
                                    $info_message = TEXT_LOGIN_ERROR;
                            } else {
                                    if (SESSION_RECREATE == 'True') {
                                            xtc_session_recreate();
                                    }

                                    $check_country_query = xtc_db_query("select entry_country_id, entry_zone_id from ".TABLE_ADDRESS_BOOK." where customers_id = '".(int) $check_customer['customers_id']."' and address_book_id = '".$check_customer['customers_default_address_id']."'");
                                    $check_country = xtc_db_fetch_array($check_country_query);

                                    $_SESSION['customer_gender'] = $check_customer['customers_gender'];
                                    $_SESSION['customer_first_name'] = $check_customer['customers_firstname'];
                                    $_SESSION['customer_last_name'] = $check_customer['customers_lastname'];
                                    $_SESSION['customer_id'] = $check_customer['customers_id'];
                                    $_SESSION['customer_vat_id'] = $check_customer['customers_vat_id'];
                                    $_SESSION['customer_default_address_id'] = $check_customer['customers_default_address_id'];
                                    $_SESSION['customer_country_id'] = $check_country['entry_country_id'];
                                    $_SESSION['customer_zone_id'] = $check_country['entry_zone_id'];

                                    $date_now = date('Ymd');

                                    xtc_db_query("update ".TABLE_CUSTOMERS_INFO." SET customers_info_date_of_last_logon = now(), customers_info_number_of_logons = customers_info_number_of_logons+1 WHERE customers_info_id = '".(int) $_SESSION['customer_id']."'");
                                    xtc_write_user_info((int) $_SESSION['customer_id']);
                            }
                    }
            }
    }
    if (!isset($_SESSION['customer_id'])) {
            API_Login();
    }

    // === Login Function End ===

    // write customers status in session
    require(DIR_FS_CATALOG.DIR_WS_INCLUDES.'write_customers_status.php');
    if (file_exists($current_page) == false || $_SESSION['customers_status']['customers_status_id'] !== '0') {
            xtc_redirect(xtc_href_link(FILENAME_LOGIN));
    }
     

    Auf diese Art kann man immer ein Login per POST übergeben. Alle Dateien, die die admin/includes/application_top.php nutzen können nun direkt mit entsprechenden Rechten aufgerufen werden.

    Hierzu ein kleines Beispiel wie man das in einem Programm auf dem lokalen Rechner einbauen kann:
    Code: PHP  [Auswählen]
            private void button1_Click(object sender, EventArgs e)
            {
     
             string  URL;
             string TargetFrame;
             Byte[] PostData;
             string Headers;
     
             URL = "http://localhost:8080/amavino106/admin/startexport.php?action=process"; //; A URL that will accept a POST
             TargetFrame = "";
             System.Text.ASCIIEncoding a = new System.Text.ASCIIEncoding();
       
             PostData = a.GetBytes("email_address=admin@straehle.com&password=secret");
           
             Headers = "Content-Type: application/x-www-form-urlencoded\r\n";
             webBrowserHidden.Navigate(URL, TargetFrame, PostData, Headers);
             }
    // webBrowserHidden ist ein Webbrowser-Control

    Das ganze kann man jetzt in eigene Programme (.NET oder auch Mono) integrieren und z. b. zeitgesteuert starten oder auch bei Änderungen in der WAWI automatisch starten lassen. Ich werde damit wohl zukünftig verschiedene Exportdateien für Suchmaschinen erstellen.

    Volker
               
    anything