Prozessbaum
ps -o pid,sess,cmd afx
rothi - 14. Aug, 09:51
plugin.Tx_Formhandler.settings.additionalIncludePaths.1=pfad/zum/codeIn diesem Ordner liegen 2 Dateien:
<?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 >
$fromTable = 'fe_users';
$authInfo = $this->pObj->getAuthInfoArray();
$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
'*',
$fromTable,
'1 '.$authInfo['db_user']['enable_clause'],
'',
'',
''
);