contao 5 - contao_csrf_token - wie hole ich dieses Token?
Je länger, je mehr glaube ich einen Fehler mit Contao 5 gemacht zu haben. Hätte ich doch lieber Contao 4.9 installiert...
Ich habe ein eigenes Formular erstellt und da möchte ich POST-Daten an eine Contao Seite senden.
Nun möchte Contao ein Token, um sicherzustellen, dass keine POST anfragen von Extern erfolgen. Finde ich gut und wäre auch OK, wenn es einfach umsetzbar wäre...
Wie komme ich zu diesem Token?
Ich habe alles Mögliche versucht: Aus Verzweiflung habe ich sogar ChatGPT angefragt.... Keine Chance... (ich weiss auch nicht, ob ChatGPT Contao 5 schon kennt).
PHP-Code:
<input type="hidden" name="REQUEST_TOKEN" value="{{request_token}} ">
## Fehler: Kein Request-Token übermittelt
Oder
PHP-Code:
<input type="hidden" name="REQUEST_TOKEN" value="{{ @system.request_token }}">
## Fehler: Kein Request-Token übermittelt
Oder
PHP-Code:
<?php
## Quelle: ChatGPT
## -----------------------
use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface;
use Contao\CoreBundle\Framework\ContaoFrameworkInterface;
/** @var ContaoFrameworkInterface $framework */
$framework = $GLOBALS['container']['contao.framework'];
/** @var CsrfTokenManagerInterface $tokenManager */
$tokenManager = $framework->getAdapter(CsrfTokenManagerInterface::class);
$requestToken = $tokenManager->getToken('contao_frontend')->getValue();
?>
<input type="hidden" name="REQUEST_TOKEN" value="<?php echo $requestToken?>">
## Fehlermeldung:
## request.CRITICAL: Uncaught PHP Exception Error: "Call to a member function getAdapter() on null" at XXXXXX/templates/stepper_start.php line 9 {"exception":"[object] (Error(code: 0): Call to a member function getAdapter() on null at XXXXXX/templates/stepper_start.php:9)"} []
oder
PHP-Code:
<?php
## Quelle: ChatGPT
## -----------------------
use Contao\CoreBundle\Routing\ScopeMatcher;
use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface;
use Symfony\Component\Security\Csrf\CsrfToken;
use Symfony\Component\Security\Csrf\TokenGenerator\TokenGeneratorInterface;
use Symfony\Component\Security\Csrf\TokenStorage\TokenStorageInterface;
use Symfony\Component\Security\Csrf\TokenGenerator\UriSafeTokenGenerator;
/** @var ScopeMatcher $scopeMatcher */
$scopeMatcher = $GLOBALS['container']['contao.routing.scope_matcher'];
/** @var CsrfTokenManagerInterface $tokenManager */
$tokenManager = $GLOBALS['container']['security.csrf.token_manager'];
/** @var TokenStorageInterface $tokenStorage */
$tokenStorage = $GLOBALS['container']['security.csrf.token_storage'];
/** @var TokenGeneratorInterface $tokenGenerator */
$tokenGenerator = $GLOBALS['container']['security.csrf.token_generator'];
// Prüfen, ob das Formular gesendet wurde und das Request Token vorhanden ist
if ($_SERVER['REQUEST_METHOD'] === 'POST' && !$scopeMatcher->isBackendRequest()) {
$requestToken = $tokenStorage->getToken('contao_csrf_token')->getValue();
$submittedToken = $_POST['REQUEST_TOKEN'] ?? '';
// Validiere den Request Token
if (!$tokenGenerator->isTokenValid(new CsrfToken('contao_csrf_token', $submittedToken))) {
die('Ungültiger Request Token!');
}
} else {
$requestToken = $tokenManager->getToken('contao_csrf_token')->getValue();
}
?>
<input type="hidden" name="REQUEST_TOKEN" value="<?php echo $requestToken?>">
## Fehlermeldung:
## request.CRITICAL: Uncaught PHP Exception Error: "Call to a member function getToken() on null" at XXXXXX/templates/stepper_start.php line 31 {"exception":"[object] (Error(code: 0): Call to a member function getToken() on null at XXXXXX/templates/stepper_start.php:31)"}
Wäre froh um ein feedback.
Wäre auch froh um eine Anleitung, wie man diese Token-Anfrage deaktivieren kann.
Wo ist neu in Contao 5 die app/config/config.yml ??
Auch das finde ich nicht mehr....
Was ich nocht versucht habe:
im file system/config/localconfig.php
PHP-Code:
$GLOBALS['TL_CONFIG']['disableRefererCheck'] = true;
Geht nicht!
im file system/config/localconfig.php (aus der obigen Logik)
PHP-Code:
$GLOBALS['TL_CONFIG']['disableCsrfTokenValidation'] = true;
Geht nicht!
im Verzeichnis system/config/ das File config.yml erstellt.
Hier habe ich folgendes versucht einzufügen:
Code:
contao:
csrf_token_validation: false
Geht nicht!
Oder
Code:
contao:
security:
disable_csrf_token_validation: true
Geht nicht!
im Verzeichnis system/config/ das File parameters.yml erstellt und folgends eingefügt:
Code:
contao.csrf_token_validation: false
Geht nicht!
Direkt im File, in dem ich mein Formular geschrieben habe, folgendes eingefügt:
PHP-Code:
use Contao\Input;
// Deaktiviere CSRF-Schutz für ein spezifisches Formular oder eine spezifische Aktion
Input::disableRefererCheck();
Geht nicht!
Im Formular habe ich auch folgendes Versucht:
Code:
<input type="hidden" name="REQUEST_TOKEN" value="<?=Controller::replaceInsertTags('{{request_token}}') ?>">
<input type="hidden" name="REQUEST_TOKEN" value="<?=\Contao\Controller::replaceInsertTags('{{request_token}}') ?>">
<input type="hidden" name="REQUEST_TOKEN" value="<?=$this->replaceInsertTags('{{request_token}}') ?>">
Geht nicht!
Ich glaube, in dieser Zeit, die ich hier für Contao verschwendet habe, hätte ich mein eigenes CMS geschrieben....
Ich fand Contao cool... aber langsam habe ich es echt satt... Alles was früher so problemlos funktionierte, geht nicht mehr. Ich habe noch nie so viel die Logfiles aufgerufen, wie in deser Version. Ich bin sogar soweit gegangen einen Terminal offen zu haben um mit tail -f die logfiles gleich live sehen zu können....