typo3

Mittwoch, 22. Juli 2015

typo3 formhandler CSRF-Token

Der Formhandler hat (zumindest soweite ich feststellen konnte in seiner aktuellen Version) keinen funktionierenden Schutz gegen XSS-Angriffe. Das heißt natürlich dass ein User der angemeldet ist auf böse Dinge klicken kann die über JS die Formhandler-Forms antriggern können. Und je nachdem was das für Formulare sind kann das schon blöd sein wenn zum Beispiel sämtliche Userdaten des Users mit Blödsinn überschrieben wird.

Ich hab mir dafür jetzt eine kleine Lösung verfasst die wie folgt aufgebaut ist:

1. Klasse PreProzessor Klasse zur Tokengenerierung
2. Templateanpassung mit hidden field für den Token
3. ErrorCheck für den Token

Zuvor muss man sich entscheiden ob man die Sourcen als Extension einbindet oder via Typoscript nachläd.
Ich hab mich für das nachladen entschieden:
plugin.Tx_Formhandler.settings.additionalIncludePaths.1=pfad/zum/code
In diesem Ordner liegen 2 Dateien:
1. Tx_Formhandler_PreProcessor_CSRFPreProcessor.php
2. Tx_Formhandler_ErrorCheck_CSRF.php

Tx_Formhandler_PreProcessor_CSRFPreProcessor.php:
<?php

class Tx_Formhandler_PreProcessor_CSRFPreProcessor extends Tx_Formhandler_AbstractPreProcessor {
        /**
         * The main method called by the controller
         *
         * @return array The probably modified GET/POST parameters
         */
        public function process() {
                $min=pow(10,7);
                $this->gp['csrf_token'] = rand($min,$min*10-1);
                $this->globals->getSession()->set('csrf_token',  $this->gp['csrf_token'] );
                return $this->gp;
        }
}
?>
Tx_Formhandler_ErrorCheck_CSRF.php:
<?php
class Tx_Formhandler_ErrorCheck_CSRF extends Tx_Formhandler_AbstractErrorCheck {
        public function check()
        {
                $checkFailed='';
                $csrftoken = $this->globals->getSession()->get('csrf_token');
                if($csrftoken != $this->gp['csrf_token'])
                        $checkFailed = 'CSRF-Token invalid!';
                return $checkFailed;
        }
}

?>
Im TS den PreProcessor als solchen einbinden.
plugin.Tx_Formhandler{
  settings.predef.myForm {
    preProcessors.1.class = Tx_Formhandler_PreProcessor_CSRFPreProcessor
}
Im TS die Validierung machen (im multiStepFall für alle Steps einbinden):
plugin.Tx_Formhandler{
  settings.predef.myForm {
    1 {
      validators.1.class = Validator_Default
      validators.1.config.fieldConf {
        first_name.errorCheck.1 = required
        #beispiel feld
        csrf_token.errorCheck.1 = required
        csrf_token.errorCheck.2 = CSRF
        #das CSRF ergibt sich automatisch durch den Klassennamen
      }
  }
}
Im Templatefile muss jetzt noch gleich nach dem hidden fields marker ein input element für den Token eingefügt werden:
###HIDDEN_FIELDS### 
<input type="hidden" value="###value_csrf_token###" name="###formValuesPrefix###[csrf_token]" ></input >

Mittwoch, 14. Mai 2014

userFunc geht nicht...

Ja warum geht sie denn nicht?
ganz klar... (aber nicht intuitiv!) der Klassenname muss mit "user" beginnen.

FALSCH:
class myClass {
function myFunc($content,$conf){return "HelloWorld";}
}

RICHTIG:
class usermyClass {
function myFunc($content,$conf){return "HelloWorld";}
}

Dienstag, 13. Mai 2014

Typo3 tx_sv_authbase enableFields

Für alle die das schon mal gebraucht hätten, das Equivalent zu enableFields im authbase lautet wie folgt:
$fromTable = 'fe_users';
$authInfo = $this->pObj->getAuthInfoArray();
$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery( 
            '*', 
            $fromTable, 
            '1 '.$authInfo['db_user']['enable_clause'],
            '', 
            '', 
            '' 
        );

Copyright

All rights reserved by Me. © 2004-2020
Please do not copy any content of this WebLog without my written allowance.

Aktuelle Beiträge

CSS echo effect
Letztens hatte ich mit einem Kollegen das Thema wegen...
rothi - 15. Mär, 09:12
sed 's/ /@/g' ../sha256sums.txt cut...
sed 's/ /@/g' ../sha256sums.txt cut -d @ -f 1 sha256sums.txt...
rothi - 4. Jan, 15:56
reencode all Files
Wer je das Problem hat dass die Videos die die man...
rothi - 27. Feb, 10:12
a macing
When you meet someone, always make sure that it is...
rothi - 9. Aug, 15:37
gentle restart linux
Wenn Linux komplet freezed und nicht mal strg+alt+entf...
rothi - 7. Aug, 10:34

Links

Gelesen


Jan Michalsky
Süd Salatonien

W. Hohlbein
Enwor Saga

Douglas Adams
Per Anhalter durch die Galaxis


A. R. R. R. Roberts, Adam Roberts, Ute Brammertz
Der kleine Hobbnix


Joanne K. Rowling
Harry Potter und d** *******

John R. R. Tolkien
Der kleine Hobbit, Sonderausgabe


Wolfgang Hohlbein, Heike Hohlbein
Midgard


Stan Nicholls, Christian Jentzsch
Die Orks


Markus Heitz
Die Zwerge

R. Feist
Midkemia Saga 1-8


Krondor Saga 1-3

Raymond E. Feist
Die Kelewan-Saga 1- 8


Ursula K. LeGuin, Margot Paronis, Hilde Linnert, Ursula K. Le Guin
Erdsee. 4 Romane in einem Band


David Eddings, Leigh Eddings
Polgara die Zauberin


Terry Brooks, George Lucas
Star Wars Episode 1. Die dunkle Bedrohung.


Terry Pratchett, Andreas Brandhorst
Alles Sense! Ein Scheibenwelt-Roman


Terry Pratchett, Andreas Brandhorst
Gevatter Tod. Ein Roman von der bizarren Scheibenwelt.


Artenschutz
Berichte
Buchbericht
Free for all!!!
Gedichte
Geschichte
Michl Zitate
Puns
Studium
The sky is grey
typo3
Weisheiten
Profil
Abmelden
Weblog abonnieren