Manual:Edit token/es

Una ficha de edición (también denominada ficha csrf) es una cadena de caracteres aleatoria que se transmite entre un cliente y un servidor MediaWiki al realizar acciones que modifican las páginas. Se emplea para comprobar que el usuario realmente ha pretendido hacer el cambio y no fue engañado para solicitar el cambio mientras visitaba un sitio externo (esto es, falsificación de solicitudes entre sitios). 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
Se utilizan las fichas de edición como medida de seguridad adicional durante la realización de cambios. Si la identidad del usuario se verificara únicamente mediante las cookies, algún sitio externo podría utilizar un enlace como el siguiente para que los visitantes realicen cambios en el wiki. 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. https://en.wikipedia.org/w/index.php?title=Image:Abcd.jpg&action=delete&oldimage=324242234 Al pulsar en un enlace como este, un administrador podría solicitar la eliminación de una imagen sin tener conocimiento de ello. Si este administrador permanece conectado, el servidor comprobaría las cookies y concedería la solicitud. If the administrator is still logged in, the server would check the cookies and grant the request.

Por este motivo, las acciones que realizan modificaciones requieren un dato adicional (esto es, la ficha de edición) que se ha de transmitir como un parámetro HTTP. La ficha de edición se incrusta en las páginas web de las cuales los usuarios pueden solicitar una modificación; estas comprenden el formulario de edición (donde uno puede cambiar una página al pulsar en «Guardar los cambios»), las páginas de descripción de las imaágenes (donde los administradores pueden solicitar la eliminación de una versión anterior de las imágenes), los historiales de contribuciones (donde los administradores pueden realizar reversiones), etcétera. 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 solicita que el cambio se realice (al pulsar en un botón o un enlace), la ficha de edición se envía de vuelta al servidor. Ello demuestra al servidor que el usuario ha realizado el cambio directamente desde el sitio y no desde un sitio externo, dado que los sitios externos no tienen acceso a la ficha de edición del usuario. 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 que se almacena en la sesión PHP, la cual es una matriz asociativa que se guarda en el servidor y se conserva entre sesiones gracias a una cookie (p. ej.,  en la Wikipedia en castellano). La ficha de edición se ubica en concreto dentro del elemento  de la sesión PHP. 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 de donde los usuarios pueden solicitar cambios. Cuando se genera alguna de estas páginas, la ficha de edición se recupera del elemento  de la sesión PHP, si existe; en caso contrario, se genera una cadena al azar y se guarda en el elemento aludido. 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 de hecho se incrusta en la página web no es en sí el elemento. En lugar de ello, este elemento se concatena con la «sal», la cual es una cadena de caracteres que varía en función de la acción y la página concretas; la cadena que resulta se cifra con el algoritmo MD5 y esto es lo que queda incrustado en la página. Cuando el usuario solicita la acción, esta cadena se devuelve al servidor por medio de un parámetro HTTP. El servidor comprobará la exactitud de este parámetro repitiendo el procedimiento de generación desde la sesión PHP y revisará que el resultado equivalga al parámetro. 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 varias veces para distintas operaciones de edición. La ficha es válida solo durante un período específico. Las llamadas a la API que incluyan una ficha vieja fallarán con el error badtoken: si esto sucede, será necesario obtener una ficha de edición nueva desde el servidor antes de intentar la operación de nuevo. 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 a la «sal»; esto se realiza al repetir el procedimiento de generación y comparar el resultado con el primer argumento. En concreto, esta función invoca a  y, acto seguido, compara el resultado con el primer argumento.

Sal
La «sal» predeterminada es una cadena de caracteres vacía; la mayor parte 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. Sin embargo, como la ficha de edición se guarda en la sesión PHP, puede utilizarse solo mientras la sesión permanezca en el servidor y el cliente retenga la cookie de sesión correspondiente (p. ej., eswiki_session). 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).

Un hash-de-edición-simbólico generado 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.