Accueil > Tests de charge & Anti Forgery Tokens
Pierre-Henri Gache
11 mars 2015

Tests de charge & Anti Forgery Tokens

Tests de charge & Anti Forgery Tokens

Introduction

Lorsque l’on effectue des tests de charges, nombre de paramètres sont à prendre en compte et notamment l’utilisation d’anti forgery tokens. En effet, dans ce cas précis, si aucun traitement spécifique n’est prévu, le test échouera systématiquement et la campagne de mesure ne pourra pas avoir lieu. Je vais donc vous montrer comment détecter l’utilisation de ces tokens et comment les gérer avec l’aide de Visual Studio.

 

Qu’est-ce qu’un anti forgery token et à quoi ça sert ?

Ces tokens sont utilisés pour contrer les attaques de type « cross-site request forgery » (CSRF). Ce type d’attaque consiste à envoyer à la victime un lien vers un site qui sera exécuté avec ses droits d’accès. En effet, nombre de sites utilisent une authentification via celle intégrée à Windows ou encore via les cookies. Dans ce cas, si la victime reçoit par mail un lien alors qu’elle est authentifiée, ce dernier pourra être exécuté avec ses permissions.

Pour éviter ce problème, il est possible de mettre en place un token de type « anti forgery ». Concrètement, la méthode effectuant l’action de modification attend un token qui sera généré par la page donnant accès au formulaire de modification. Si le token attendu n’est pas le même que celui généré, la requête échouera. Avec ce mécanisme, il n’est donc plus possible de transmettre un lien à une tierce personne car ce dernier sera systématiquement rejeté.

Diagnostic du problème

Prenons comme exemple l’étape de login du site de démonstration MusicStore. Si l’on enregistre puis que l’on rejoue cette action via un test de charge, on obtiendra invariablement l’erreur suivante :

anti forgery token error

 

En examinant le token généré lors de l’appel au formulaire :

token source

 

Et celui donné en paramètre à l’action de login :

token dest

 

Nous voyons qu’ils sont différents. En effet, le premier est systématiquement généré lors de l’appel à la page tandis que le second est enregistré dans les paramètres du test. C’est cette différence qui fait échouer l’opération.

 

Solution

Pour résoudre ce problème, la solution semble évidente, il faut récupérer lors du premier appel le token et ensuite le passer en paramètre lors du second. Je vais donc vous montrer comment réaliser cette opération. Pour cela, rendez-vous dans l’onglet « Response » de l’appel au formulaire et sélectionnez l’ensemble de la valeur du champ « __RequestVerificationToken ». Puis, à l’aide d’un clic droit, sélectionnez l’option « Add Extraction Rule ». Cette action aura pour effet de créer une nouvelle entrée dans la rubrique “Extraction Rules” du test.

extracte rule

 

Pour plus de clarté, renommez cette nouvelle règle via ses propriétés :

rename

 

Dans la section « Form Post Parameters » de l’étape d’appel du formulaire, vous pouvez voir le token avec une valeur déterminée. C’est cette valeur « en dur » qu’il faut remplacer par notre règle d’extraction.

set rule

 

Pour cela, allez dans les paramètres et dans la rubrique « value », sélectionnez la règle précédemment créée.

select rule

 

Vous devriez alors voir dans la définition du test la sélection de cette nouvelle règle :

rule added

 

Lancez de nouveau le test. La valeur du token sera alors récupérée et donnée en paramètre au formulaire. Le test se déroulera alors normalement :

run test

 

Conclusion

Cet article montre comment utiliser les règles d’extraction dans le cas précis des « anti forgery tokens » mais cette technique est, bien sûr, adaptable à d’autres situations. Si vous souhaitez en savoir d’avantage, n’hésitez pas à nous rejoindre lors de l’Atelier Tests de Charge prévu en fin de mois.

Nos autres articles
Commentaires
Laisser un commentaire

Restez au courant des dernières actualités !
Le meilleur de l’actualité sur le Cloud, le DevOps, l’IT directement dans votre boîte mail.