Meldung Security token has expired, bei Installation 13.0

Ich habe mir das neue 13.0 installiert. Klappt alles einwandfrei, aber
wenn ich irgendwas im Setup ändern will, zb Modul aktivieren, bekomme ich die Meldung
„Security token has expired, so action has been canceled. Please try again.“
Weiß jemand was damit gemeint ist? Welches „security token“?

Läuft das auf einem Linux Server?

Ja,
Server Version Linux h01 4.19.0-13-amd64 #1 SMP Debian 4.19.160-2 x86_64
PHP Version 7.3.26-1+0~20210112
MySQL Version 5.5.5-10.3.27-MariaDB-0+deb10u1

die sache hat sich zwischen zu einem offiziellen bug entwickelt und wird hoffentlch mit der nächsten version korrigiert sein. Inzwischen gibt es ein paar work-arounds.
Siehe: https://github.com/Dolibarr/dolibarr/pull/16124

Ich fand Berichte das ein Upgrade auf Version 13.0.1 oder 13.0.2 dieses Problem behebt, aber das war in meinem Fall nicht so.

wenn man keine Eigenentwicklungen bzw. Thirdpartyentwicklungen im Einsatz hat, tritt dieser Fehler wie ebenfalls berichtet wurde nicht auf. Ich habe jedoch einige Eigen und Thirdpartyentwicklungen im Einsatz und demensprechend Mühsam war es die Orte und Gründe herauszufinden.

Mein Workarround war der folgende:
Mehrere Dateien definieren die Konstante ‚CSRFCHECK_WITH_TOKEN‘ als ‚1‘.
Somit habe ich Überall, wo ‚CSRFCHECK_WITH_TOKEN‘ definiert ist, die Einstellung auf ‚0‘ geändert.

/htdocs/admin/modules.php
/htdocs/core/ajax/constantonoff.php
/htdocs/main.inc.php
/htdocs/user/perms.php

/htdocs/admin/modules.php
if (!defined(‘CSRFCHECK_WITH_TOKEN’)) {

- define('CSRFCHECK_WITH_TOKEN', '1'); // Force use of CSRF protection with tokens even for GET

auf

+ define('CSRFCHECK_WITH_TOKEN', '0'); // Force use of CSRF protection with tokens even for GET

/htdocs/core/ajax/constantonoff.php
f (!defined(‘NOREQUIRETRAN’)) define(‘NOREQUIRETRAN’, ‘1’);

  • if (!defined(‘CSRFCHECK_WITH_TOKEN’)) define(‘CSRFCHECK_WITH_TOKEN’, ‘1’); // Token is required even in GET mode
    auf
  • if (!defined(‘CSRFCHECK_WITH_TOKEN’)) define(‘CSRFCHECK_WITH_TOKEN’, ‘0’); // Token is required even in GET mode

/htdocs/main.inc.php

//$dolibarr_nocsrfcheck=1;
// Check token
if ((!defined(‘NOCSRFCHECK’) && empty($dolibarr_nocsrfcheck) && !empty($conf->global->MAIN_SECURITY_CSRF_WITH_TOKEN))

  • || defined('CSRFCHECK_WITH_TOKEN'))     // Check validity of token, only if option MAIN_SECURITY_CSRF_WITH_TOKEN enabled or if constant CSRFCHECK_WITH_TOKEN is set into page
    
auf
//$dolibarr_nocsrfcheck=1;
// Check token
if ((!defined('NOCSRFCHECK') && empty($dolibarr_nocsrfcheck) && !empty($conf->global->MAIN_SECURITY_CSRF_WITH_TOKEN))
        || defined('CSRFCHECK_WITH_TOKEN')      // Check validity of token, only if option MAIN_SECURITY_CSRF_WITH_TOKEN enabled or if constant CSRFCHECK_WITH_TOKEN is set into pa$
        && ! empty(CSRFCHECK_WITH_TOKEN) )     // new security token check
{
* ```
  || ( defined('CSRFCHECK_WITH_TOKEN') && ! empty(CSRFCHECK_WITH_TOKEN) ) )       // Check validity of token, only if option MAIN_SECURITY_CSRF_WITH_TOKEN enabled or if constant CSRFCHECK_WITH_TOKEN is set into page

{

/htdocs/user/perms.php

  • if (!defined(‘CSRFCHECK_WITH_TOKEN’)) define(‘CSRFCHECK_WITH_TOKEN’, ‘1’); // Force use of CSRF protection with tokens even for GET
    auf
  • if (!defined(‘CSRFCHECK_WITH_TOKEN’)) define(‘CSRFCHECK_WITH_TOKEN’, ‘0’); // Force use of CSRF protection with tokens even for GET