Ergebnis 1 bis 4 von 4

Thema: REQUEST_TOKEN

  1. #1
    Contao-Nutzer Avatar von marq
    Registriert seit
    20.03.2010.
    Ort
    Göttingen
    Beiträge
    195
    User beschenken
    Wunschliste

    Standard REQUEST_TOKEN

    Servus,

    ich habe folgendes Problem und vielleicht kann mir jemand helfen. Aktuell versuche ich aus einen externen Formular (App) via POST an meine REST-Schnittstelle anzudocken.

    Dafür habe ich mir ein einfaches Modul zum testen geschrieben:

    PHP-Code:
    class FileUploadRest extends \Module
    {
        protected 
    $strTemplate 'ce_html';

        public function 
    generate()
        {
            if (
    TL_MODE == 'BE')
            {
                
    $objTemplate = new \BackendTemplate('be_wildcard');

                
    $objTemplate->wildcard '### MODULE FILEUPLOAD REST ###';
                
    $objTemplate->title $this->headline;
                
    $objTemplate->id $this->id;
                
    $objTemplate->link $this->name;
                
    $objTemplate->href 'contao/main.php?do=themes&table=tl_module&act=edit&id=' $this->id;

                return 
    $objTemplate->parse();
            }
            return 
    parent::generate();
        }


        protected function 
    compile()
        {
        ;
            
    $this->echoOutput($_POST);

        }

        protected function 
    echoOutput($arrTable)
        {
            
    $arrOutput['response'] = $arrTable;
            
    header('Content-type: application/json; charset=utf-8'):            
            echo 
    json_encode($arrOutput);
            die();
        } 
    Daraus erstelle ich mir ein Modul und binde das ganze als Artikel in die entsprechende Seite ein. Bei GET-Parametern funktioniert soetwas wunderbar.

    Nun ist es aber so, dass wenn Contao etwas per POST empfängt ein valides Request_Token verlangt wird:

    PHP-Code:
    // initialize.php
    // 258
    /**
     * Check the request token upon POST requests
     */
    if ($_POST && !RequestToken::validate(Input::post('REQUEST_TOKEN')))
    {
        
    // Force a JavaScript redirect upon Ajax requests (IE requires absolute link)
        
    if (Environment::get('isAjaxRequest'))
        {
            
    header('HTTP/1.1 204 No Content');
            
    header('X-Ajax-Location: ' Environment::get('base') . 'contao/');
        }
        else
        {
            
    header('HTTP/1.1 400 Bad Request');
            
    die_nicely('be_referer''Invalid request token. Please <a href="javascript:window.location.href=window.location.href">go back</a> and try again.');
        }

        exit;

    und daher wird mein Modul schon garnicht ausgeführt. Ich muss irgendwie an einer Stelle vorher ran.

    Hat jemand eine gute Idee wie das möglichst update-sicher hinbekomme? Ich kann auch damit leben, wenn z.B. auf der einen bestimmten Seiten das REQUEST_TOKEN einfach deaktivert wird.

    Liebe Grüße,
    Marq
    Geändert von marq (17.10.2017 um 02:47 Uhr)

  2. #2
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.084
    Partner-ID
    10107

    Standard

    Mir fallen hier drei Möglichkeiten ein:

    1. Du holst dir vor dem POST Request ein gültiges Request Token per GET Request (keine Ahnung ob das tatäschlich so funktionieren kann), und sendest dieses Request Token dann beim POST Request mit.
    2. Du fügst in deinem Einstiegspunkt
      PHP-Code:
      define('BYPASS_TOKEN_CHECK'true); 
      ein (vor der initialize.php)
    3. Du schaltest die Anfrage Token generell aus

  3. #3
    Contao-Nutzer
    Registriert seit
    09.10.2017.
    Beiträge
    44

    Standard

    Ich würde mir mit curl den aktuellen CSRF Token von einer Seite mit Formular holen und den dann mitschicken.

  4. #4
    Contao-Urgestein
    Registriert seit
    29.10.2009.
    Ort
    Magdeburg
    Beiträge
    2.020
    Partner-ID
    626
    User beschenken
    Wunschliste

    Standard

    Ein Blick in die Klasse RequestToken macht schlauer. Hier gibt es drei Möglichkeiten die RequestToken-Validierung zu umgehen:

    • disableRefererCheck über TL_CONFIG
    • BYPASS_TOKEN_CHECK Konstante setzen
    • requestTokenWhitelist nutzen


    Da die Validierung erst nach dem initializeSystem Hook ausgeführt wird, ist es dann dadurch möglich die den einen Fall die Validierung auszuhebeln.

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
  •