Manual:Edit token/es

Una ficha de edición (también denominada ficha csrf) es una cadena de caracteres aleatoria que es transmitida entre un cliente y el servidor MediaWiki al realizar acciones que modifiquen páginas. It is used to check that the user really intended to make the change, rather than being tricked into requesting the change on the wiki while visiting an external site (i.e. cross-site request forgery).

Por qué es necesaria
Las fichas de edición son utilizadas como una medida de seguridad adicional durante la realización de cambios. If the user identity were checked using cookies only, an external site could use a link like the following one to have visitors perform changes to the wiki.

Siguiendo tal enlace llevaría a un administrador a solicitar, sin saberlo, la eliminación de una imagen. If the administrator is still logged in, the server would check the cookies and grant the request.

Por esta razón, las acciones que realizan cambios requieren un porción adicional de datos transmitidos como un parámetro HTTP, la ficha de edición. An edit token is embedded into web pages from which the user can request a change; this includes the edit form (where one can change a page by pressing "") but also the image description pages (where an administrator can request deletion of an old version of an image), contributor histories (where administrators can rollback), etc.

Cuando el usuario realmente solicita que el cambio se realice (pulsando un botón o siguiendo un enlace), la ficha de edición es enviada de vuelta al servidor. This proves to the server that the user has requested the change directly from the site and not from an external site, as external sites do not have access to the edit tokens of the user.

Cómo funciona
Una ficha de edición es una cadena de caracteres aleatoria almacenada en la sesión PHP, la cual es una matriz asociativa que está almacenada en el servidor y se conserva entre sesiones por una cookie (p. ej.,  en la Wikipedia Inglesa). The edit token is in particular contained in the  element of the PHP session.

Las fichas de edición se incrustan en las páginas webs, desde donde el usuario puede pedir un cambio. When such a page is to be generated, the edit token is retrieved from the  element of the PHP session, if such an element exists; otherwise, a random string is generated and stored in that element.

Lo que actualmente se incrusta en la página web no es en sí el elemento. Rather, this element is concatenated to the salt, which is a string that depends on the particular action and page; the resulting string is then MD5-hashed; this is what is embedded in the web page. When the user actually requests the action, this string is sent back to the server via an HTTP parameter. The server can then check the correctness of this parameter: it repeats the procedure used to generate it from the PHP session and checks if the result is equal to the parameter.

Validez
La ficha de edición devuelta por el servidor puede reutilizarse múltiples veces para distintas operaciones de edición. La ficha es válida solo durante un período específico de tiempo. The token is only valid for a specific period of time. API call with a stale token will return a badtoken error. In this case it is necessary to get a new edit token from the server before retrying the operation.

Código fuente
El archivo User.php, o más precisamente los métodos expuestos a continuación, procesan las fichas de edición.
 * getEditToken(salt) : returns the MD5 hash of the concatenation of the  element of the PHP session with the salt. If such an element does not exist in the PHP session, a random one is generated. See getEditToken function in repository.
 * matchEditToken(token, salt) : comprueba si su primer argumento es una ficha de edición válida con respecto al salt; esto se realiza al repetir el procedimiento de generación y comparando entonces el resultado con el primer argumento. En particular, esta función convoca a  y entonces compara el resultado con el primer argumento.

Sal
El salt predeterminado es una cadena de caracteres vacía; la mayoría de las acciones utilizan este valor predeterminado. Como resultado, una cadena de ficha de edición recibida desde un servidor para realizar una acción inicial en una página, puede reutilizarse para realizar más acciones en otras páginas. 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).

Una ficha-hash-de-edición generada utilizando un salt, puede usarse para realizar acciones adicionales solo si el salt utilizado por el servidor y el cliente es el mismo. 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.


 * Aquellas acciones que no emplean la «sal» vacía predeterminada son:


 * retroceder: el salt es el título del artículo (incluido el prefijo del espacio de nombres) concatenado con el nombre del usuario cuyas ediciones deben revertirse;
 * delete the old version of an image : the salt is the Parámetro (al eliminar todas las versiones, este parámetro es una cadena vacía, que también es el salt por defecto);
 * Special:UserRights : the salt is the username of the user whose properties are to be changed;
 * Special:Watchlist/clear : the salt is the string 'clearwatchlist'

Sufijo de la ficha de edición
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.

Recuperación por el lado cliente
A partir de la versión 1.18, no es necesario recuperar la ficha de edición a través de AJAX. Está disponible como. Note that you need to have defined mediawiki.user as a ResourceLoader dependency for your module. It is recommended that you use the  helper method, which automatically takes care of retries if the token has expired since the web page was loaded.