Ergebnis 1 bis 5 von 5

Thema: contao 5 - contao_csrf_token - wie hole ich dieses Token?

  1. #1
    Contao-Nutzer
    Registriert seit
    10.07.2010.
    Beiträge
    6

    Standard 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....

  2. #2
    Contao-Nutzer
    Registriert seit
    10.07.2010.
    Beiträge
    6

    Standard 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....
    Geändert von gsco (12.06.2023 um 05:17 Uhr)

  3. #3
    Contao-Fan
    Registriert seit
    24.02.2021.
    Beiträge
    482

    Standard

    Zitat Zitat von gsco Beitrag anzeigen
    im file system/config/localconfig.php
    Ich fand Contao cool... aber langsam habe ich es echt satt... Alles was früher so problemlos funktionierte, geht nicht mehr.
    Neue Major Version, neue Änderungen:
    - https://github.com/contao/contao/blob/5.x/UPGRADE.md

    RequestToken Class gibts nicht mehr:
    - https://github.com/contao/contao/blo...esttoken-class

    REQUEST_TOKEN gibt es nicht mehr:
    - https://github.com/contao/contao/blo...E.md#constants

    {{request_token}} gibt es nicht mehr:
    - https://docs.contao.org/dev/framework/request-tokens/

    Heutzutage kann man sich den Token über einen Service holen als Einzeiler, es vereinfacht halt einiges:
    PHP-Code:
    $requestToken System::getContainer()->get('contao.csrf.token_manager')->getDefaultTokenValue(); 
    MfG

  4. #4
    Contao-Nutzer
    Registriert seit
    10.07.2010.
    Beiträge
    6

    Standard

    Vielen Dank.

    Zitat Zitat von zoglo Beitrag anzeigen
    PHP-Code:
    $requestToken System::getContainer()->get('contao.csrf.token_manager')->getDefaultTokenValue(); 
    Hier habe ich noch den Namespace-Import eingefügt.
    Ganze Lösung sieht wie folgt aus



    PHP-Code:
    use Contao\System;

    $requestToken System::getContainer()->get('contao.csrf.token_manager')->getDefaultTokenValue(); 
    Das hat nun (endlich) geklappt.
    Vielen, vielen Dank für den schnellen support!

  5. #5
    Contao-Nutzer
    Registriert seit
    07.12.2015.
    Beiträge
    8

    Standard

    SUPER SUPER!!!
    Wie schön, dass es Leute gibt mit den gleichen Problemen

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •