Protégez vos actions Symfony2
Il est parfois excessif de créer un formulaire pour effectuer certaines actions au sein d’une application. Il est alors d’usage d’utiliser un lien HTML permettant d’effectuer ces opérations (c’est par exemple souvent le cas pour supprimer un élément dans une liste). Il est alors important de sécuriser ses actions.
Pour cela, imaginons une liste d’élément s’affichant de la manière suivante :
Bien sûr il ne s’agit là que d’un exemple, et dans une application réelle, il faudrait que l’action de suppression soit effectuée au travers d’une méthode POST ou DELETE.
En supposant qu’il y ait déjà une restriction en fonction des droits de l’ utilisateur connecté, nous allons donc protéger cette action d’une attaque de type CSRF. Pour cela nous allons voir comment générer un jeton qui permettra d’identifier la requête qui sera effectuée.
Nous allons donc commencer par créer le jeton dans l’action qui affiche la liste et ajouter la vérification du token dans l’action de suppression :
Une fois ce code ajouté, il ne restera plus qu’à passer le jeton lors de la génération du lien de l’action.
Notez également que le jeton généré ici restera valide pour l’ensemble de la
durée de la session de l’utilisateur et qu’il pourra être réutilisé. Le jeton
est également généré à l’aide du paramètre secret
présent dans le fichier
app/config/parameters.yml
d’où l’importance de modifier ce dernier.
C’est une méthode simple et rapide qui vise à protéger votre application, et pourtant peu de développeurs l’utilise.