[Symfony 1.4] CSRF Protection ?

WRInaute passionné
Bonjour,

Quelqu'un peut-il m'expliquer le fonctionnement du jeton de sécurité dans les formulaires de Symfony ?

Sur un formulaire je réalise un
Code:
$this->addCSRFProtection(SECRET)...

Mon secret est une constante, je retrouve donc à chaque fois le même jeton.
Il n'y a donc aucun intérêt.
Code:
<input type="hidden" name="monform[_csrf_token]" value="nynid37bcf0bd45484512e04ed8e" id="monform__csrf_token" />

Si je renseigne un SECRET aléatoire, je suis par la suite incapable de valider le formulaire.
Quelle étape ai-je manqué ?

Merci,
Dorian
 
WRInaute passionné
Normalement ton secret doit être fait par "session".

Je ne connais pas du tout symfony (je trouve ça trop lourd, comme Zend) mais tu créés ton SECRET avant le formulaire, durée de validité de 10/15 minutes par exemple, puis tu post, tu check ton jeton, s'il est bon, tu dis "OK" et après tu destroy ta session.

Personnellement j'insère pour chaque user une chaine en sha1 dans la base de données.
Après pour chaque formulaire, j'utilise toujours le jeton qui fait:
Code:
<input type... value="<?php echo sha1('un code unique à ce formulaire genre le id' . $user['csrf'] . SALT'); ?>" />
Le SALT étant commun à tout le site.
Voilà, je connais pas trop l'usage que fait symfony de ce token mais à mon avis ils attendent un truc unique à chaque formulaire et à chaque user (une var de session, une var de cookie).
 
WRInaute passionné
Bonjour Julia et merci, je vais préciser mon problème qui est bien spécifique à Symfony.

Comment faire abstraction de $request->checkCSRFProtection() pour valider un jeton de protection ?

J'utilise Symfony en tant que librairie et non framework, je ne possède donc pas le package "request".

Je parviens bien à créer le jeton que j'ai placé dans le construct de mon form.
Code:
$token = uniqid(rand());
$_SESSION['token'] = $token;
$this->addCSRFProtection($token);

En revanche, j'attends vos conseils pour la validation du jeton.

J'ai pensé réaliser cette étape au niveau du bind() ?
Que faire si le jeton est valide ? Jouer sur le validatorSchema du token ?

Merci,
Dorian
 
Discussions similaires
Haut