Manual:Edit token/ja

編集トークン (edit token) は、ページを変更するアクションを実行するときにクライアントとMediaWikiサーバーの間で交わされるランダムな文字列です. 外部サイトに訪問している間に騙されてwiki上の変更をリクエストしていないか(つまり、cross-site request forgery)を確認することよりも、ユーザーがwiki上で本当に変更しようとしているかを確認するために使用されます.

注意: このページの情報は開発者によって検証される必要があります.

なぜ必要なのか

編集トークンは変更を実行するときに追加のセキュリティ基準として使用されます. ユーザーアイデンティティがクッキーのみで確認される場合、外部サイトは訪問者にwikiの変更を実行させる次のようなリンクを利用できます. http://en.wikipedia.org/w/index.php?title=Image:Abcd.jpg&action=delete&oldimage=324242234 そのようなリンクを許可すると管理者が知らずに画像の削除をリクエストすることにつながりかねません. 管理者がまだログインしている場合、サーバーはクッキーを確認してリクエストを許可します.

このため、変更を実行するアクションはHTTPパラメータ、編集トークンとして渡されるデータの追加ピースが要求されます. 編集トークンはユーザーが一つの変更を要求することが出来るものからウェブページに埋め込まれます; これは編集フォーム(「変更内容を保存」を押すことでページを変更できる場所)を含みますが、画像説明ページ(管理者が画像の古いバージョンの削除をリクエスト出来る場所)、投稿者の履歴(管理者がロールバック出来る場所)なども含みます. ユーザーが実際に行われる変更をリクエストするとき(ボタンを押すもしくはリンクに従う)、編集トークンはサーバーに送られます. 外部サイトはユーザーの編集トークンへのアクセス権限がないので、このことによってユーザーが外部サイトではなくサイトから直接の変更をサーバーにリクエストしたことを証明します.

When the user actually requests the change to be done (by pressing a button or following a link), the edit token is sent back to the server. 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 token of the user. どのように動作するのか

編集トークンはPHPセッションに保存されるランダムな文字列です. PHPセッションは連想配列でサーバーに保存されクッキーによってセッションを越えて維持されます(例えば英語のWikipediaでは ). 編集トークンはとりわけPHPセッションの 要素に含まれます.

編集トークンはユーザーが変更をリクエスト出来る場所からウェブページに埋め込みされます. ページが生成される時、編集トークンはPHPセッションの 要素が存在する場合、その要素から取得されます; さもなけばランダムな文字列が生成されその要素に保存されます.

ウェブページに実際に埋め込まれるものは 要素自身ではありません. むしろ、この要素はsaltに連結されます. saltは特定のアクションとページに依存する文字列です; 結果の文字列はMD5のハッシュです; これはウェブページに埋め込まれるものです. ユーザーが実際にアクションをリクエストするとき、この文字列はHTTPパラメータ経由でサーバーに送られます. サーバーはこのパラメータの対応を確認することが出来ます: PHPセッションからそれを生成するために使用される手続きを繰り返し結果がパラメータと等しいかを検査します.

ソースコード
The edit token returned by the server can be reused multiple times for different edit operations. 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.

ソースコード
編集トークンは主にUser.phpソースファイルで取り扱われます. とりわけ次のようなメソッドがあります.
 * editToken(salt) : 要素の連結のMD5ハッシュを返します  saltを伴うPHPセッションの; PHPセッションにそのような要素が存在しない場合、ランダムなものが生成されます. See editToken function in SVN.
 * generateToken(salt) : generate a random string (depends on the salt parameter)
 * matchEditToken(token, salt) : checks whether its first argument is a valid edit token with respect to the salt; this is done by repeating the procedure of generation and then comparing the result with the first argument; in particular, this function calls  and then compares the result with the first argument;

Salt
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.


 * Actions not using the default empty salt are:


 * 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;
 * delete the old version of an image : the salt is the  parameter (when deleting all version this parameter is the empty string, which is also the default salt);
 * 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'

The edit token suffix
Since revision 18112, a trailing backslash has been added to edit tokens, and edit tokens made of a single backslash introduced for anonymous users. This change has been done to prevent broken proxies from editing: proxies that cannot correctly handle the backslash typically also mess up the wiki markup code. This suffix has been changed to  in r23287 to also catch broken proxies which mangle the '+' character.

Retrieving via Ajax
In 1.18 and higher, you do not need to retrieve the edit token using AJAX. It's available as. Note that you need to have defined mediawiki.user as a ResourceLoader dependency for your module.

Below is sample code for retrieving an edit token via an Ajax request: