Rozšíření:AbuseFilter
AbuseFilter Stav rozšíření: stabilní |
|
---|---|
Implementace | Uživatelská aktivita , Speciální stránka , API |
Popis | Umožňuje umístit na aktivitu wiki specifická omezení založená na chování |
Autoři |
|
Zásady kompatibility | Vydání snímků současně s MediaWiki. Hlavní vývojová větev není zpětně kompatibilní. |
Změny v databázi | Ano |
Composer | mediawiki/abuse-filter |
Tabulky | abuse_filter abuse_filter_action abuse_filter_history abuse_filter_log |
Licence | GNU General Public License 2.0 nebo novější |
Stáhnout | |
|
|
|
|
|
|
|
|
Čtvrtletní stahování | 125 (Ranked 42nd) |
Veřejné wiki používající rozšíření | 2,939 (Ranked 186th) |
Přeložte rozšíření AbuseFilter, používá-li lokalizaci z translatewiki.net | |
Problémy | Otevřené úkoly · Nahlásit chybu |
Rozšíření AbuseFilter umožňuje uživatelům s rozšířenými právy nastavovat konkrétní akce, které mají být provedeny, pokud akce uživatelů, jako jsou úpravy, splňují určitá kritéria.
Lze například vytvořit filtr, který zabrání neregistrovaným uživatelům přidávat externí odkazy nebo zablokuje uživatele, který odstraní více než 2000 znaků.
Instalace
- Stáhněte soubor/y a vložte je do adresáře pojmenovaného
AbuseFilter
ve vaší složceextensions/
.
Vývojáři a přispěvatelé kódu by si místo toho měli nainstalovat rozšíření from Git pomocí:cd extensions/
git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/AbuseFilter - Při instalaci z Gitu spusťte Composer pro instalaci závislostí PHP zadáním
composer install --no-dev
v adresáři rozšíření. (Vyskytnou-li se nějaké komplikace, podívejte se na úkol T173141.) - Na konec vašeho souboru LocalSettings.php přidejte následující kód:
wfLoadExtension( 'AbuseFilter' );
- Spusťte aktualizační skript, který automaticky provede všechny nezbytné databázové změny, jaké rozšíření vyžaduje.
- Vyžaduje nastavení v konfiguračním souboru.
- Dokončeno – Přejděte na stránku Special:Version vaší wiki a zkontrolujte, zda bylo rozšíření úspěšně nainstalováno.
Takže po instalaci z Git přejděte do adresáře obsahujícího příponu, např. "../extensions/AbuseFilter/" a spustit composer install --no-dev
, nebo při aktualizaci: composer update --no-dev
.
Alternativně a nejlépe přidejte řádek "extensions/AbuseFilter/composer.json"
do souboru "composer.local.json" v kořenovém adresáři vaší wiki, jako např.
{
"extra": {
"merge-plugin": {
"include": [
"extensions/AbuseFilter/composer.json"
]
}
}
}
Konfigurace
Uživatelská práva
Jakmile jste naistalovali rozšíření, musíte nastavit uživatelská práva v "LocalSettings.php".
Správně | Popis | Notes | User groups that have this right by default | Versions |
---|---|---|---|---|
abusefilter-modify | Vytváření nebo upravování filtrů zneužití | Requires the abusefilter-view right
|
sysop | 1.19+ |
abusefilter-view | Prohlížení filtrů zneužití | * | 1.19+ | |
abusefilter-log | Prohlížení protokolu zneužití | * | 1.19+ | |
abusefilter-log-detail | Prohlížení podrobností v protokolu zneužití | Requires the abusefilter-log right
|
sysop | 1.19+ |
abusefilter-privatedetails | Prohlížení tajných údajů v protokolu zneužití | Prior to 1.34 this right was named abusefilter-private - Requires the abusefilter-log-detail right
|
— | 1.19+ |
abusefilter-modify-restricted | Upravování filtrů zneužití s omezenými opatřeními | Requires the abusefilter-modify right
|
sysop | 1.19+ |
abusefilter-revert | Revertování všech změn provedených vybraným filtrem zneužití | sysop | 1.19+ | |
abusefilter-view-private | Prohlížení filtrů zneužití označených jako tajné | Requires the abusefilter-view right (not needed if the group already has the abusefilter-modify right)
|
sysop | 1.19+ |
abusefilter-hide-log | Skrývání záznamů v protokolu zneužití | Requires the abusefilter-log right
|
suppress | 1.19+ |
abusefilter-hidden-log | Prohlížení skrytých záznamů v protokolu zneužití | Requires the abusefilter-log right
|
suppress | 1.19+ |
abusefilter-log-private | Prohlížení protokolovacích záznamů filtrů zneužití označených jako tajné | Requires the abusefilter-log right (not needed if the group already has the abusefilter-modify or abusefilter-view-private rights)
|
sysop | 1.20+ |
abusefilter-modify-global | Vytváření a editace globálních filtrů zneužití | Requires the abusefilter-modify right
|
— | 1.21+ |
abusefilter-privatedetails-log | Prohlížení záznamů přístupu k soukromým detailům filtrů zneužití | Prior to 1.34 this right was named abusefilter-private-log
|
— | 1.31+ |
abusefilter-modify-blocked-external-domains | Vytvořit nebo upravit seznam externích domén, jejichž odkazování je blokováno | sysop | 1.41+ | |
abusefilter-bypass-blocked-external-domains | Obejít seznam blokovaných externích domén | Requires the edit right
|
bot | 1.41+ |
abusefilter-access-protected-vars | View and create filters that use protected variables | sysop | 1.43+ | |
abusefilter-protected-vars-log | View logs related to accessing protected variable values | sysop | 1.43+ |
Například následující ukázková konfigurace by umožnila sysopům dělat vše, co chtějí s AbuseFilter, a všem prohlížet protokol a vidět nastavení veřejného filtru:
$wgGroupPermissions['sysop']['abusefilter-modify'] = true;
$wgGroupPermissions['*']['abusefilter-log-detail'] = true;
$wgGroupPermissions['*']['abusefilter-view'] = true;
$wgGroupPermissions['*']['abusefilter-log'] = true;
$wgGroupPermissions['sysop']['abusefilter-privatedetails'] = true;
$wgGroupPermissions['sysop']['abusefilter-modify-restricted'] = true;
$wgGroupPermissions['sysop']['abusefilter-revert'] = true;
$wgGroupPermissions['sysop']['abusefilter-access-protected-vars'] = true;
$wgGroupPermissions['sysop']['abusefilter-protected-vars-log'] = true;
abusefilter-access-protected-vars
permission. Logs pertaining to these filters can only be viewed by users with the abusefilter-protected-vars-log
permission. For more information, see Rules format .
Parametry
Jméno proměnné | Výchozí hodnota | Popis |
---|---|---|
$wgAbuseFilterActions
|
[
'throttle' => true,
'warn' => true,
'disallow' => true,
'blockautopromote' => true,
'block' => true,
'rangeblock' => false,
'degroup' => false,
'tag' => true
]
|
Akce, které mohou být provedeny filtry proti zneužití. Při přidávání nové akce zkontrolujte, zda je omezena v $wgAbuseFilterActionRestrictions , a pokud ano, nezapomeňte přidat právo abusefilter-modify-restricted do příslušných skupin uživatelů.
|
$wgAbuseFilterConditionLimit
|
1000
|
Maximální počet 'podmínek', které lze použít při každém spuštění filtrů proti změně. (Složitější filtry vyžadují více 'podmínek'). |
$wgAbuseFilterValidGroups
|
[
'default'
]
|
Seznam filtrů "skupin" lze rozdělit na. Ve výchozím nastavení existuje pouze jedna skupina. Další rozšíření mohou přidat další skupiny. |
$wgAbuseFilterEmergencyDisableThreshold
|
[
'default' => 0.05
]
|
Deaktivujte filtr, pokud odpovídal více než 2 úpravám, které tvoří více než 5 % akcí, které byly zkontrolovány proti skupině filtru ve "sledovaném" období (nejvýše jeden den), pokud nebyl filtr změněn za posledních 86 400 sekund (jeden den). Viz nouzové omezení. |
$wgAbuseFilterEmergencyDisableCount
|
[
'default' => 2
]
| |
$wgAbuseFilterEmergencyDisableAge
|
[
'default' => 86400
]
| |
$wgAbuseFilterActionRestrictions
|
[
"throttle" => false,
"warn" => false,
"disallow" => false,
"blockautopromote" => true,
"block" => true,
"rangeblock" => true,
"degroup" => true,
"tag" => false
]
|
Uživatelé musí mít uživatelské právo "abusefilter-modify-restricted" a také "abusefilter-modify", aby mohli vytvářet nebo upravovat filtry, které tyto akce provádějí. |
$wgAbuseFilterNotifications
|
false
|
Umožňuje nakonfigurovat rozšíření tak, aby zasílalo oznámení o zásahu do Special:RecentChanges nebo UDP. Dostupné možnosti: rc, udp, rcandudp
Pro odeslání změn filtrů zneužití do Special:RecentChanges použijte
unset($wgLogRestrictions['abusefilter']); . |
$wgAbuseFilterNotificationsPrivate
|
false
|
Zapne upozornění u soukromých filtrů. |
$wgAbuseFilterCentralDB
|
null
|
MW 1.41+ Název databáze, ve které budou uloženy globální filtry zneužití (podporováno pouze v nejnovější vývojové verzi). Vyžaduje nainstalovaný CentralAuth, jinak se globální filtry na wikifarmě rozbijí. |
$wgAbuseFilterIsCentral
|
false
|
MW 1.41+ Nastavte tuto proměnnou na true pro wiki, kde jsou uloženy globální AbuseFilters (podporováno pouze v nejnovější, vývojové verzi). Vyžaduje nainstalovaný CentralAuth, jinak se globální filtry na wikifarmě rozbijí. |
$wgAbuseFilterLocallyDisabledGlobalActions
|
[
"throttle" => false,
"warn" => false,
"disallow" => false,
"blockautopromote" => false,
"block" => false,
"rangeblock" => false,
"degroup" => false,
"tag" => false
]
|
Zakázat centralizovaným filtrům provádět akce nastavené v této proměnné jako true. |
$wgAbuseFilterBlockDuration
|
'indefinite'
|
Délka trvání zablokování, provedených Filterem proti zneužití.
od 1.31.0-wmf.25 lze pro každý jednotlivý filtr zadat trvání bloku a tuto proměnnou přepíše. Tato proměnná se používá pouze při povolení bloku za účelem předvolby výchozí doby trvání.
|
$wgAbuseFilterAnonBlockDuration
|
null
|
Trvání blokování provedené AbuseFilter na uživatele, kteří nejsou přihlášeni. Hodnota $wgAbuseFilterBlockDuration bude použita, pokud není nastavena.
od 1.31.0-wmf.25 lze pro každý jednotlivý filtr zadat trvání bloku a tuto proměnnou přepíše. Tato proměnná se používá pouze při povolení bloku za účelem předvolby výchozí doby trvání.
|
$wgAbuseFilterBlockAutopromoteDuration
|
5
|
Doba ve dnech, po kterou je automatická propagace uživatelů blokována filtry. |
$wgAbuseFilterDefaultWarningMessage
|
[
'default' => 'abusefilter-warning'
]
|
Výchozí varovné zprávy pro každou skupinu filtrů |
$wgAbuseFilterDefaultDisallowMessage
|
[
'default' => 'abusefilter-disallowed'
]
|
Výchozí zakázat zprávy, na skupinu filtrů |
$wgAbuseFilterLogIP
|
true
|
Zda zahrnout IP adresu do protokolu zneužívání |
$wgAbuseFilterLogIPMaxAge
|
3 * 30 * 24 * 3600
|
Stáří použité jako mezní hodnota při čištění starých dat protokolu IP. Výchozí nastavení je 3 měsíce. Používá se skriptem údržby purgeOldLogIPData.php. |
$wgAbuseFilterProfileActionsCap
|
10000
|
Počet akcí, které určují, kdy se mají resetovat statistiky profilování. |
$wgAbuseFilterLogPrivateDetailsAccess
|
false
|
Zda je protokolován přístup k soukromým informacím z položky protokolu filtru. |
$wgAbuseFilterPrivateDetailsForceReason
|
false
|
Zda jsou uživatelé nuceni poskytnout důvod pro přístup k soukromým informacím ze záznamu protokolu filtru. |
$wgAbuseFilterSlowFilterRuntimeLimit
|
500
|
Doba běhu v milisekundách před filtrem je považována za pomalou. |
$wgAbuseFilterRangeBlockSize
|
[
'IPv4' => '16',
'IPv6' => '19',
]
|
Velikost rozsahu blokovaného akcí 'rangeblock'. |
$wgAbuseFilterProtectedVariables
|
[ "user_unnamed_ip" ]
|
Array of variables that are be considered protected (limited access) and require the abusefilter-access-protected-vars right to use/view.
|
Nouzové omezení
AbuseFilter přichází s funkcí, která automaticky omezuje (vypíná) filtry, které byly nedávno upraveny a odpovídají určitému prahu posledních akcí.
To se provádí, aby se zabránilo škodlivým úpravám na filtrech, které zablokují každého uživatele, který provádí akci na wiki nebo podobně.
Podmínka pro deaktivaci filtru závisí na těchto proměnných:
$wgAbuseFilterEmergencyDisableThreshold
- Procento akcí z celkového počtu akcí ve sledovaném období.$wgAbuseFilterEmergencyDisableCount
- Počet shod filtru ve sledovaném období.$wgAbuseFilterEmergencyDisableAge
- Je třeba vzít v úvahu stáří filtru. Pokud je poslední úprava filtru starší než tento počet sekund, filtr nebude omezen, pokud již není omezen.
Omezené filtry lze identifikovat v seznamu filtrů (Special:AbuseFilter) se stavem Zapnutý, omezený. Omezení probíhá potichu a není možné zjistit, kdy byl filtr omezen.
Když je filtr omezen, neprovádí žádnou nebezpečnou akci (akce obvykle omezené na speciální práva, jako je blokování uživatele nebo jeho odstranění ze skupin, řízené $wgAbuseFilterActionRestrictions), a jsou povoleny pouze "bezpečné" akce (ty, které mohou varovat nebo zabránit probíhající akci). Omezené filtry se nepovolí automaticky. Chcete-li zakázat omezení, musíte upravit filtr. Všimněte si, že musíte skutečně něco změnit z filtru: Stačí změnit něco z poznámek filtru.
Všimněte si, že úprava filtru aktualizuje jeho stáří a může způsobit jeho deaktivaci, pokud znovu dosáhne podmínek pro omezení během krátké doby od poslední úpravy, což vede k nepoužitelnému filtru, pokud vaše wiki obsahuje více úprav zneužití než legitimních.
Vytváření a správa filtrů
Jakmile bylo rozšíření nainstalováno, filtry mohou být zakládány/testovány/měněny/mazány a záznamy mohou být zpřístupněny z ovládací stránky Special:AbuseFilter.
- Formát pravidel – Základy psaní filtru
- Akce
- Globální pravidla
- Průvodce optimalizací použití limitu podmínek
- Chcete-li importovat filtry z Wikipedie: Až nainstalujete rozšíření, přejděte na w:Special:AbuseFilter, vyberte filtr (řekněme w:Special:AbuseFilter/3) a poté klikněte na "Exportovat tento filtr na jinou wiki", zkopírujte text, přejděte na "Special:AbuseFilter/import" na vaší wiki, vložte text.
- m:Small wiki toolkits/Starter kit/AbuseFilter - Průvodce pro malé wiki komunity na metawiki
API
AbuseFilter přidává dva moduly seznamu API, jeden pro podrobnosti o filtrech zneužití ("abusefilters") a jeden pro protokol zneužití, protože je oddělený od ostatních protokolů MediaWiki ("abuselog"). Pomocí API není možné vytvářet nebo upravovat filtry zneužití.
list = abusefilters
Vypíše informace o filtrech
- Parametry
abfstartid
- ID filtru, od kterého se má začít výčetabfendid
- ID filtru, u kterého se má zastavit výčetabfdir
- Směr, kterým se má provést výčet (starší, novější)abfshow
- Zobrazit pouze filtry, které splňují tato kritéria (enabled|!enabled|deleted|!deleted|private|!private (povoleno|!povoleno|smazáno|!smazáno|soukromé|!soukromé))abflimit
- Maximální počet filtrů seznamuabfprop
- Které vlastnosti získat (id|description|pattern|actions|hits|comments|lasteditor|lastedittime|status|private (id|popis|vzor|akce|požadavky|komentáře|lasteditor|lastedittime|stav|soukromé))
Pokud jsou filtry soukromé, budou některé vlastnosti zadané pomocí abfprop
chybět, pokud nemáte příslušná uživatelská práva.
- Příklady
Výsledek |
---|
{
"batchcomplete": "",
"continue": {
"abfstartid": 18,
"continue": "-||"
},
"query": {
"abusefilters": [
{
"id": 1,
"hits": 41430
},
{
"id": 3,
"hits": 957485
},
{
"id": 5,
"hits": 5931
},
{
"id": 6,
"hits": 19
},
{
"id": 8,
"hits": 7
},
{
"id": 9,
"hits": 41354
},
{
"id": 11,
"hits": 132971
},
{
"id": 12,
"hits": 139693
},
{
"id": 14,
"hits": 63
},
{
"id": 15,
"hits": 15
}
]
}
}
|
list = abuselog
Vypíše případy, kdy akce spustily filtr zneužití.
- Parametry
aflstart
- Časové razítko, od kterého se má začít vypočítávataflend
- Časové razítko, ve kterém se má přestat vypočítávatafldir
- Směr, kterým se má provést výčet (starší, novější)afluser
- Zobrazit pouze záznamy, u kterých se o akci pokusil daný uživatel nebo IP adresa.afltitle
- Zobrazit pouze záznamy, kde se akce týkala dané stránky.aflfilter
- Zobrazit pouze záznamy, které spustily dané ID filtruafllimit
- Maximální počet filtrů seznamuaflprop
- Jaké vlastnosti získat: (ids|filter|user|ip|title|action|details|result|timestamp|hidden|revid|wiki)
- Příklad
Výsledek |
---|
{
"batchcomplete": "",
"continue": {
"aflstart": "2018-03-06T02:34:18Z",
"continue": "-||"
},
"query": {
"abuselog": [
{
"id": 27219261,
"filter_id": "1073"
},
{
"id": 26938051,
"filter_id": ""
},
{
"id": 23388942,
"filter_id": "1"
},
{
"id": 22044912,
"filter_id": ""
},
{
"id": 22032235,
"filter_id": ""
},
{
"id": 22032196,
"filter_id": ""
},
{
"id": 21983882,
"filter_id": ""
},
{
"id": 20594818,
"filter_id": "904"
},
{
"id": 20593489,
"filter_id": "904"
},
{
"id": 20590442,
"filter_id": "904"
}
]
}
}
|
Možné chyby
- Někteří uživatelé mohou zaznamenat, že vytváření nových filtrů nebo úprava starých filtrů selže a uživatel bude pouze přesměrován na původní stránku. Pokud Wiki používá certifikáty SSL, může být tato chyba způsobena hodnotou
$wgServer
, která může používat "http://" místo "https://". Indikací této chyby bude, že prohlížeč zobrazí upozornění https pro stránky Special:AbuseFilter. (Topic:T23dyyih0ofjada5)
Integrace s dalšími rozšířeními
AbuseFilter můžete integrovat s jiným rozšířením různými způsoby.
Přidání proměnných pro filtrování
Je možné přidat nové proměnné, které budou použity ve filtrech zneužití. Seznam příkladů je k dispozici . Chcete-li to provést, měli byste:
- Přidat handler pro háček AbuseFilter-builder . Chcete-li přidat proměnnou, měli byste použít
$builder['vars']['variable_name'] = 'i18n-key';
, kdevariable_name
je název proměnné ai18n-key
je fragment klíče i18n. Celý klíč budeabusefilter-edit-builder-vars-{$your_key}
. - Přidat zprávy i18n, které jste vybrali v předchozím bodě.
- Vybrat obslužný program háčku, kde se bude proměnná používat. V závislosti na vašem případu použití můžete:
- Použít háček AbuseFilter-generateTitleVars . Toto je specificky myšleno pro proměnné související se stránkou.
- Použít háček AbuseFilter-generateUserVars . Toto je specificky myšleno pro proměnné související s uživatelem.
- Použít háček AbuseFilter-generateGenericVars . Toto je pro proměnné, které nejsou vázány na konkrétní stránku nebo uživatele.
- Použít háček AbuseFilterAlterVariables . To je o něco flexibilnější než ostatní háčky, ale má to nevýhodu: Vaše proměnná nebude k dispozici při zkoumání minulých položek RecentChanges. Pokud chcete tuto funkci implementovat (a doporučuje se to udělat), měli byste použít jeden z výše uvedených háčků a použít jeho třetí parametr (
$RCRow
).
- Uvnitř obslužného programu háčku existují dva způsoby, jak přidat proměnnou:
- "Přímou" cestou je volání
$vars->setVar( 'var_name', var_value );
. To je ideální pouze tehdy, když je výpočet hodnoty snadný a rychlý: Hodnota se vypočítá, i když ji nebude používat žádný aktivní filtr. - "Líný" způsob je volání
$vars->setLazyLoadVar( 'var_name', 'method_name', $params );
. Zde je 'method_name' (jedinečný) identifikátor, který bude použit k výpočtu proměnné (doporučuje se před ním uvést název vašeho rozšíření). Pro registraci metody byste měli přidat handler pro háček AbuseFilter-computeVariable . U něj byste měli zkontrolovat, zda předaná $method odpovídá vašemu 'method_name', a pokud ano, vypočítat proměnnou. A konečně, $params je pole parametrů, které budete potřebovat k výpočtu proměnné. Ty jsou předány obslužnému háčku computeVariable. Jako příklad si můžete prohlédnoutglobal_user_groups
CentralAuth.
- "Přímou" cestou je volání
Přidání vlastních akcí
Můžete přidat vlastní obslužné nástroje akcí, takže každý filtr může provádět další akce. Chcete-li to provést, vyberte název akce (od této chvíle 'my-action' (moje akce)) a poté:
- Vytvořte třídu s názvem např. MyAction, což by mělo rozšířit \MediaWiki\Extension\AbuseFilter\Consequence, což může také implementovat HookAborterConsequence nebo ConsequencesDisablerConsequence
- Přidejte podporovatele do háčku AbuseFilterCustomActions. Účastník by měl poskytnout zpětné volání, jak je zdokumentováno v dokumentaci háčku, která vrátí instanci třídy vytvořené výše, například:
class MyAction extends \MediaWiki\Extension\AbuseFilter\Consequence {
public function run() {
throw new \Exception( 'Write me' );
}
}
public function onAbuseFilterCustomActions( &$actions ) {
$actions[] = function ( \MediaWiki\Extension\AbuseFilter\Consequence\Parameters $params, array $rawParams ) : MyConsequence {
return new MyAction( $params, $rawParams );
};
}
Pak byste měli přidat následující zprávy i18n. Můžete nahradit 'my_action' např. 'block', abyste viděli, k čemu jsou zprávy:
'abusefilter-edit-action-${my_action}'
'abusefilter-action-${my_action}'
Přidávání skupin pravidel
Můžete také přidat další skupiny pravidel, které lze použít k seskupení existujících filtrů zneužití. Všimněte si, že v současné době může být každý filtr pouze v jedné skupině (T116642). V současnosti je jediným známým uživatelem této funkce Rozšíření:StructuredDiscussions . Chcete-li to provést, měli byste:
- Připojte název skupiny k
$wgAbuseFilterValidGroups
- Přidejte nějaký kód pro spuštění filtrů s vaší skupinou. Všimněte si, že AbuseFilter to sám o sobě neudělá. Chcete-li to provést, měli byste vytvořit objekt
AbuseFilterRunner
a předat název vaší skupiny.
Související odkazy
- Několik wiki WMF, kde je povolen (a s jakou konfigurací)
Toto rozšíření se používá na jednom nebo více projektech Wikimedia. Pravděpodobně to znamená, že rozšíření je stabilní a funguje dostatečně dobře, aby jej mohly používat weby s tak vysokou návštěvností. Vyhledejte tento název rozšíření v konfiguračních souborech CommonSettings.php a InitialiseSettings.php Wikimedie, abyste viděli, kde je nainstalováno. Úplný seznam rozšíření nainstalovaných na konkrétní wiki lze vidět na stránce wiki Special:Version. |
Toto rozšíření je zahrnuto v následujících wiki farmách/hostitelích a/nebo balíčcích: Toto není autoritativní seznam. Některé wiki farmy/hostitelé a/nebo balíčky mohou toto rozšíření obsahovat, i když zde nejsou uvedeny. Pro potvrzení se vždy obraťte na své wiki farmy/hostitele nebo balíček. |
- Extensions bundled with MediaWiki 1.38/cs
- Stable extensions/cs
- User activity extensions/cs
- Special page extensions/cs
- API extensions/cs
- Extensions supporting Composer/cs
- GPL licensed extensions/cs
- Extensions in Wikimedia version control/cs
- BeforeCreateEchoEvent extensions/cs
- ChangeTagsListActive extensions/cs
- CheckUserInsertChangesRow extensions/cs
- CheckUserInsertLogEventRow extensions/cs
- CheckUserInsertPrivateEventRow extensions/cs
- ContributionsToolLinks extensions/cs
- EditFilterMergedContent extensions/cs
- GetAutoPromoteGroups extensions/cs
- GetPreferences extensions/cs
- HistoryPageToolLinks extensions/cs
- JsonValidateSave extensions/cs
- ListDefinedTags extensions/cs
- LoadExtensionSchemaUpdates extensions/cs
- PageDelete extensions/cs
- PageSaveComplete extensions/cs
- ParserOutputStashForEdit extensions/cs
- RecentChange save extensions/cs
- SaveUserOptions extensions/cs
- TitleMove extensions/cs
- UndeletePageToolLinks extensions/cs
- UploadStashFile extensions/cs
- UploadVerifyUpload extensions/cs
- UserMergeAccountFields extensions/cs
- GetUserPermissionsErrors extensions/cs
- All extensions/cs
- Extensions requiring Composer with git/cs
- Extensions used on Wikimedia/cs
- Extensions included in Canasta/cs
- Extensions available as Debian packages/cs
- Extensions included in Fandom/cs
- Extensions included in Miraheze/cs
- Extensions included in MyWikis/cs
- Extensions included in ProWiki/cs
- Extensions included in ShoutWiki/cs
- Extensions included in Telepedia/cs
- Extensions included in wiki.gg/cs
- Extensions included in WikiForge/cs
- Spam management extensions/cs