Příručka:Úprava tokenů

From mediawiki.org
This page is a translated version of the page Manual:Edit token and the translation is 100% complete.

Edit token (token úprav) (také známý jako token csrf) je náhodný řetězec, který se předává mezi klientem a serverem MediaWiki při provádění akcí, které mění stránky. Používá se ke kontrole, že uživatel skutečně zamýšlel provést změnu, spíše než aby byl oklamán, aby požádal o změnu na wiki při návštěvě externího webu (tj. padělání požadavku mezi weby).

Informace na této stránce musí být ověřeny vývojářem.

Proč je to nutné

Tokeny úprav se používají jako dodatečné bezpečnostní opatření při provádění změn. Pokud by byla identita uživatele kontrolována pouze pomocí souborů cookie, externí stránka by mohla použít odkaz jako je následující, aby návštěvníci provedli změny na wiki.

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

Sledování takového odkazu by vedlo správce k nevědomému požadavku na smazání obrázku. Pokud je správce stále přihlášen, server zkontroluje soubory cookie a vyhoví požadavku.

Z tohoto důvodu vyžadují akce, které provádějí změny, další část dat, která je předána jako parametr HTTP, token úprav. Token pro úpravy je vložen do webových stránek, ze kterých může uživatel požádat o změnu. To zahrnuje formulář pro úpravy (kde lze změnit stránku stisknutím "Zveřejnit změny"), ale také stránky s popisem obrázku (kde může správce požádat o smazání staré verze obrázku), historie přispěvatelů (kde se mohou správci vrátit) atd. .

Pokud uživatel skutečně požaduje provedení změny (stisknutím tlačítka nebo pomocí odkazu), je token pro úpravy odeslán zpět na server. To dokazuje serveru, že uživatel požádal o změnu přímo z webu a ne z externího webu, protože externí weby nemají přístup k tokenům úprav uživatele.

Jak to funguje

Token úprav je náhodný řetězec uložený v relaci PHP, což je asociativní pole, které je uloženo na serveru a udržováno napříč relacemi díky souboru cookie (např. enwiki_session na anglické Wikipedii). Editační token je obsažen zejména v wsEditToken elementu PHP session.

Tokeny úprav jsou vloženy do webových stránek, odkud může uživatel požádat o změnu. Když má být taková stránka vygenerována, je token pro úpravy načten z prvku wsEditToken relace PHP, pokud takový prvek existuje. Jinak se vygeneruje náhodný řetězec a uloží se do tohoto prvku.

To, co je ve skutečnosti vloženo do webové stránky, není samotný prvek wsEditToken. Tento prvek je spíše zřetězen k salt, což je řetězec, který závisí na konkrétní akci a stránce. Výsledný řetězec je pak MD5-hash. To je to, co je součástí webové stránky. Když uživatel skutečně požaduje akci, je tento řetězec odeslán zpět na server prostřednictvím parametru HTTP. Server pak může zkontrolovat správnost tohoto parametru: Zopakuje postup použitý k jeho vygenerování z PHP relace a zkontroluje, zda se výsledek shoduje s parametrem.

Platnost

Token úprav vrácený serverem lze opakovaně použít pro různé operace úprav. Token je platný pouze po určitou dobu. Volání API se zastaralým tokenem vrátí chybu badtoken. V tomto případě je nutné před opakováním operace získat nový token pro úpravy ze serveru.

Zdrojový kód

Editační tokeny jsou řešeny především ve zdrojovém souboru User.php a to zejména následujícími metodami.

getEditToken(salt)
vrátí MD5 hash zřetězení prvku wpEditToken relace PHP se salt. Pokud takový prvek v relaci PHP neexistuje, vygeneruje se náhodný prvek. Viz getEditToken funkce v úložišti.
matchEditToken(token, salt)
zkontroluje, zda je jeho první argument platným tokenem úprav s ohledem na salt. To se provádí opakováním procedury generování a následným porovnáním výsledku s prvním argumentem. Konkrétně tato funkce volá editToken(salt) a poté porovnává výsledek s prvním argumentem;

Salt

Výchozí salt je prázdný řetězec. Většina akcí používá tuto výchozí hodnotu. V důsledku toho lze řetězec tokenu úprav přijatý ze serveru k provedení počáteční akce na stránce použít také k provedení dalších akcí na jiných stránkách. Protože je však token pro úpravy uložen v relaci PHP, lze jej používat pouze tehdy, pokud je relace udržována na serveru a klient má odpovídající cookie tokenu relace (např. soubor cookie enwiki_session).

Hash editačního tokenu vygenerovaný pomocí salt lze použít k provádění dalších akcí pouze v případě, že salt používaný serverem i klientem je stejný. Z toho tedy vyplývá, že pokud je salt vložen pouze do stránky, kde se provádí počáteční akce, pak stejný hash editačního tokenu nelze použít k povolení akcí na dalších stránkách.

Akce, které nepoužívají výchozí prázdný salt, jsou:
rollback
salt je název článku (včetně předpony jmenného prostoru) spojený se jménem uživatele, jehož úpravy mají být vráceny;
odstranění staré verze obrázku
salt je parametr oldimage (při odstraňování všech verzí je tento parametr prázdný řetězec, který je také výchozí hodnotou salt);
Special:UserRights
salt je uživatelské jméno uživatele, jehož vlastnosti mají být změněny;
Special:Watchlist/clear
salt je řetězec 'clearwatchlist'

Přípona tokenu úprav

Upravovací tokeny končí na +\, aby se zabránilo úpravám poškozených proxy: Proxy, které neumí správně zpracovat zpětné lomítko nebo znaménko plus, obvykle také pokazí značkovací kód wiki.

Načítání na straně klienta

Ve verzi 1.18 a vyšší nepotřebujete získávat token úprav pomocí AJAXu. Je k dispozici jako mw.user.tokens.get( 'csrfToken' ). Všimněte si, že musíte mít definovaný mediawiki.user jako závislost ResourceLoader pro váš modul. Doporučuje se použít pomocnou metodu mw.api.postWithToken(), která se automaticky postará o opakování, pokud od načtení webové stránky vypršela platnost tokenu.

Související odkazy