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: CSRFToken nicht definiert...

    lohkaes1

    • Viel Schreiber
    • Beiträge: 514
    CSRFToken nicht definiert...
    am: 06. Mai 2016, 15:40:14
    Hallo Zusammen,

    kann hier im Backend nichts einstellen! Wollte gerade das PayPal-Modul konfigurieren und jedesmal kommt die Meldung:

    Zitat
    CSRFToken nicht definiert (Aus Sicherheits-Aspekten ist es nicht mehr erlaubt im Adminbereich in verschiedenen Tabs zu arbeiten.)

    Hab nur ein Tab offen, daher ist mir das nicht klar was das soll.
    Wer kann helfen?

    Danke.

    Linkback: https://www.modified-shop.org/forum/index.php?topic=34965.0
    Werbung / Banner buchen

    Tomcraft

    • modified Team
    • Gravatar
    • Beiträge: 46.178
    • Geschlecht:
    Re: CSRFToken nicht definiert...
    Antwort #1 am: 06. Mai 2016, 16:02:52
    Kannst du das bei uns im Demoshop 2.0.0.0 nachstellen?

    Du kannst das "Admin Token System" unter "Konfiguration" -> "Adminbereich Optionen" -> "Admin Token System" auch einfach auf "false" stellen.

    Grüße

    Torsten

    lohkaes1

    • Viel Schreiber
    • Beiträge: 514
    Re: CSRFToken nicht definiert...
    Antwort #2 am: 06. Mai 2016, 16:03:55
    Hab das jetzt einfach im Adminbereich ausgeschaltet.

    Tomcraft

    • modified Team
    • Gravatar
    • Beiträge: 46.178
    • Geschlecht:
    Re: CSRFToken nicht definiert...
    Antwort #3 am: 06. Mai 2016, 16:08:44
    Das ist vermutlich die einfachste Lösung, auch wenn es die Ursache ja nicht bekämpft.
    Da wir aber auch bisher keine weiteren Meldungen von anderen Shopbetreibern diesbezüglich erhalten haben, würde ich dem jetzt erst einmal nicht weiter nachgehen.

    Grüße

    Torsten

    warp

    • Neu im Forum
    • Beiträge: 45
    • Geschlecht:
    Re: CSRFToken nicht definiert...
    Antwort #4 am: 09. September 2016, 21:56:27
    Das Prinzip der Attacke ist Einbettung des Schadcodes

    Ein typischer und bei Angreifern sehr beliebter Weg, um die Attacke durchzuführen, ist über HTML Image-Tags oder JavaScript Image-Objekte
    src-Attribute des <img>-Tags ein und der Browsers
    Das Einzige, was für die erfolgreiche Attacke von Bedeutung ist - der Nutzer muss in der Applikation eingeloggt sein.

    Beispiel:

    Code: PHP  [Auswählen]
    <img src="http://example.de/delete_user.php?id=12" />
    <script src="http://example.de/delete_user.php?id=12"></script>

    <script>
        var myImage = new Image();
        myImage.src="http://example.de/delete_user.php?id=12"
    </script>

    Und als dritte Maßnahme gegen CSRF kann man jedes Formular mit einem zufällig erzeugten und nur einmal gültigen Token versehen und diesen dann bei Anfragen serverseitig überprüfen.

    Sorry aber das CSRF in der 2.0 sollte nochmal überarbeitet werden.
    Zusatz: Betrifft auch 2.0 Gastlogin

    Info: Tabbed-Browsing

    Fazit:
    Cross-Site Request Forgery ist eine weitere Attacke, mit der man viel anstellen kann. Besonders gefährlich ist sie, wenn der Nutzer Administrator Rechte besitzt. Denn in dem Fall können nicht nur die Daten vom Nutzer selbst, sondern die vieler anderen Nutzern manipuliert werden.

    nice Greet

    Ich würde dem ganzen mal bitte mit Hochdruck nachgehen !!!!!

    wernherr

    • Neu im Forum
    • Beiträge: 46
    Re: CSRFToken nicht definiert...
    Antwort #5 am: 10. September 2016, 00:28:27
    Hallo

    ich hab ab und zu die Meldung wenn ich mit 2 Browsern im Adminbereich bin. Seite einfach neu geladen
    und gut ist es.

    p3e

    • Experte
    • Beiträge: 2.395
    CSRFToken nicht definiert...
    Antwort #6 am: 10. September 2016, 09:37:07
    Wenn man sich als Admin daran hält, dass man einen Browser nur für den Shop nutzt und dieser Browser nicht der Standardbrowser ist (also ein anderer geöffnet wird, wenn du z.B. in einer mal auf einen Link klickst), ist man vor dieser Hackingmethode schon mal ziemlich gesichert.
    An Screenshots von anderen Shopbetreiben sieht man hier im Forum aber immer wieder, dass parallel zahlreiche andere Websiten geöffnet sind. Den wenigsten ist klar, dass das ein Sicherheitsrisiko ist.

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.729
    • Geschlecht:
    Re: CSRFToken nicht definiert...
    Antwort #7 am: 10. September 2016, 17:33:01
    @warp
    Was soll dein zusammenhanglos geschriebener Beitrag hier im Thread bedeuten ?
    Und was willst du mit dem Link deines Häuschens zum BSI bewirken ?

    Wenn du schaumschlagen möchtest machst du das am Besten woanders und nicht hier im Forum, vor allem nicht wenn du damit unbedarfte User verunsichern könntest.

    Gruß,
    noRiddle

    Bonsai

    • Viel Schreiber
    • Beiträge: 4.147
    • Geschlecht:
    Re: CSRFToken nicht definiert...
    Antwort #8 am: 12. September 2016, 14:50:36
    :good:

    hatt

    • Fördermitglied
    • Beiträge: 19
    Re: CSRFToken nicht definiert...
    Antwort #9 am: 04. April 2017, 12:22:34
    ich habe heute bei mir die "sessions.php" geändert wegen den Fehler-Logs wie hier beschrieben: Session callback expects true/false return value in File: sessions.php Line: 118

    Seitdem ich das auf "return true" geändert habe wie von User "viza" beschrieben, bekomme ich auch immer die Fehlermeldung: "CSRFToken nicht definiert..."

    Was ratet ihr mir? Soll ich nun die sessions.php einfach wieder zurück verändern oder wäre eine andere Vorgehensweise besser? Ich würde gerne die Fehler-Logs beseitigen, habe aber keine Lust auf hierdurch produzierte andere Fehlermeldung.

    Vielen Dank für eure Kommentare!

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.729
    • Geschlecht:
    Re: CSRFToken nicht definiert...
    Antwort #10 am: 04. April 2017, 13:18:43
    ...
    Seitdem ich das auf "return true" geändert habe wie von User "viza" beschrieben, bekomme ich auch immer die Fehlermeldung: "CSRFToken nicht definiert..."
    ...

    Was ist "das", was genau hast du denn auf "return true" geändert ?

    Ich denke es sollte so sein, daß in der Funktion _sess_gc() für den Garbage-Collector
    anstatt dies:

    Code: PHP  [Auswählen]
    return xtc_db_affected_rows();

    analog zu der Funktion _sess_write() das folgende stehen sollte:

    Code: PHP  [Auswählen]
    if (xtc_db_affected_rows() > 0) {
        return true;
    }

    return false;

    Die Funktion _sess_read() unberührt lassen.

    Gruß,
    noRiddle

    hatt

    • Fördermitglied
    • Beiträge: 19
    Re: CSRFToken nicht definiert...
    Antwort #11 am: 04. April 2017, 13:24:03
    ich habe es gemacht wie im anderen Beitrag von "viza" beschrieben.

    also in der sessions.php das:

    Code: PHP  [Auswählen]
    return xtc_db_affected_rows();

    ersetzt durch:

    Code: PHP  [Auswählen]
    return true;

    war das falsch? Hätte ich es ersetzen müssen durch:

    Code: PHP  [Auswählen]
    if (xtc_db_affected_rows() > 0) {
        return true;
    }

    return false;

    Vielen Dank noRiddle!

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.729
    • Geschlecht:
    Re: CSRFToken nicht definiert...
    Antwort #12 am: 04. April 2017, 13:38:50
    Du drückst dich leider zu allgemein aus.
    'wie im anderen Beitrag von "viza"' ist nicht gerade eine präzise Aussage.

    Mache es mal in der von mir genannten Funktion _sess_gc() wie ich es geschrieben habe
    (und auch web28 in dem von dir gemeinten Thread gesagt hat.)

    Kurz noch zur Erhellung:
    Die Aussage von GTB in dem genannten Thred ist nicht differenziert.
    Zitat von: GTB
    Heisst wir müssen immer TRUE zurückgeben.

    In der Funktion _sess_read wird ein String und kein Boolean (also true oder false) zurückgegeben und das ist auch richtig so.

    Wenn du nach der Änderung noch die Meldung "CSRFToken nicht definiert" bekommst, liegt das an etwas anderem als dem hier Besprochenen.
    !! Wenn das Token-System aktiviert ist lediglich in einem Tab im selben Browser ins Backend gehen !!
    Nach der Code-Änderung vorhandene geöffnete Backend-Tabs schließen und neu öffnen, dann testen indem du irgendwo im Backend eine Änderung vornimmst.

    Gruß,
    noRiddle

    hatt

    • Fördermitglied
    • Beiträge: 19
    Re: CSRFToken nicht definiert...
    Antwort #13 am: 05. April 2017, 05:10:25
    ok, ich wollte halt nicht alles aus dem anderen Beitrag hier wiederholen, daher der Link zu "viza".
    Nächstes Mal versuch ich gleich genauer zu sein.

    Danke für die Erklärungen. Ich habe es nun so geändert und werde mich melden, falls es trotzdem noch Fehlermeldungen gibt. Noch zur Erläuterung. Ich bin immer nur mit einem Tab im Backend und habe im Shop (neueste Version) auch noch nichts geändert. Lediglich 4000 Artikel wurden importiert, was übrigens prima funktioniert hat.

    Ich wollte mit dem Shop schon zu Gambio oder irgend einer anderen Shopware.
    Bin froh, mich letztendlich doch für Modified entschieden zu haben.

    Danke nochmal!

    Alexlaiho1980

    • Fördermitglied
    • Beiträge: 52
    • Geschlecht:
    Re: CSRFToken nicht definiert...
    Antwort #14 am: 15. März 2019, 09:45:27
    Ich hole mal dieses Thema wieder hoch da ich nicht wirklich weiter komme. :(

    Ich kann nix im Admin Backend ändern speichern, es kommt immer CSRF Token nicht definiert..... Es wird in einem Tab gearbeitet, mehrere Browser versucht.
    Kann also weder den Admin Token System abstellen, noch irgendwie Cache ect. leeren.

    In der includes/funtions/sessions.php sieht etwas anders aus bzw. finde sess_gc()return xtc_db_affected_rows(); nicht:

    Code: PHP  [Auswählen]
    <?php
    /* -----------------------------------------------------------------------------------------
       $Id: sessions.php 10085 2016-07-15 20:32:29Z GTB $

       modified eCommerce Shopsoftware
       http://www.modified-shop.org

       Copyright (c) 2009 - 2013 [www.modified-shop.org]
       -----------------------------------------------------------------------------------------
       based on:
       (c) 2000-2001 The Exchange Project  (earlier name of osCommerce)
       (c) 2002-2003 osCommerce(sessions.php,v 1.16 2003/04/02); www.oscommerce.com
       (c) 2003     nextcommerce (sessions.php,v 1.5 2003/08/13); www.nextcommerce.org
       (c) 2006 XT-Commerce (sessions.php 1195 2005-08-28)

       Released under the GNU General Public License
       ---------------------------------------------------------------------------------------*/


      define('SESSION_LIFE_ADMIN_DEFAULT', 7200);

      @ini_set("session.gc_maxlifetime", 1440);
      @ini_set("session.gc_probability", 100);
      @ini_set('session.cookie_httponly', true);

      if (STORE_SESSIONS == 'mysql') {  
        if (!$SESS_LIFE = xtc_get_cfg_var('session.gc_maxlifetime')) {
          $SESS_LIFE = 1440;
        }
        if (defined('SESSION_LIFE_CUSTOMERS')) {
          $SESS_LIFE = (int)SESSION_LIFE_CUSTOMERS;
        }

        function _sess_open($save_path, $session_name) {
          return true;
        }

        function _sess_close() {
          return true;
        }

        function _sess_read($key) {
          $value_query = xtc_db_query("SELECT value
                                         FROM "
    . TABLE_SESSIONS . "
                                        WHERE sesskey = '"
    . xtc_db_input($key) . "'
                                          AND expiry > '"
    . time() . "'");
          if (xtc_db_num_rows($value_query) == 1) {
            $value = xtc_db_fetch_array($value_query);

            if (isset($value['value']) && $value['value']!='') {
              return base64_decode($value['value']);
            }
          }
         
          return '';
        }

        function _sess_write($key, $val) {
          global $SESS_LIFE;

          $flag = '';
          if (isset($_SESSION['customers_status']['customers_status'])
              && $_SESSION['customers_status']['customers_status'] == '0'
              )
          {
            $SESS_LIFE = defined('SESSION_LIFE_ADMIN') ? (int)SESSION_LIFE_ADMIN : (int)SESSION_LIFE_ADMIN_DEFAULT;
            $flag = 'admin';
          }
          $expiry = time() + (int)$SESS_LIFE;
          $value = base64_encode($val);

          $result = xtc_db_query("INSERT INTO " . TABLE_SESSIONS . " (sesskey, expiry, value, flag)
                                  VALUES ('"
    . xtc_db_input($key) ."', '".(int)$expiry."', '".xtc_db_input($value)."', '".xtc_db_input($flag)."')
                                  ON DUPLICATE KEY UPDATE expiry = '"
    .(int)$expiry."', value = '".xtc_db_input($value)."', flag = '".xtc_db_input($flag)."'");

          if (xtc_db_affected_rows() > 0) {
            return true;
          }
     
          return false;
        }

        function _sess_destroy($key) {
          xtc_db_query("DELETE FROM " . TABLE_SESSIONS . " WHERE sesskey = '" . xtc_db_input($key) . "'");
         
          return true;
        }

        function _sess_gc($maxlifetime) {
          if (DELETE_GUEST_ACCOUNT == 'true') {
            $session_query = xtc_db_query("SELECT sesskey,
                                                  value
                                             FROM "
    . TABLE_SESSIONS . "
                                            WHERE expiry < '"
    . time() . "'");
            while ($session = xtc_db_fetch_array($session_query)) {
              $customers = unserialize_session_data(base64_decode($session['value']));
              if (is_array($customers) && isset($customers['customer_id']) && isset($customers['account_type']) && $customers['account_type'] != '0') {
                xtc_db_query("DELETE FROM ".TABLE_CUSTOMERS." WHERE customers_id = '".(int)$customers['customer_id']."'");
                xtc_db_query("DELETE FROM ".TABLE_ADDRESS_BOOK." WHERE customers_id = '".(int)$customers['customer_id']."'");
                xtc_db_query("DELETE FROM ".TABLE_CUSTOMERS_INFO." WHERE customers_info_id = '".(int)$customers['customer_id']."'");
                xtc_db_query("DELETE FROM ".TABLE_CUSTOMERS_IP." WHERE customers_id = '".(int)$customers['customer_id']."'");
              }
            }                                      
          }
          xtc_db_query("DELETE FROM " . TABLE_SESSIONS . " WHERE expiry < '" . time() . "'");
         
          return true;
        }

        session_set_save_handler('_sess_open', '_sess_close', '_sess_read', '_sess_write', '_sess_destroy', '_sess_gc');
        register_shutdown_function('session_write_close');
      }


      function xtc_session_start() {
        if (preg_replace('/[a-zA-Z0-9]/', '', session_id()) != '') {
          xtc_session_id(xtc_generate_session_id());
        }
        $temp = session_start();
           
        return $temp;
      }

      function xtc_session_is_registered($variable) {
        return isset($_SESSION[$variable]);
      }

      function xtc_session_id($sessid = '') {
        if (!empty($sessid)) {
          $tempSessid = $sessid;
          if (preg_replace('/[a-zA-Z0-9]/', '', $tempSessid) != '') {
           $sessid = xtc_generate_session_id();
          }
          return session_id($sessid);
        } else {
          return session_id();
        }
      }

      function xtc_session_name($name = '') {
        if (!empty($name)) {
          $tempName = $name;
          if (preg_replace('/[a-zA-Z]/', '', $tempName) == '') {
            return session_name($name);
          }
          return false;
        } else {
          return session_name();
        }
      }

      function xtc_session_destroy() {
        global $current_domain;
       
        if (isset($_COOKIE[xtc_session_name()])) {
          xtc_setcookie(xtc_session_name(), '', time()-3600, DIR_WS_CATALOG, (xtc_not_null($current_domain) ? '.'.$current_domain : ''));
        }
        return session_destroy();
      }

      function xtc_session_save_path($path = '') {
        if (!empty($path)) {
          return session_save_path($path);
        } else {
          return session_save_path();
        }
      }

      function xtc_session_recreate() {
        global $http_domain, $https_domain;
       
        if ($http_domain == $https_domain) {
          // backup old session
          $session_backup = $_SESSION;
          $old_session_id = xtc_session_id();
         
          // delete old session
          session_write_close();
         
          // set new session
          $new_session_id = xtc_generate_session_id();
          xtc_session_id($new_session_id);
          xtc_session_start();
          $_SESSION = $session_backup;

          if (STORE_SESSIONS == 'mysql') {
            session_set_save_handler('_sess_open', '_sess_close', '_sess_read', '_sess_write', '_sess_destroy', '_sess_gc');
            register_shutdown_function('session_write_close');
            xtc_db_query("DELETE FROM " . TABLE_SESSIONS . " WHERE sesskey = '" . xtc_db_input($old_session_id) . "'");
          }

          // update whos_online
          xtc_db_query("UPDATE " . TABLE_WHOS_ONLINE . "
                           SET session_id = '"
    .xtc_db_input($new_session_id)."'
                         WHERE session_id = '"
    .xtc_db_input($old_session_id)."'");      
        }
      }
     
      function xtc_generate_session_id() {
        $session_id = md5(openssl_random_pseudo_bytes(128));
        $check_query = xtc_db_query("SELECT sesskey
                                       FROM "
    . TABLE_SESSIONS . "
                                      WHERE sesskey = '"
    . xtc_db_input($session_id) . "'");
        if (xtc_db_num_rows($check_query) > 0) {
          xtc_generate_session_id();
        }
        return $session_id;
      }
     
      function unserialize_session_data( $session_data ) {
        //check for suhosin.session.encrypt
        if (suhosin_check()) return 'ENCRYPTED';
     
        //check for correct session value  
        if (strpos($session_data, 'customers_status|') === false) $session_data = '';
       
        if ($session_data != '') {
          $variables = array();
          $a = preg_split( "/(\w+)\|/", $session_data, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE );
          for( $i = 0; $i < count( $a ); $i = $i+2 ) {
            $variables[$a[$i]] = unserialize( $a[$i+1] );
          }
          return($variables);
        }
        return '';
      }

      function suhosin_check() {
        if ( extension_loaded( "suhosin" ) && ini_get( "suhosin.session.encrypt" ) ) {
          // suhosin is active and suhosin.session.encrypt is On    
          return true;      
        }
        return false;
      }

      function xtc_get_cfg_var($ini_option){
        try {
          $ini_option_value = get_cfg_var($ini_option);
        } catch (Exception $e) {
          $ini_option_value = ini_get($ini_option);
          trigger_error($e->getMessage(), E_WARNING);
        }      
        return $ini_option_value;
      }
           
    ?>

    Shopversion v2.0.1.0 rev 10403 dated: 2016-11-09

    Besteht die möglichkeit das Admin Token System via mysql zu ändern?

    Problem tritt auf, nachdem ich das Modul Amazon Pay installiert habe. Da habe ich alle Daten eingegeben und kann es im Backend auswählen, beim Zahlungsabwicklung kommt eine Fehlermeldung das die Zahlungsweise nicht verfügbar sei.

    gruß
    Alex
    4 Antworten
    3508 Aufrufe
    30. Juni 2011, 15:28:24 von Fitstore
    5 Antworten
    1126 Aufrufe
    21. Oktober 2020, 09:33:38 von bautti