Manual:Edit token/ja

From MediaWiki.org
Jump to: navigation, search

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

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

Contents

[edit] なぜ必要なのか

編集トークンは変更を実行するときに追加のセキュリティ基準として使用されます。ユーザーアイデンティティがクッキーのみで確認される場合、外部サイトは訪問者にwikiの変更を実行させる次のようなリンクを利用できます。

http://en.wikipedia.org/w/index.php?title=Image:Abcd.jpg&action=delete&oldimage=324242234

そのようなリンクを許可すると管理者が知らずに画像の削除をリクエストすることにつながりかねません。管理者がまだログインしている場合、サーバはクッキーを確認してリクエストを許可します。

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

[edit] どのように動作するのか

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

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

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

[edit] ソースコード

編集トークンは主にUser.phpソースファイルで取り扱われます。とりわけ次のようなメソッドがあります。

editToken(salt) 
saltを伴うPHPセッションのwpEditToken要素の連結のMD5ハッシュを返します; PHPセッションにそのような要素が存在しない場合、ランダムなものが生成されます;
generateToken(salt) 
ランダムな文字列を生成します(saltパラメータによります)
matchEditToken(token, salt) 
最初の引数tokenが、後者の引数saltに対する有効な編集トークンであるか検査します。これは生成の処理を繰り返して最初の引数と結果を比較することで行われます。具体的には、この関数はeditToken(salt)を呼び出し最初の引数と結果を比較します。

[edit] Salt

デフォルトのsaltは空の文字列です; 多くのアクションはこのデフォルトの値を使います。結果として、ページへのアクションといったものを実行するためのサーバから受け取る編集トークン文字列は別のページ上の別のアクションを実行するためにも使用されます。しかしながら、編集トークンはPHPセッションに保存されるので、セッションがクライアントに保存されていてセッションが対応するセッショントークンクッキーを持っている限りのみ利用できます(例えば、enwiki_sessionクッキー)。

saltを利用して生成された編集トークンハッシュはアクションによって使用されるsaltが同じである場合のみ別のアクションを実行するために使用できます。結果として、アクションが実行されるページにお手本のsaltが依存している場合、編集トークンハッシュはそのページのみに使用できます。デフォルトの空のsaltを使用しないアクションは次の通りです:

rollback 
saltはリバートされるユーザー名の編集に連結された記事のタイトル(名前空間の接頭辞を含む)です;
delete the old version of an image 
saltはoldimageパラメータです(すべてのバージョンを削除するときこのパラメータは空の文字列で、デフォルトのsaltでもあります);
SpecialUserrights 
saltは変更されるユーザーのプロパティのユーザー名です;
SpecialWatchlist/clear 
saltは'clearwatchlist'の文字列です

[edit] 編集トークン接尾辞

リビジョン18112以降、トレイリングバックスラッシュが編集トークンに加えられ、また、単独のバックスラッシュでできた編集トークンは匿名ユーザーの為に導入されました。

この変更は壊れたプロキシからの編集を防止する為に行われました。バッシュスラッシュを正しく扱うことが出来ないプロキシは、一般的にwikiマークアップコードをめちゃくちゃにもします。

この接尾辞は、'+'文字をめちゃくちゃにする壊れたプロキシに対応する為に、リビジョン23287+\に変更されました。

言語: English  • 日本語
Personal tools
Namespaces
Variants
Actions
Site
Support
Download
Development
Communication
Print/export
Toolbox