[Symfony 1.4] CSRF Protection ?


dorian53
WRInaute passionné
WRInaute passionné
 
Messages: 2215
Inscription: 10 Avr 2005

[Symfony 1.4] CSRF Protection ?

Message le Ven Sep 03, 2010 13:32

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: Tout sélectionner
$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: Tout sélectionner
<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


Julia41
WRInaute passionné
WRInaute passionné
 
Messages: 1765
Inscription: 31 Aoû 2007

Re: [Symfony 1.4] CSRF Protection ?

Message le Ven Sep 03, 2010 15:41

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: Tout sélectionner
<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).


dorian53
WRInaute passionné
WRInaute passionné
 
Messages: 2215
Inscription: 10 Avr 2005

Re: [Symfony 1.4] CSRF Protection ?

Message le Lun Sep 06, 2010 16:16

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: Tout sélectionner
$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


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités