Ich vermute, die NAS und 1&1 haben das gleiche Problem. Folgender Hintergrund: BC prüft bei allen Anfragen, ob sich der aufgerufene Pfad innerhalb des Backends befindet. Wenn ja, werden bestimmte Aktionen durchgeführt. Die Überprüfung erfolgt gegen den vollständigen Pfad.
Bei 1&1 ergibt sich als vollständiger Pfad aus $_SERVER['SCRIPT_FILENAME'] etwas wie ->
/kunden/homepages/XX/mehrhier/...
Der Pfad, mit dem verglichen wird, stammt aus der Konstanten CAT_ADMIN_PATH, welche wiederum aus CAT_PATH und CAT_BACKEND_PATH zusammengesetzt ist. Beide findet man in der config.php. Bei 1&1 ergibt das nunmehr ->
/homepages/XX/mehrhier/...
Es fehlt also das /kunden/ am Anfang.
Wie kommt es zu dem Unterschied? Nun, $_SERVER ist eine Servervariable, die der Webserver setzt. CAT_PATH wird aus der PHP-Funktion dirname() heraus gesetzt, verwendet also Dateisystemfunktionen. Das sind zwei unterschiedliche Quellen, die daher auch unterschiedliche Ergebnisse liefern können.
In der Folge erkennt BC nun nicht, daß sich der Pfad im Backend-Bereich befindet, und kann die notwendigen Aktionen nicht ausführen. Nun denkt man sich, na dann hole ich das eben in dem AJAX-Script nach, also dort, wo der CSRF-Fehler auftaucht. Das geht aber nicht. Hat was mit Henne-Ei zu tun.
UND WAS NUN?
Die Lösung besteht darin, den Pfad, der in $_SERVER steht, in die config.php zu schreiben.
SUCHEN
ERSETZEN DURCH
Code: Alles auswählen
define('CAT_PATH', '/kunden/homepages/xx/whatever/...');
Bitte ausprobieren und Ergebnis mitteilen.
