Rozšíření:AbuseFilter

From mediawiki.org
This page is a translated version of the page Extension:AbuseFilter and the translation is 100% complete.
Toto rozšíření je součástí MediaWiki verze MediaWiki 1.38 a vyšších. To znamená, že jej nemusíte stahovat samostatně. Musíte se nicméně stále řídit pokyny k jeho použití.
Základní informace k tomuto rozšíření MediaWiki
OOjs UI icon advanced-invert.svg
AbuseFilter
Stav rozšíření: stabilní
AbuseFilter-Management.png
Zavádění Uživatelská aktivita , Speciální stránka , API
Popis Umožňuje umístit na aktivitu wiki specifická omezení založená na chování
Napsal(i)
Zásady kompatibility Vydání snímků následuje MediaWiki. Hlavní vývojová větev není zpětně kompatibilní.
MediaWiki >= 1.38.0
Změny v databázi dělá
Composer mediawiki/abuse-filter
Tabulky abuse_filter
abuse_filter_action
abuse_filter_history
abuse_filter_log
Licence GNU General Public License 2.0 nebo pozdější
Zdrojový kód
  • $wgAbuseFilterConditionLimit
  • $wgAbuseFilterRangeBlockSize
  • $wgAbuseFilterAnonBlockDuration
  • $wgAbuseFilterLogIPMaxAge
  • $wgAbuseFilterCentralDB
  • $wgAbuseFilterDefaultWarningMessage
  • $wgAbuseFilterEmergencyDisableAge
  • $wgAbuseFilterActionRestrictions
  • $wgAbuseFilterActions
  • $wgAbuseFilterLogIP
  • $wgAbuseFilterPrivateDetailsForceReason
  • $wgAbuseFilterEmergencyDisableCount
  • $wgAbuseFilterLogPrivateDetailsAccess
  • $wgAbuseFilterSlowFilterRuntimeLimit
  • $wgAbuseFilterEmergencyDisableThreshold
  • $wgAbuseFilterLocallyDisabledGlobalActions
  • $wgAbuseFilterBlockDuration
  • $wgAbuseFilterDefaultDisallowMessage
  • $wgAbuseFilterValidGroups
  • $wgAbuseFilterNotificationsPrivate
  • $wgAbuseFilterBlockAutopromoteDuration
  • $wgAbuseFilterIsCentral
  • $wgAbuseFilterNotifications
Přeložte rozšíření AbuseFilter, používá-li lokalizaci z translatewiki.net
Problémy Otevřené úkoly · Nahlásit chybu
Coolest Tool Award 2020 square logo.svg

AbuseFilter

2020 Coolest Tool
Award Winner

in the category
Quality


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žce extensions/.
  • 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.)
  • Následující kód přidejte na konec vašeho souboru LocalSettings.php :
    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.
  • Yes Dokončené – Přejděte na stránku Special:Version vaší wiki a zkontrolujte, zda bylo rozšíření úspěšně nainstalováno.


Při instalaci z Git mějte na paměti, že toto rozšíření vyžaduje Composer .

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
abusefilter-modify Vytváření nebo upravování filtrů zneužití Requires the abusefilter-view right sysop
abusefilter-view Prohlížení filtrů zneužití *
abusefilter-log Prohlížení protokolu zneužití *
abusefilter-log-detail Prohlížení podrobností v protokolu zneužití Requires the abusefilter-log right sysop
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
abusefilter-modify-restricted Upravování filtrů zneužití s omezenými opatřeními Requires the abusefilter-view right sysop
abusefilter-modify-global Vytváření a editace globálních filtrů zneužití Requires the abusefilter-view right
abusefilter-revert Revertování všech změn provedených vybraným filtrem zneužití sysop
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
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
abusefilter-hide-log Skrývání záznamů v protokolu zneužití Requires the abusefilter-log right suppress
abusefilter-hidden-log Prohlížení skrytých záznamů v protokolu zneužití Requires the abusefilter-log right suppress
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

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;
Filtry označené jako soukromé uvidí pouze uživatelé s oprávněním abusefilter-modify nebo abusefilter-view-private.

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
]
$wgAbuseFilterParserClass
'AbuseFilterParser'
Název třídy analyzátoru AbuseFilter.
$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
$wgAbuseFilterNotificationsPrivate
false
Zapne upozornění u soukromých filtrů.
$wgAbuseFilterCentralDB
null
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
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.
$wgAbuseFilterCustomActionsHandlers
[]
Funkce zpětného volání pro vlastní akce. (zastaralo od 1.36) Místo toho použijte háček AbuseFilterCustomActions.
$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ů
$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'.
$wgAbuseFilterLogIP
true
Zda zahrnout IP adresu do protokolu zneužívání

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.
  • $wgAbuseFilterProfileActionsCap - Maximální počet nedávných akcí, které se mají započítat do hranice. Všimněte si, že každá akce zvyšuje čítač, a jakmile tento čítač dosáhne této nakonfigurované hodnoty, tento čítač a počet nedávných akcí, které odpovídají všem filtrům, jsou resetovány na 0.

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.

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ýčet
  • abfendid - ID filtru, u kterého se má zastavit výčet
  • abfdir - 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ů seznamu
  • abfprop - 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

Seznam filtrů nesoukromého zneužití

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ávat
  • aflend - Časové razítko, ve kterém se má přestat vypočítávat
  • afldir - 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 filtru
  • afllimit - Maximální počet filtrů seznamu
  • aflprop - Jaké vlastnosti získat: (ids|filter|user|ip|title|action|details|result|timestamp|hidden|revid|wiki)
Příklad

Seznam případů, kdy byl filtr zneužití spuštěn v reakci na akce uživatele "SineBot"

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';, kde variable_name je název proměnné a i18n-key je fragment klíče i18n. Celý klíč bude abusefilter-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édnout global_user_groups CentralAuth.

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