Manual:Edit token/fr

Un jeton d'édition (csrf token) est une chaîne aléatoire passée entre un client et le serveur MediaWiki lorsque vous réalisez des actions qui modifient les pages. Il est utilisé pour vérifier que l'utilisateur a bien l'intention de faire une modification, plutôt que d'être amené à demander le changement sur le wiki lors de la visite d'un site externe (par exemple cross-site request forgery).

Pourquoi c'est nécessaire
Les jetons d'édition sont utilisés comme mesure de sécurité supplémentaire quand les modifications sont réalisées. Si l'identité des utilisateurs avait été testée uniquement au travers des cookies, un site externe pourrait utiliser un lien tel que le suivant, pour que les visiteurs puissent réaliser des modifications sur le wiki.

En suivant un tel lien un administrateur pourrait inconsciemment demander la suppression d'une image. Si l'administrateur est encore connecté, le serveur vérifiera les cookies et honorera la requête.

Pour cette raison, les actions qui induisent des modifications nécessitent une information supplémentaire passée dans un paramètre HTTP : c'est le jeton d'édition. Un jeton de modification est inclus dans les pages web à partir desquelles l'utilisateur peut demander une modification; cela comprend le formulaire de modification (où vous pouvez modifier une page en pressant « ») mais aussi les pages de description d'images (où un administrateur peut demander la suppression d'une ancienne version de l'image), les historiques de contribution (où les administrateurs peuvent faire des restitutions), etc.

Quand l'utilisateur demande actuellement que la modification soit realisée (en pressant un bouton ou en suivant un lien), le jeton de modification est renvoyé au serveur. Cela prouve au serveur que l'utilisateur a demandé la modification directement à partir du site et non à partir d'un site externe, étant donné que les sites externes n'ont pas accès aux jetons de modification de l'utilisateur.

Comment ça marche ?
Un jeton de modification est une chaîne aléatoire stockée dans la session PHP, c'est à dire un tableau associatif enregitré sur le serveur et maintenu au travers des sessions grâce à un cookie (par exemple,  sur la Wikipedia anglaise). Le jeton d'édition est en particulier contenu dans l'élément  de la session PHP.

Les jetons d'édition sont inclus dans les pages web à partir desquelles l'utilisateur peut demander une modification. Quand une telle page doit être générée, le jeton de modification est récupéré de l'élément  de la session PHP, si cet élément existe; sinon, une chaîne aléatoire est générée et stockée dans cet élément.

Ce qui se trouve actuellement dans la page web n'est pas l'élément  lui-même. Mais plutôt, cet élément est concaténé dans le sel, qui est une chaîne dépendant de l'action particulière et de la page; la chaîne résultante est ensuite hachée MD5; c'est ce qui est inclus dans la page web. Lorsque l'utilisateur demande actuellement l'action, cette chaîne est renvoyée vers le serveur dans un paramètre HTTP. Le serveur peut alors vérifier si ce paramètre est correct : il répète la procédure utilisée pour le générer à partir de la session PHP et vérifie si le résultat est égal au paramètre.

Validité
Le jeton d'édition renvoyé par le serveur peut être réutilisé plusieurs fois pour différentes opérations de modification. Le jeton n'est valable que pendant une période de temps donnée. L'appel de l'API avec un jeton périmé provoque une erreur de type badtoken. Dans ce cas, il est nécessaire d'obtenir du serveur, un nouveau jeton d'édition avant de retenter l'opération.

Code source
Les jetons de modification sont principalement gérés avec dans le fichier source User.php, et en particulier à l'aide des méthodes suivantes.
 * getEditToken(salt) : renvoie la valeur de hachage MD5 de la concaténation de l'élément  de la session PHP et du sel. si un tel élément n'existe pas dans la session PHP, un élément aléatoire équivalent est généré. Voir la fonction getEditToken dans le dépôt.
 * matchEditToken(token, salt) : vérifie si son premier argument est un jeton valide de modification en fonction du sel; ceci est réalisé en répétant la procédure de génération et en comparant le résultat avec le premier argument; en particulier cette fonction appelle  puis compare le résultat avec le premier argument;

Le sel
The default salt is the empty string; most actions use this default value. As a result, an edit token string received from a server to perform an initial action on a page can also be used to perform additional actions on other pages. However, since an edit token is stored in the PHP session, it can be used only as long as the session is kept in the server and the client has the corresponding session token cookie (e.g., the enwiki_session cookie).

An edit-token-hash generated using a salt can be used for performing additional actions only if the salt used by both server and client is the same. Therefore it follows that if the salt is only embedded in the page where the initial action is performed, then that same edit-token-hash cannot be used to enable actions on additional pages.


 * Les actions qui n'utilisent pas le sel vide par défaut sont : 


 * rollback : the salt is the title of the article (including the namespace prefix) concatenated with the name of the user whose edits are to be reverted;


 * supprimer l'ancienne version d'une image : le sel est le paramètre  (lors de la suppression de toutes les versions, ce paramètre est la chaîne vide, qui est également le sel par défaut);
 * Special:UserRights : le sel est le nom de l'utilisateur dont les propriétés vont être modifiées;
 * Special:Watchlist/clear : le sel est la chaîne 'clearwatchlist'

Suffixe du jeton d'édition
Edit tokens end with  to prevent broken proxies from editing: proxies that cannot correctly handle the backslash or plus sign typically also mess up the wiki markup code.

Récupération du côté client
Dans 1.18 et supérieur, vous n'avez pas besoin de récupérer le jeton d'édition en utilisant AJAX. Il est disponible en tant que. Notez que pour votre module, vous devez avoir défini mediawiki.user comme une dépendance de ResourceLoader. Il vous est recommandé d'utiliser la méthode de l'assistant, qui prend en charge automatiquement les nouvelles tentatives quand le jeton a expiré depuis le moment où la page a été chargée.