Manual:Edit token/zh

编辑令牌（亦為 csrf 令牌）是一个由Mediawiki服务器在客户端执行更改页面的操作时生成的随机字符串. 客户端获得此编辑令牌后才可以编辑页面. 编辑令牌用于确保用户真的想编辑页面，而不是误点击某个外部链接而不自觉地编辑了什么页面. 另见跨站请求伪造的说明.

為什麼需要編輯令牌
編輯令牌用作執行更改時的額外安全措施. 如果僅使用cookie檢查用戶身份，則外部站點可以使用連結（類似以下的鏈接）來讓訪問者更改維基.

按照這樣的鏈接操作後，將導致管理員在不知不覺中請求刪除圖像. 如果管理員仍然处于登錄状态，服務器將檢查cookie並准許請求.

因此，会对内容产生变更的请求需要附加一小段信息作为HTTP参数，这段信息被称为编辑令牌. 编辑令牌嵌入在那些网页上的变更链接中——包括编辑表单（用户通过点击“”按钮来修改页面）、图片描述页（管理员可以发送请求删除一张图片的旧版本）和贡献记录（管理员可以执行回退操作）等处.

當用戶實際請求完成其更改時（即通過按下按鈕或点击鏈接），編輯令牌將被發送回服務器. 因為外部站點無權訪問用戶的編輯令牌，此举將向服務器證明用戶已直接從站點請求更改，而不是從外部站點請求更改.

工作原理
編輯令牌是存儲在PHP會話中的一串隨機字符串，其是存儲在服務器中的一個關聯數組，在各個会话之間使用cookie維護（例如：英語維基百科上的 ）. 具体来说，編輯令牌存储在PHP会话的 元素中.

编辑令牌嵌入在网页上可以导致页面发生改变的链接中. 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.

What is actually embedded into the web page is not the  element itself. 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.

過期
服務器返回的編輯令牌可以多次重複使用，以進行不同的編輯操作. 令牌僅在特定時間段內有效. 帶有過時令牌的API調用將返回「badtoken」的錯誤. 在這種情況下，必須在重試操作之前，從服務器獲取新的編輯令牌.

源代碼
Edit tokens are mainly dealt with in the User.php source file, and in particular by the following methods.
 * 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) : 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;

盐
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).

僅當服務器和客戶端使用的「salt」相同時，使用「salt」生成的編輯令牌雜湊才可用於執行其他操作. 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.


 * 不使用默認空「salt」的操作是:


 * rollback : salt是文章的標題（包括名稱空間前綴）與要還原其編輯的用戶名的連接；
 * 刪除舊版本的圖像 : 盐是 参数的值（在删除图像的所有版本时本参数为空，也就是默认盐的值）
 * Special:UserRights : 此處，salt是要更改其屬性的用戶的用戶名；
 * Special:Watchlist/clear : 'clearwatchlist'，salt是字符串

編輯令牌後綴
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.

檢索客戶端
在1.18及其更高版本中，您不需要使用AJAX檢索編輯令牌，可使用. 但請注意，您需要將mediawiki.user作為模塊的ResourceLoader依賴項. 建議您使用 幫助程序的方法，該方法會在加載網頁後令牌已過期時，自動重試並處理.