Extension:AbuseFilter/Rules format/cs

Pravidla jsou vlastní jazyk. Jsou formátovány podobně jako podmíněné podmínky v jazyce podobném C/Java/Perlu.

Řetězce

Literál můžete zadat tak, že jej umístíte do jednoduchých nebo dvojitých uvozovek (pro řetězce), nebo jej napíšete tak, jak je (pro čísla s plovoucí desetinnou čárkou i celé číslo). Můžete získat zalomení řádků s \n, znaky tabulátoru s \t a znak uvozovky můžete také escapovat zpětným lomítkem.

Pomocí symbolu + (plus) zřetězí dva znakové řetězce nebo hodnoty dvou proměnných s řetězcem hodnoty.

Příklady
"Toto je řetězec"
'Toto je také řetězec'
'Tento řetězec by neměl\t selhat'
"Tento řetězec\nMá zalomení řádku"
1234
1.234
-123

Uživatelsky definované proměnné

Pro snazší pochopení můžete definovat vlastní proměnné pomocí přiřazovacího symbolu := v řádku (uzavřeném ;) v rámci podmínky. Tyto proměnné mohou používat písmena, podtržítka a čísla (kromě prvního znaku) a nerozlišují malá a velká písmena. Příklad (pro w:Special:AbuseFilter/79):

(
	line1:="(\{\{(r|R)eflist|\{\{(r|R)efs|<references\s?/>|</references\s?>)";
	rcount(line1, removed_lines)
) > (
	rcount(line1, added_lines)
)

Pole

AbuseFilter má podporu pro neasociativní pole, která lze použít jako v následujících příkladech.

Pozor! Pozor: Výrazy jako page_namespace in [14, 15] nemusí fungovat podle očekávání. Tento bude vyhodnocen jako true také v případě, že page_namespace je 1, 4 nebo 5. Další informace a možná řešení naleznete v části T181024.
my_array := [ 5, 6, 7, 10 ];
my_array[0] == 5
length(my_array) == 4
int( my_array ) === 4 // Stejná jako délka
float( my_array ) === 4.0 // Počítá prvky
string(my_array) == "5\n6\n7\n10\n" // Poznámka: Poslední zalomení řádku může být v budoucnu odstraněno
5 in my_array == true
'5' in my_array == true
'5\n6' in my_array == true // Poznámka: Toto je způsobeno tím, jak jsou pole přetypována na řetězec, tj. jejich implodováním pomocí zalomení řádků
1 in my_array == true // Poznámka: K tomu dochází, protože 'in' přenáší argumenty na řetězce, takže 1 je zachycena v '10' a vrací true.
my_array[] := 57; // Tím se přidá prvek na konec pole
my_array === [ 5, 6, 7, 10, 57 ]
my_array[2] := 42; // A to pro změnu prvku v poli
my_array === [ 5, 6, 42, 10, 57 ]

Komentáře

Komentáře můžete zadat pomocí následující syntaxe:

/* Toto je komentář */

Aritmetika

Základní aritmetické symboly můžete použít k aritmetice proměnných a literálů s následující syntaxí:

  • - odečte pravý operand od levého operandu.
  • + přidá pravý operand k levému operandu.
  • * vynásobí levý operand pravým operandem.
  • / vydělí levý operand pravým operandem.
  • ** zvýší levý operand na exponenciální mocninu určenou pravým operandem.
  • % vrátí zbytek daný, když je levý operand dělen pravým operandem.

Typ vráceného výsledku je stejný, jaký by vrátilo PHP, pro které lze nalézt mnoho dokumentace online. Vyčerpávající příklady lze nalézt v tomto testu analyzátoru AF.

Příklad Výsledek
1 + 12
2 * 24
1 / 20.5
9 ** 281
6 % 51

Booleovské operace

Shodovat se můžete tehdy a pouze tehdy, pokud jsou splněny všechny podmínky, jedna z mnoha podmínek nebo jedna a pouze jedna ze všech podmínek.

  • x | y OR vrátí hodnotu true, pokud je splněna jedna nebo více podmínek.
  • x & y AND vrátí hodnotu true, pokud jsou splněny obě podmínky.
  • x ^ y XOR vrátí true, pokud je splněna jedna a pouze jedna ze dvou podmínek.
  • !x NOT vrátí true, pokud podmínka není pravdivá.

Příklady

Kód Výsledek
1 | 1 true
1 | 0 true
0 | 0 false
1 & 1 true
1 & 0 false
0 & 0 false
1 ^ 1 false
1 ^ 0 true
0 ^ 0 false
!1 false
!0 true

Jednoduchá přirovnání

proměnné můžete porovnat s jinými proměnnými a literaly s následujícími syntaxemi:

  • <, > vrátí hodnotu true, pokud je levý operand menší než/větší než pravý operand. Pozor: Operandy jsou přetypovány do řetězců a, stejně jako v PHP, null < jakékoli číslo === true a null > jakékoli číslo === false.
  • <=, >= vrátí hodnotu true, pokud je levý operand menší nebo roven/větší nebo roven pravému operandu. Pozor: Operandy jsou přetypovány do řetězců a, stejně jako v PHP, null <= jakékoli číslo === true a null >= jakékoli číslo === false.
  • == (nebo =), != vr8t9 true, pokud se levý operand rovná/nerovná pravému operandu.
  • ===, !== vrátí true, pokud je levý operand rovný/není se pravý operand A levý operand je stejný/není stejný datový typ pro pravý operand. .
Příklad Výsledek
1 == 2false
1 <= 2true
1 >= 2false
1 != 2true
1 < 2true
1 > 2false
2 = 2true
'' == falsetrue
'' === falsefalse
1 == truetrue
1 === truefalse
['1','2','3'] == ['1','2','3']true
[1,2,3] === [1,2,3]true
['1','2','3'] == [1,2,3]true
['1','2','3'] === [1,2,3]false
[1,1,''] == [true, true, false]true
[] == false & [] == nulltrue
['1'] == '1'false[1]

Vestavěné proměnné

Filtr zneužívání předává různé proměnné podle názvu do analyzátoru. K těmto proměnným lze přistupovat zadáním jejich názvu na místo, kde by fungoval literál. Proměnné přidružené ke každému požadavku můžete zobrazit v protokolu zneužití.

Proměnné z AbuseFilter

Vždy dostupné proměnné

Pozor! Pozor: Uživatelské proměnné jsou vždy k dispozici, kromě jednoho případu: vytvoření účtu, když tvůrce není přihlášen. Všechny proměnné začínající na user_ jsou ovlivněny kromě user_type.
Popis Název Datový typ Poznámky
AkceactionřetězecJedna z následujících: edit, move, createaccount, autocreateaccount, delete, upload[2], stashupload[3]
Unix časové razítko změnytimestampřetězecint(timestamp) vám dává číslo, pomocí kterého můžete vypočítat datum, čas, den v týdnu atd.
Databázový název wikiwiki_nameřetězecNapříklad toto je "enwiki" na anglické Wikipedii a "itwikiquote" na italské Wikiquote.
Kód jazyka wikiwiki_languageřetězecNapříklad toto je "en" na anglické Wikipedii a "it" na italské Wikicitaci. Vícejazyčné wiki jako Commons, Meta a Wikidata se také budou hlásit jako "en".
Počet uživatelových editacíuser_editcountcelé číslo/nulaNull pouze pro neregistrované uživatele.
Uživatelské jméno (IP in case the user is not registered)user_nameřetězec
Pro akce "createaccount" a "autocreateaccount" použijte accountname, chcete-li název vytvářeného účtu.
Pozor! Pozor: Na wiki, kde jsou povoleny dočasné účty, se adresy IP neregistrovaným uživatelům nevrací. Use user_unnamed_ip instead if the IP is needed. More context is available here .
Typ uživatelského účtu ($1)user_typeřetězec Typ uživatele, který bude jeden z ip, temp (pokud uživatel používá dočasný účet), named, external nebo unknown.
Čas, kdy byla ověřena e-mailová adresauser_emailconfirmřetěz/nulaVe formátu: RRRRMMDDHHMMSS. Null, pokud e-mail nebyl potvrzen.
Stáří uživatelského účtuuser_agecelé čísloV sekundách. 0 pro neregistrované uživatele.
Jestli je uživatel zablokovanýuser_blockedbooleanTrue pro zablokované registrované uživatele. Platí také pro úpravy z blokovaných IP adres, i když je editor registrovaným uživatelem, který není blokován. False jinak.
To nerozlišuje mezi částečnými a celowebovými bloky.
Skupiny (včetně implicitních), do kterých uživatel patříuser_groupspole řetězcůPodívejte se na stránku Special:ListGroupRights
Práva, která má uživateluser_rightspole řetězcůPodívejte se na stránku Special:ListGroupRights.
ID stránkyarticle_articleidcelé číslo(zastaralé) Použijte místo toho page_id.
ID stránky (lze zobrazit pomocí odkazu "informace o stránce" v postranním panelu)page_idcelé čísloToto je 0 pro nové stránky, ale je nespolehlivé při kontrole minulých přístupů. Pokud při kontrole minulých požadavků potřebujete přesný výsledek, použijte "page_age == 0" k identifikaci vytvoření nové stránky. (všimněte si však, že je pomalejší.) Tento problém byl opraven v 9369d08, sloučeno 11. září 2023.
Jmenný prostor stránkyarticle_namespacecelé číslo(zastaralé) Místo ní používejte přímo page_namespace.
Jmenný prostor stránkypage_namespacecelé čísloodkazuje na index jmenného prostoru. Zkontrolujte jmenné prostory pomocí výrazů jako "page_namespace == 2" nebo "equals_to_any(page_namespace, 1, 3)"
Stáří stránky (v sekundách)page_agecelé číslopočet sekund od první úpravy (nebo 0 pro nové stránky). To je spolehlivé, ale bývá pomalé. Zvažte použití page_id, pokud nepotřebujete velkou přesnost.
Název stránky (bez jmenného prostoru)article_textřetězec(zastaralé) Místo ní používejte přímo page_title.
Název stránky (bez jmenného prostoru)page_titleřetězec
Úplný název stránkyarticle_prefixedtextřetězec(zastaralé) Místo ní používejte přímo page_prefixedtitle.
Úplný název stránkypage_prefixedtitleřetězec
Úroveň zamčení stránky pro editaciarticle_restrictions_editřetězec(zastaralé) Místo ní používejte přímo page_restrictions_edit.
Úroveň zamčení stránky pro editacipage_restrictions_editpole řetězců
Úroveň zamčení stránky pro přesunarticle_restrictions_moveřetězec(zastaralé) Místo ní používejte přímo page_restrictions_move.
Úroveň zamčení stránky pro přesunpage_restrictions_movepole řetězců
Úroveň zamčení souboru pro načteníarticle_restrictions_uploadřetězec(zastaralé) Místo ní používejte přímo page_restrictions_upload.
Úroveň zamčení souboru pro načtenípage_restrictions_uploadpole řetězců
Úroveň zamčení stránky pro založeníarticle_restrictions_createřetězec(zastaralé) Místo ní používejte přímo page_restrictions_create.
Úroveň zamčení stránky pro založenípage_restrictions_createpole řetězců
Posledních deset uživatelů, kteří editovali příslušnou stránkuarticle_recent_contributorsarray of strings(zastaralé) Místo ní používejte přímo page_recent_contributors.
Posledních deset uživatelů, kteří editovali příslušnou stránkupage_recent_contributorspole řetězcůTo bývá pomalé (viz #Výkon). Pokuste se dát podmínky s vyšší pravděpodobností vyhodnocení na false před tuto, abyste se vyhnuli zbytečnému spouštění dotazu. Tato hodnota je prázdné pole pro vytváření stránek. Výsledné pole bude mít každý název pouze jednou, bez ohledu na to, kolikrát přispěly. Skenuje pouze posledních 100 revizí
První autor této stránkyarticle_first_contributorřetězec(zastaralé) Místo ní používejte přímo page_first_contributor.
První autor této stránkypage_first_contributorřetězecTo bývá pomalé (viz #Výkon).[4] Pokuste se dát podmínky s vyšší pravděpodobností vyhodnocení na false před tuto, abyste se vyhnuli zbytečnému spouštění dotazu.

Proměnné dostupné pro některé akce

Pozor! Pozor: Vždy zkontrolujte, zda jsou proměnné, které chcete použít, dostupné pro aktuální filtrovanou akci, např. pomocí proměnné action. Pokud tak neučiníte (například pomocí accountname pro úpravu nebo edit_delta pro smazání), jakýkoli kód používající danou proměnnou vrátí hodnotu false.
Upravené proměnné nejsou při kontrole dříve nahraných souborů k dispozici. (T345896)
Popis Název Datový typ Poznámky
Shrnutí editace/zdůvodněnísummaryřetězecSouhrny automaticky vytvořené MediaWiki ("Nová sekce", "Vyprázdněná stránka" atd.) jsou vytvořeny poté, co filtr zkontroluje úpravy, takže se ve skutečnosti nikdy nezachytí, i když debugger ukazuje, že by měly. Proměnná obsahuje vše, co uživatel vidí v okně souhrnu úprav, které může obsahovat předinstalované názvy sekcí MediaWiki.[5]
Zda byla editace označena jako malá (už se nepoužívá)minor_editřetězecZakázáno a nastaveno na hodnotu false pro všechny položky v letech 2016 až 2018.[6]
Původní zdrojový text stránky před editacíold_wikitextřetězecTato proměnná může být velmi velká. Pokud je to možné, zvažte použití removed_lines ke zlepšení výkonu.
Nový zdrojový text stránky po editacinew_wikitextřetězecTato proměnná může být velmi velká. Pokud je to možné, zvažte použití added_lines ke zlepšení výkonu.
Unifikovaný diff změn způsobených editacíedit_diffřetězec
Unifikovaný rozdíl změn způsobených editací, po transformaci před uloženímedit_diff_pstřetězecTo bývá pomalé (viz #Výkon). Kontrola added_lines a removed_lines je pravděpodobně efektivnější.[7]
Nová velikost stránkynew_sizecelé číslo
Původní velikost stránkyold_sizecelé číslo
Změna velikosti způsobená editacíedit_deltacelé číslo
Řádky přidané při editaci, po transformaci před uloženímadded_lines_pstpole řetězcůPokud je to možné, použijte added_lines, což je efektivnější.
Řádky přidané při editaciadded_linespole řetězcůZahrnuje všechny řádky v konečném rozdílu, které začínají +
Řádky odstraněné při editaciremoved_linespole řetězců
Všechny externí odkazy ve výsledném textuall_linkspole řetězcůTo bývá pomalé (viz #Výkon).
Odkazy na stránce před editacíold_linkspole řetězcůTo bývá pomalé (viz #Výkon).
Všechny externí odkazy přidané při editaciadded_linkspole řetězcůTo bývá pomalé (viz #Výkon). Zvažte nejprve kontrolu proti added_lines, poté zkontrolujte added_links, aby bylo zpomaleno méně úprav. Toto se řídí pravidly MediaWiki pro externí odkazy. Do pole se přidávají pouze jedinečné odkazy. Změna odkazu se bude počítat jako 1 přidaný a 1 odstraněný odkaz.
Všechny externí odkazy odstraněné při editaciremoved_linkspole řetězcůTo bývá pomalé (viz #Výkon). Zvažte nejprve kontrolu proti removed_lines, poté zkontrolujte removed_links, aby bylo zpomaleno méně úprav. Toto se řídí pravidly MediaWiki pro externí odkazy. Do pole se přidávají pouze jedinečné odkazy. Změna odkazu se bude počítat jako 1 přidaný a 1 odstraněný odkaz.
Wikitext nové stránky po transformaci před uloženímnew_pstřetězecTato proměnná může být velmi velká.
Vygenerovaný HTML kód nové verzenew_htmlřetězecTato proměnná může být velmi velká. Pokud je to možné, zvažte použití added_lines ke zlepšení výkonu.
Nový text stránky zbavený formátovánínew_textřetězecTato proměnná může být velmi velká. Pokud je to možné, zvažte použití added_lines ke zlepšení výkonu.
Původní text stránky naformátovaný do HTML (už se nepoužívá)old_htmlřetězecZakázáno z důvodu výkonu.
Původní text stránky bez všech značek (už se nepoužívá)old_textřetězecZakázáno z důvodu výkonu.
Čas od poslední úpravy stránky v sekundách ($1)page_last_edit_agecelé číslo nebo nullnull, když stránka neexistuje
SHA-1 otisk obsahu souborufile_sha1řetězec[2]
Velikost souboru v bajtechfile_sizecelé čísloVelikost souboru v bajtech[2]
Šířka souboru v pixelechfile_widthcelé čísloŠířka v pixelech[2]
Výška souboru v pixelechfile_heightcelé čísloVýška v pixelech[2]
Barevná hloubka souboru v bitech na barevný kanálfile_bits_per_channelcelé čísloPočet bitů na barevný kanál[2]
MIME typ souborufile_mimeřetězecTyp souboru MIME.[2]
Typ obsahu tohoto souborufile_mediatypeřetězecTyp média souboru.[8][2]
ID stránky, na kterou se přesouvámoved_to_articleidcelé číslo(zastaralé) Místo ní používejte přímo moved_to_id.
ID stránky, na kterou se přesouvámoved_to_idcelé číslo
Název, na který se stránka přesouvámoved_to_textřetězec(zastaralé) Místo ní používejte přímo moved_to_title.
Název, na který se stránka přesouvámoved_to_titleřetězec
Úplný název, na který se stránka přesouvámoved_to_prefixedtextřetězec(zastaralé) Místo ní používejte přímo moved_to_prefixedtitle.
Úplný název, na který se stránka přesouvámoved_to_prefixedtitleřetězec
Jmenný prostor, do kterého se přesouvámoved_to_namespacecelé číslo
Stáří stránky, na kterou se přesunuje (v sekundách)moved_to_agecelé číslo
Time since last move destination page edit in seconds ($1)moved_to_last_edit_age celé číslo nebo nullnull, pokud cílová stránka neexistuje
Úroveň zamčení stránky, na kterou se přesouvá, pro editacimoved_to_restrictions_editpole řetězcůStejně jako page_restrictions_edit, ale pro cíl přesunu.
Úroveň zamčení stránky, na kterou se přesouvá, pro přesunmoved_to_restrictions_movepole řetězcůStejně jako page_restrictions_move, ale pro cíl přesunu.
Úroveň zamčení stránky, na kterou se přesouvá, pro načtení souborumoved_to_restrictions_uploadpole řetězcůStejně jako page_restrictions_upload, ale pro cíl přesunu.
Úroveň zamčení stránky, na kterou se přesouvá, pro založení stránkymoved_to_restrictions_createpole řetězcůStejně jako page_restrictions_create, ale pro cíl přesunu.
Posledních deset uživatelů, kteří editovali stránku, na kterou se přesouvámoved_to_recent_contributorspole řetězcůStejně jako page_recent_contributors, ale pro cíl přesunu.
První uživatel, který editoval stránku, na kterou se přesouvámoved_to_first_contributorřetězecStejně jako page_first_contributor, ale pro cíl přesunu.
Původní jmenný prostor přesouvané stránkymoved_from_namespacecelé číslo
Název přesouvané stránkymoved_from_textřetězec(zastaralé) Místo ní používejte přímo moved_from_title.
Název přesouvané stránkymoved_from_titleřetězec
Úplný název přesouvané stránkymoved_from_prefixedtextřetězec(zastaralé) Místo ní používejte přímo moved_from_prefixedtitle.
Úplný název přesouvané stránkymoved_from_prefixedtitleřetězec
ID přesouvané stránkymoved_from_articleidcelé číslo(zastaralé) Místo ní používejte přímo moved_from_id.
ID přesouvané stránkymoved_from_idcelé číslo
Stáří stránky, která se přesunuje (v sekundách)moved_from_agecelé číslo
Time since last move source page edit in seconds ($1)moved_from_last_edit_agecelé číslo
Úroveň zamčení přesouvané stránky pro editacimoved_from_restrictions_editpole řetězcůStejné jako page_restrictions_edit, ale pro stránku, která se přesouvá.
Úroveň zamčení přesouvané stránky pro přesunmoved_from_restrictions_movepole řetězcůStejné jako page_restrictions_move, ale pro stránku, která se přesouvá.
Úroveň zamčení přesouvané stránky pro načtení souborumoved_from_restrictions_uploadpole řetězcůStejné jako page_restrictions_upload, ale pro stránku, která se přesouvá.
Úroveň zamčení přesouvané stránky pro založení stránkymoved_from_restrictions_createpole řetězcůStejné jako page_restrictions_create, ale pro stránku, která se přesouvá.
Posledních deset uživatelů, kteří editovali přesouvanou stránkumoved_from_recent_contributorspole řetězcůStejné jako page_recent_contributors, ale pro stránku, která se přesouvá.
První uživatel, který editoval přesouvanou stránkumoved_from_first_contributorřetězecStejné jako page_first_contributor, ale pro stránku, která se přesouvá.
Uživatelské jméno (při zakládání nového účtu)accountnameřetězec
Obsahový model staré revize old_content_model řetězec Informace o změnách modelu obsahu naleznete v části Nápověda:ChangeContentModel
Obsahový model nové revize new_content_model řetězec Informace o změnách modelu obsahu naleznete v části Nápověda:ChangeContentModel

Chráněné proměnné

Proměnnou lze považovat za chráněnou. Například na wiki s povolenými dočasnými účty jsou IP považovány za PII a přístup k nim musí být omezen. Chráněné proměnné a filtry, které je používají, jsou přístupné pouze správcům s právem abusefilter-access-protected-vars. Použití chráněné proměnné označí filtr také jako chráněný. Filtr následně nelze zrušit, i když již chráněnou proměnnou aktivně nepoužívá, protože jeho historické protokoly zůstanou dostupné.

Protokoly generované chráněnými filtry mohou zobrazit pouze uživatelé s právem abusefilter-protected-vars-log.

Výchozí chráněné proměnné jsou definovány v AbuseFilterProtectedVariables v extension.json.

user_unnamed_ip je null při zkoumání minulých úprav.
Popis Název Datový typ Poznámky
IP adresa uživatelského účtu (pouze odhlášení a dočasné účty) ($1)user_unnamed_ip řetězec IP uživatele pro anonymní uživatele/dočasné účty
Toto vrátí null pro registrované uživatele.
Pokud je nainstalováno rozšíření CheckUser, musí mít uživatel také přístup k IP adresám dočasných účtů.Tento přístup je popsán na adrese Help:Extension:CheckUser#Showing_IPs_for_temporary_accounts.

Proměnné z jiných rozšíření

Většina těchto proměnných je při zkoumání minulých úprav vždy nastavena na hodnotu false a nemusí odrážet jejich skutečnou hodnotu v době, kdy byla úprava provedena. Podívejte se na stránku T102944.
Popis Název Datový typ Hodnoty Přidáno
Globální skupiny, do kterých uživatel patří global_user_groups pole CentralAuth
Globální počet editací uživatele global_user_editcount celé číslo CentralAuth
Global groups that the user is in on account creation ($1) global_account_groups pole Dostupné pouze v případě, že action je createaccount (pak je vždy prázdné) nebo autocreateaccount. CentralAuth
Global edit count of the user on account creation ($1) global_account_editcount celé číslo Dostupné pouze v případě, že action je createaccount (pak je vždy nula) nebo autocreateaccount. CentralAuth
OAuth consumer used to perform this change ($1) oauth_consumer celé číslo OAuth
ID Strukturované diskuse board_articleid celé číslo (zastaralé) Místo ní používejte přímo board_id. StructuredDiscussions
ID Strukturované diskuse board_id celé číslo StructuredDiscussions
Jmenný prostor Strukturované diskuse board_namespace celé číslo odkazuje na index jmenného prostoru StructuredDiscussions
Název (bez jmenného prostoru) strukturovaného diskusního fóra board_text řetězec (zastaralé) Místo ní používejte přímo board_title. StructuredDiscussions
Název (bez jmenného prostoru) strukturovaného diskusního fóra board_title řetězec StructuredDiscussions
Úplný název Strukturované diskuse board_prefixedtext řetězec (zastaralé) Místo ní používejte přímo board_prefixedtitle. StructuredDiscussions
Úplný název Strukturované diskuse board_prefixedtitle řetězec StructuredDiscussions
Zdrojový text překladové jednotky translate_source_text řetězec Translate
Target language for translation ($1) translate_target_language řetězec Toto je kód jazyka, například en pro angličtinu. Translate
Zda byla tato editace provedena z výstupního uzlu sítě Tor tor_exit_node boolean true, pokud akce pochází z výstupního uzlu toru. TorBlock
Zda uživatel edituje prostřednictvím mobilního rozhraní user_mobile boolean true pro mobilní uživatele, jinak false. MobileFrontend
Zda uživatel edituje z mobilní aplikace ($1) user_app boolean true, pokud uživatel provádí úpravy z mobilní aplikace, jinak false. MobileApp
Zobrazení stránky article_views celé číslo (zastaralé) Místo ní používejte přímo page_views. HitCounters
Zobrazení stránky page_views celé číslo počet zobrazení stránek HitCounters
Zobrazení zdrojové stránky moved_from_views celé číslo počet zobrazení zdrojové stránky HitCounters
Cílová zobrazení stránek moved_to_views celé číslo počet zobrazení cílové stránky HitCounters
Zda je IP adresa blokována pomocí seznamu stopforumspam.com sfs_blocked boolean Zda je IP adresa blokována pomocí seznamu stopforumspam.com StopForumSpam
Zda je IP adresa používaná uživatelem známá službě IPoid ($1) ip_reputation_ipoid_known boolean Data pocházejí ze služby IPoid. null, pokud pro uživatele provádějícího akci nejsou generovány proměnné. This variable is a protected variable. IPReputation
Počet klientů přidružených k IP adrese používané uživatelem ($1) ip_reputation_client_count celé číslo Data comes from the IPoid service. null, pokud pro uživatele provádějícího akci nejsou generovány proměnné, nebo pokud ip_reputation_ipoid_known není rovno true. This variable is a protected variable. IPReputation
Seznam chování spojených s IP adresou používanou uživatelem ($1) ip_reputation_client_behaviors pole Data comes from the IPoid service. null, pokud pro uživatele provádějícího akci nejsou generovány proměnné, nebo pokud ip_reputation_ipoid_known není rovno true. This variable is a protected variable. IPReputation
Seznam proxy služeb spojených s IP adresou používanou uživatelem ($1) ip_reputation_client_proxies pole Data comes from the IPoid service. null, pokud pro uživatele provádějícího akci nejsou generovány proměnné, nebo pokud ip_reputation_ipoid_known není rovno true. This variable is a protected variable. IPReputation
Seznam rizik spojených s IP adresou používanou uživatelem ($1) ip_reputation_risk_types pole Data comes from the IPoid service. null if variables are not generated for the user performing the action or if ip_reputation_ipoid_known is not true. This variable is a protected variable. IPReputation
Seznam operátorů tunelů přidružených k IP adrese používané uživatelem ($1) ip_reputation_tunnel_operators pole Data comes from the IPoid service. null if variables are not generated for the user performing the action or if ip_reputation_ipoid_known is not true. This variable is a protected variable. IPReputation

Poznámky

Když je action='move', jsou k dispozici pouze proměnné summary, action, timestamp a user_*. Proměnné page_* jsou také k dispozici, ale předpona je nahrazena moved_from_ a moved_to_, které představují hodnoty názvu článku původního a cílového. Například moved_from_title a moved_to_title místo page_title.

Od verze MediaWiki 1.28 (1 $) se action='upload' používá pouze při publikování nahraného obsahu, nikoli pro nahrání do úschovy. Zavádí se nový action='stashupload', který se používá pro všechna nahrávání, včetně nahrávání do zásobníku. Chová se jako dřívější action='upload' a poskytuje pouze proměnné metadat souboru (file_*). Proměnné související s úpravou stránky, včetně summary, new_wikitext a několika dalších, jsou nyní k dispozici na action='upload'. Pro každé nahrání souboru mohou být filtry volány s action='stashupload' (pro nahrávání do zásobníku) a jsou vždy volány s action='upload'. Nejsou voláni s action='edit'.

Autoři filtrů by měli použít action='stashupload' | action='upload' v kódu filtru, když lze soubor zkontrolovat pouze na základě obsahu souboru – například pro odmítnutí souborů s nízkým rozlišením – a action='upload' pouze tehdy, když je třeba prozkoumat i wikitextové části úpravy – například, odmítnout soubory bez popisu. To umožňuje nástrojům, které oddělují nahrávání souboru a publikování souboru (např. UploadWizard nebo Dialog pro nahrávání), informovat uživatele o selhání dříve, než stráví čas vyplňováním údajů o nahrávání.

Výkon

Jak je uvedeno v tabulce výše, některé z těchto proměnných mohou být velmi pomalé. Při psaní filtrů mějte na paměti, že limit podmínky není dobrá metrika toho, jak těžké jsou filtry. Například proměnné jako *_recent_contributors nebo *_links vždy potřebují k výpočtu DB dotaz, zatímco proměnné *_pst budou muset provést analýzu textu, což je opět těžká operace; všechny tyto proměnné by měly být používány velmi, velmi opatrně. Například na italské Wikipedii bylo pozorováno, že při 135 aktivních filtrech a průměrně 450 použitých podmínkách byla doba provedení filtrů kolem 500 ms, přičemž špičky dosahovaly 15 sekund. Odstranění proměnné added_links z jednoho filtru a snížení případů, kdy by jiný filtr použil added_lines_pst, přineslo průměrnou dobu provádění na 50 ms. Konkrétněji:

  • Použijte proměnné _links, když potřebujete vysokou přesnost a kontrola "http://..." v jiných proměnných (například added_lines) by mohla vést k vážným poruchám;
  • Proměnné _pst použijte, pokud jste si opravdu jisti, že proměnné jiné než PST nestačí. Můžete se také podmíněně rozhodnout, který z nich zkontrolovat: pokud například chcete prozkoumat podpis, nejprve zkontrolujte, zda added_lines obsahuje ~~~;
  • Obecně platí, že když se zabýváme těmito proměnnými, je vždy mnohem lepší použít další podmínky, ale vyhnout se náročným výpočtům. Abyste toho dosáhli, vždy dávejte těžké proměnné jako poslední podmínky.

V neposlední řadě si uvědomte, že kdykoli je pro daný filtr vypočítána proměnná, bude uložena a jakýkoli jiný filtr ji okamžitě načte. To znamená, že jeden jediný filtr počítající tuto proměnnou se počítá víceméně jako desítky filtrů, které ji používají.

Klíčová slova

Kde to není konkrétně uvedeno jinak, klíčová slova přenášejí své operandy na řetězce

Pro často používané funkce jsou zahrnuta následující speciální klíčová slova:

  • like (nebo matches) vrátí true, pokud levý operand odpovídá globálnímu vzoru v pravém operandu.
  • in vrátí hodnotu true, pokud pravý operand (řetězec) obsahuje levý operand. Poznámka: Prázdné řetězce nejsou obsaženy ani neobsahují žádný jiný řetězec (ani prázdný řetězec samotný).
  • contains funguje jako in, ale s přepnutým levým a pravým operandem. Poznámka: Prázdné řetězce nejsou obsaženy ani neobsahují žádný jiný řetězec (ani prázdný řetězec samotný).
  • rlike (nebo regex) a irlike vrátí hodnotu true, pokud levý operand odpovídá (obsahuje) vzoru regulárního výrazu v pravém operandu (irlike nerozlišuje malá a velká písmena) .
    • Systém používá PCRE (Perl kompatibilní regulární výrazy).
    • Jediná povolená volba PCRE je PCRE_UTF8 (modifikátor u v PHP). Pro irlike jsou povoleny jak PCRE_CASELESS, tak PCRE_UTF8 (modifikátor iu).
  • if ... then ... end
  • if ... then ... else ... end
  • ... ? ... : ...
  • true, false, null

Příklady

Kód Výsledek Poznámka
"1234" like "12?4" True
"1234" like "12*" True
"foo" in "foobar" True
"foobar" contains "foo" True
"o" in ["foo", "bar"] True Kvůli obsazení řetězce
"foo" regex "\w+" True
"a\b" regex "a\\\\b" True Chcete-li hledat zpětné lomítko escape znaku pomocí regulárního výrazu, musíte použít buď čtyři zpětná lomítka, nebo dvě \x5C. (Obě funguje dobře.)
"a\b" regex "a\x5C\x5Cb" True

Funkce

Pro usnadnění některých běžných problémů je zahrnuta řada vestavěných funkcí. Jsou prováděny v obecném formátu functionName( arg1, arg2, arg3 ) a lze je použít místo libovolného literálu nebo proměnné. Jeho argumenty mohou být uvedeny jako literály, proměnné nebo dokonce jiné funkce.

názevpopis
lcaseVrátí argument převedený na malá písmena.
ucaseVrátí argument převedený na velká písmena.
lengthVrátí délku řetězce zadaného jako argument. Pokud je argument pole, vrátí počet jeho prvků.
stringPřetypuje na datový typ řetězce. Pokud je argument pole, imploduje jej pomocí zalomení řádků.
intPřetypuje na celočíselný datový typ.
floatPřetypuje na datový typ s plovoucí desetinnou čárkou.
boolPřetypuje na booleovský datový typ.
normEkvivalent rmwhitespace(rmspecials(rmdoubles(ccnorm(arg1)))).
ccnorm Normalizuje zaměnitelné/podobné znaky v argumentu a vrací kanonický tvar. Seznam znaků a jejich náhrad lze nalézt na git, např. ccnorm( "Eeèéëēĕėęě3ƐƷ" ) === "EEEEEEEEEEEEE".[9] Výstup této funkce je vždy velkým písmenem. I když tato funkce není náročná, není ani jednoduchá a při opakovaném volání by mohla filtr zpomalit.
ccnorm_contains_any Normalizuje zaměnitelné/podobné znaky ve všech svých argumentech a vrací hodnotu true, pokud první řetězec obsahuje jakýkoli řetězec z následujících argumentů (neomezený počet argumentů, logický režim OR). Seznam znaků a jejich nahrazení lze nalézt na git. Kvůli použití ccnorm může být tato funkce pomalá, pokud je předáno příliš mnoho argumentů.
ccnorm_contains_all Normalizuje zaměnitelné/podobné znaky ve všech svých argumentech a vrátí hodnotu true, pokud první řetězec obsahuje řetězec každý z následujících argumentů (neomezený počet argumentů, režim logického AND). Seznam znaků a jejich nahrazení lze nalézt na git. Kvůli použití ccnorm může být tato funkce pomalá, pokud je předáno příliš mnoho argumentů.
specialratioVrátí počet nealfanumerických znaků vydělený celkovým počtem znaků v argumentu.
rmspecialsOdstraní všechny speciální znaky v argumentu a vrátí výsledek. Neodstraňuje mezery. (Ekvivalent s/[^\p{L}\p{N}\s]//g.)
rmdoublesOdstraní opakované znaky v argumentu a vrátí výsledek.
rmwhitespaceOdstraní mezery (mezery, tabulátory, nové řádky).
countVrátí, kolikrát se jehla (první řetězec) objevila v kupce sena (druhý řetězec). Pokud je zadán pouze jeden argument, rozdělí jej čárkami a vrátí počet segmentů.
rcount Podobné jako count, ale jehla místo toho používá regulární výraz. Může být rozlišováno mezi malými a velkými písmeny tím, že necháte regulární výraz začínat "(?i)". Upozorňujeme, že pro prosté řetězce může být tato funkce až 50krát pomalejší než count[10], takže pokud je to možné, používejte tuto funkci.
get_matches MW 1.31+ Hledá shody jehly regulárního výrazu (první řetězec) v kupce sena (druhý řetězec). Vrátí pole, kde prvek 0 je celá shoda a každý prvek [n] je shoda n'-té skupiny zachycení jehly. Může být rozlišováno mezi malými a velkými písmeny tím, že necháte regulární výraz začínat "(?i)". Pokud se zachytávací skupina neshoduje, pozice pole bude mít hodnotu false.
ip_in_rangeVrátí hodnotu true, pokud IP (první řetězec) uživatele odpovídá zadanému rozsahu IP adres (druhý řetězec může být v CIDR notace, explicitní notaci jako "1.1.1.1-2.2.2.2" nebo jeden IP). Funguje pouze pro anonymní uživatele. Podporuje adresy IPv4 i IPv6.
ip_in_rangesVrátí true, pokud IP (první řetězec) uživatele odpovídá jakémukoli ze zadaných rozsahů IP (následující řetězce v režimu logického NEBO, může být v CIDR notace, explicitní zápis jako "1.1 .1.1-2.2.2.2" nebo jedna IP adresa). Funguje pouze pro anonymní uživatele. Podporuje adresy IPv4 i IPv6.
contains_anyVrátí hodnotu true, pokud první řetězec obsahuje řetězec any z následujících argumentů (neomezený počet argumentů v režimu logického OR). Pokud je prvním argumentem pole, přetypuje se na řetězec.
contains_allVrátí hodnotu true, pokud první řetězec obsahuje řetězec každý z následujících argumentů (neomezený počet argumentů v režimu logického AND). Pokud je prvním argumentem pole, přetypuje se na řetězec.
equals_to_anyVrátí hodnotu true, pokud je první argument identický (===) s kterýmkoli z následujících (neomezený počet argumentů). V zásadě je equals_to_any(a, b, c) totéž jako a===b | a===c, ale je kompaktnější a šetří podmínky.
substrVrátí část prvního řetězce pomocí posunu od druhého argumentu (začíná na 0) a maximální délky od třetího argumentu (volitelné).
strlenStejné jako length.
strpos Vrátí číselnou pozici prvního výskytu jehly (druhý řetězec) v kupce sena (první řetězec), počínaje odsazením od třetího argumentu (volitelné, výchozí hodnota je 0). Tato funkce může vrátit 0, když je jehla nalezena na začátku kupky sena, takže může být jiným srovnávacím operátorem chybně interpretována jako hodnota false. Lepší způsob je použít === nebo !== pro testování, zda je nalezen. Differently from PHP's strpos(), which returns false when the needle is not found, this function returns -1 when the needle is not found.
str_replaceNahradí všechny výskyty hledaného řetězce náhradním řetězcem. Funkce přebírá 3 argumenty v následujícím pořadí: Text, ve kterém se má vyhledávat, text k nalezení, nahrazující text.
str_replace_regexpNahradí všechny výskyty hledaného řetězce náhradním řetězcem pomocí regulárních výrazů. Funkce přebírá 3 argumenty v následujícím pořadí: text, ve kterém se má vyhledávat, regulární výraz, který se má shodovat, nahrazující výraz.
rescapeVrátí argument s některými znaky, kterým předchází znak escape "\", takže řetězec lze použít v regulárním výrazu, aniž by tyto znaky měly zvláštní význam.
setNastaví proměnnou (první řetězec) s danou hodnotou (druhý argument) pro další použití ve filtru. Další syntaxe: name := value.
set_varStejné jako set.

Příklady

Kód Výsledek Poznámka
length( "Wikipedia" ) 9
lcase( "WikiPedia" ) wikipedia
ccnorm( "w1k1p3d14" ) WIKIPEDIA ccnorm výstup je vždy velkými písmeny
ccnorm( "ωɨƙɩᑭƐƉ1α" ) WIKIPEDIA
ccnorm_contains_any( "w1k1p3d14", "wiKiP3D1A", "foo", "bar" ) true
ccnorm_contains_any( "w1k1p3d14", "foo", "bar", "baz" ) false
ccnorm_contains_any( "w1k1p3d14 is 4w3s0me", "bar", "baz", "some" ) true
ccnorm( "ìíîïĩїį!ľ₤ĺľḷĿ" ) IIIIIII!LLLLLL
norm( "!!ω..ɨ..ƙ..ɩ..ᑭᑭ..Ɛ.Ɖ@@1%%α!!" ) WIKIPEDAIA
norm( "F00 B@rr" ) FOBAR norm odstraní mezery, speciální znaky a duplikáty a poté použije ccnorm
rmdoubles( "foobybboo" ) fobybo
specialratio( "Wikipedia!" ) 0.1
count( "foo", "foofooboofoo" ) 3
count( "foo,bar,baz" ) 3
rmspecials( "FOOBAR!!1" ) FOOBAR1
rescape( "abc* (def)" ) abc\* \(def\)
str_replace( "foobarbaz", "bar", "-" ) foo-baz
str_replace_regexp( "foobarbaz", "(.)a(.)", "$2a$1" ) foorabzab
ip_in_range( "127.0.10.0", "127.0.0.0/12" ) true
ip_in_ranges( "127.0.10.0", "10.0.0.0/8", "127.0.0.0/12" ) true
contains_any( "foobar", "x", "y", "f" ) true
get_matches( "(foo?ba+r) is (so+ good)", "fobaaar is soooo good to eat" ) ['fobaaar is soooo good', 'fobaaar', 'soooo good']

Pořadí operací

Operace se obecně provádějí zleva doprava, ale existuje pořadí, podle kterého se řeší. Jakmile filtr nevyhoví jedné z podmínek, přestane kontrolovat zbývající z nich (kvůli vyhodnocení zkratu) a přejde k dalšímu filtru. Pořadí hodnocení je:

  1. Vše v závorkách (( a )) je vyhodnoceno jako jedna jednotka.
  2. Převádění proměnných/literálů na jejich příslušná data. (např. page_namespace až 0)
  3. Volání funkcí (norm, lcase atd.)
  4. Unární + a - (definující kladnou nebo zápornou hodnotu, např. -1234, +1234)
  5. Klíčová slova (in, rlike atd.)
  6. Booleovská inverze (!x)
  7. Umocňování (2**3 → 8)
  8. Související s násobením (násobení, dělení, modulování)
  9. Sčítání a odčítání (3-2 → 1)
  10. Porovnání (<, >, ==)
  11. Booleovské operace (&, |, ^)
  12. Ternární operátor (... ? ... : ...)
  13. Úkoly (:=)

Příklady

  • A & B | C je ekvivalent (A & B) | C, nikoli A & (B | C). Konkrétně false & true | true a false & false | true se vyhodnotí jako true.
  • A | B & C je ekvivalent (A | B) & C, nikoli A | (B & C). Konkrétně true | true & false a true | false & false se vyhodnotí jako false.
  • added_lines rlike "foo" + "|bar" je špatně, použijte místo toho added_lines rlike ("foo" + "|bar").

Počítání podmínek

Limitem podmínky je (víceméně) sledování počtu porovnávacích operátorů + počtu zadaných volání funkcí.

Další vysvětlení, jak snížit použité podmínky, lze nalézt na Extension:AbuseFilter/Conditions.

Vyjímky

Přestože funkce prozkoumání AbuseFilter identifikuje akce "vrácení zpět" jako úpravy, AbuseFilter nevyhodnotí akce vrácení pro shodu.[11]

Užitečné odkazy

Poznámky pod čarou

  1. Porovnání polí s jinými typy vždy vrátí hodnotu false, s výjimkou příkladu výše
  2. 1 2 3 4 5 6 7 8 Jediné proměnné, které jsou aktuálně dostupné pro nahrávání souborů (action='upload'), jsou user_*, page_*, file_sha1, file_size, file_mime, file_mediatype, file_width, file_height, file_bits_per_channel (posledních pět bylo přidáno teprve od vydání za MediaWiki 1.27 gerrit:281503). Všechny proměnné file_* nejsou dostupné pro jiné akce (včetně action='edit').
  3. Od MediaWiki 1.28 (gerrit:295254)
  4. Několik filtrů (12), které používají tuto proměnnou, se zobrazilo v řídicí panel AbuseFilterSlow Grafanak ( zobrazení vyžaduje přístup logstash). Zdálo se, že posunutí této proměnné ke konci filtru pomohlo.
  5. Podívejte se na phabricator:T191722
  6. Zastaralé s tímto potvrzením a zakázané s tímto.
  7. Některé filtry používající tuto proměnnou se zobrazily na řídicím panelu AbuseFilterSlow Grafana (příklad, vyžaduje přístup logstash). Například místo použití "text" in edit_diff_pst (nebo dokonce edit_diff) zvažte něco jako "text" in added_lines & !("text" in removed_lines)
  8. Seznam typů viz zdrojový kód.
  9. Buďte si vědomi phab:T27619. Můžete použít Special:AbuseFilter/tools k vyhodnocení ccnorm( "your string" ), abyste viděli, které znaky jsou transformovány.
  10. https://3v4l.org/S6IGP
  11. T24713 - rollback neodpovídá AF