Extension:AbuseFilter/Rules format/de

Die Regeln sind eine spezielle Sprache. Sie sind ähnlich formatiert wie Bedingungen in Sprachen wie C/Java/Perl.

Strings

Du kannst ein Literal angeben, indem du es in einfache oder doppelte Anführungszeichen setzt (für Zeichenketten) oder indem du es unverändert eingibst (für Zahlen, sowohl Gleitkomma- als auch Ganzzahlen). Zeilenumbrüche erhältst du mit \n, Tabulatorzeichen mit \t und du kannst das Anführungszeichen auch mit einem Backslash maskieren.

Verwende das Symbol + (Plus), um zwei Zeichenketten-Literale oder die Werte zweier Variablen mit einem Zeichenkettenwert zu verbinden.

Beispiele
"Dies ist eine Zeichenfolge"
'Dies ist auch eine Zeichenfolge'
'Diese Zeichenfolge sollte n\icht fehlschlagen'
"Diese Zeichenkette\nHat einen Zeilenumbruch"
1234
1.234
-123

Benutzerdefinierte Variablen

Du kannst benutzerdefinierte Variablen zum leichteren Verständnis mit dem Zuweisungssymbol := in einer Zeile (geschlossen durch ;) innerhalb einer Bedingung definieren. Solche Variablen können Buchstaben, Unterstriche und Zahlen (außer als erstes Zeichen) enthalten und unterscheiden nicht zwischen Groß- und Kleinschreibung. Beispiel (aus w:Special:AbuseFilter/79):

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

Arrays

AbuseFilter unterstützt nicht-assoziative Arrays, die wie in den folgenden Beispielen verwendet werden können.

Achtung! Achtung: Ausdrücke wie page_namespace in [14, 15] funktionieren möglicherweise nicht wie erwartet. Hierbei wird auch dann als true ausgewertet, wenn page_namespace 1, 4 oder 5 ist. Für weitere Informationen und mögliche Umgehungen des Problems siehe bitte T181024.
my_array := [ 5, 6, 7, 10 ];
my_array[0] == 5
length(my_array) == 4
int( my_array ) === 4 // Identisch zu Länge
float( my_array ) === 4.0 // Zählt die Elemente
string(my_array) == "5\n6\n7\n10\n" // Hinweis: Der letzte Zeilenumbruch könnte in Zukunft entfernt werden
5 in my_array == true
'5' in my_array == true
'5\n6' in my_array == true // Hinweis: Dies liegt daran, wie Arrays in Zeichenketten umgewandelt werden, d. h. durch Implodieren mit Zeilenumbrüchen
1 in my_array == true // Hinweis: Dies passiert, weil „in“ Argumente in Zeichenketten umwandelt, sodass die 1 in „10“ gefunden wird und wahr zurückgegeben wird.
my_array[] := 57; // Dies hängt ein Element am Ende des Arrays an
my_array === [ 5, 6, 7, 10, 57 ]
my_array[2] := 42; // Und dies dient zum Ändern eines Elements im Array
my_array === [ 5, 6, 42, 10, 57 ]

Kommentare

Du kannst mit der folgenden Syntax Kommentare angeben:

/* Dies ist ein Kommentar */

Arithmetik

Du kannst grundlegende Rechensymbole verwenden, um mit Variablen und Literalen Rechenoperationen durchzuführen, indem du die folgende Syntax nutzt:

  • - Subtrahiert den rechten Operanden vom linken Operanden.
  • + Addiert den rechten Operanden zum linken Operanden.
  • * Multipliziert den linken Operanden mit dem rechten Operanden.
  • / Dividiert den linken Operanden durch den rechten Operanden.
  • ** Erhöht den linken Operanden auf die durch den rechten Operanden angegebene Exponentialpotenz.
  • % Gibt den Rest zurück, der entsteht, wenn der linke Operand durch den rechten Operanden geteilt wird.

Der Typ des zurückgegebenen Ergebnisses ist derselbe, der von PHP zurückgegeben werden würde, wofür online eine umfangreiche Dokumentation zu finden ist. Ausführlichere Beispiele finden sich in diesem AF-Parsertest.

Beispiel Ergebnis
1 + 12
2 * 24
1 / 20.5
9 ** 281
6 % 51

Boolesche Operationen

Du kannst eine Übereinstimmung erzielen, wenn alle Bedingungen wahr sind, wenn eine oder mehrere Bedingungen wahr sind oder wenn genau eine Bedingung wahr ist.

  • x | y OR gibt wahr zurück, wenn eine oder mehrere Bedingungen wahr sind.
  • x & y AND gibt wahr zurück, wenn beide Bedingungen wahr sind.
  • x ^ y XOR gibt wahr zurück, wenn nur eine der beiden Bedingungen wahr ist.
  • !x NOT gibt wahr zurück, wenn die Bedingung nicht wahr ist.

Beispiele

Code Ergebnis
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

Einfache Vergleiche

Du kannst mit der folgenden Syntax Variablen mit anderen Variablen und Literalen vergleichen:

  • <, > Gibt wahr zurück, wenn der linke Operand kleiner als/größer als der entsprechende rechte Operand ist. Beachte: Operanden werden in Zeichenketten umgewandelt und zwar, wie es in PHP der Fall ist, null < beliebige Zahl === true und null > beliebige Zahl === false.
  • <=, >= Gibt wahr zurück, wenn der linke Operand kleiner oder gleich/größer oder gleich dem entsprechende rechten Operand ist. Beachte: Operanden werden in Zeichenketten umgewandelt und zwar, wie es in PHP der Fall ist, null <= beliebige Zahl === true und null >= beliebige Zahl === false.
  • == (oder =), != Gibt wahr zurück, wenn der linke Operand gleich/ungleich dem entsprechenden rechten Operand ist.
  • ===, !== Gibt wahr zurück, wenn der linke Operand gleich/ungleich dem entsprechenden rechten Operand ist UND der linke Operand jeweils den gleichen / einen anderen Datentyp wie der rechte Operand hat.
Beispiel Ergebnis
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]

Integrierte Variablen

Der Missbrauchsfilter übergibt verschiedene Variablen namentlich an den Parser. Auf diese Variablen kann zugegriffen werden, indem ihr Name an einer Stelle eingegeben wird, an der auch ein Literal funktionieren würde. Du kannst dir die mit jeder Anfrage verknüpften Variablen im Missbrauchsfilter-Logbuch ansehen.

Variablen von AbuseFilter

Immer verfügbare Variablen

Achtung! Achtung: Benutzerbezogene Variablen sind immer verfügbar, außer in einem Fall: Benutzerkontenerstellung, wenn der Ersteller nicht angemeldet ist. Alle Variablen, die mit user_ beginnen, sind betroffen, außer user_type.
Beschreibung Name Datentyp Anmerkungen
AktionactionZeichenketteEine der folgenden: edit, move, createaccount, autocreateaccount, delete, upload[2], stashupload[3]
Unix-Zeitstempel der ÄnderungtimestampZeichenketteint(timestamp) gibt dir eine Zahl, mit der du das Datum, die Zeit, den Wochentag, etc. berechnen kannst.
Datenbankname des Wikis ($1)wiki_nameZeichenketteDies ist beispielsweise "enwiki" in der englischsprachigen Wikipedia und "itwikiquote" im italienischen Wikiquote.
Sprachcode des Wikis ($1)wiki_languageZeichenketteDies ist beispielsweise "en" in der englischsprachigen Wikipedia und "it" im italienischen Wikiquote. Mehrsprachige Wikis wie Commons, Meta und Wikidata werden ebenfalls als "en" angegeben.
Beitragszahl des Benutzers ($1)user_editcountGanzzahl/nullNull nur für nicht registrierte Benutzer.
Name des Benutzerkontos ($1) (IP in case the user is not registered)user_nameZeichenkette
Nutze für die Aktionen "createaccount" und "autocreateaccount" accountname, wenn du den Namen des erstellten Kontos erhalten möchtest.
Achtung! Achtung: On wikis where temporary accounts are enabled, IPs are not returned for unregistered users. Use user_unnamed_ip instead if the IP is needed. More context is available here .
Typ des Benutzerkontos ($1)user_typeZeichenkette Der Benutzertyp, einer von ip, temp (wenn der Benutzer ein temporäres Konto nutzt), named, external oder unknown.
Zeitpunkt, an dem die E-Mail-Adresse bestätigt wurde ($1)user_emailconfirmZeichenkette/nullIm Format: JJJJMMTTHHMMSS. Null, wenn die E-Mail nicht bestätigt wurde.
Alter des Benutzerkontos ($1)user_ageGanzzahlIn Sekunden. 0 für unangemeldete Benutzer.
Ob der Benutzer gesperrt ist ($1)user_blockedWahrheitswertTrue für gesperrte angemeldete Benutzer. Auch wahr für Bearbeitungen von gesperrten IP-Adressen, selbst wenn der Autor ein angemeldeter Benutzer ist, der nicht gesperrt ist. Ansonsten False.
Hierbei wird nicht zwischen partiellen und projektweiten Sperren unterschieden.
Gruppen (auch implizite), in denen der Benutzer Mitglied ist ($1)user_groupsArray von Stringssiehe Special:ListGroupRights
Rechte, die ein Benutzer hat ($1)user_rightsArray von Zeichenkettensiehe Special:ListGroupRights
Seitenkennnummer ($1)article_articleidGanzzahl(veraltet) Verwende stattdessen page_id.
Seitenkennnummer ($1) (kann über den Link "Seiteninformation" in der Seitenleiste gesehen werden)page_idGanzzahlDies ist 0 für neue Seiten, ist bei der Betrachtung früherer Treffer jedoch nicht verlässlich. Wenn du beim Prüfen früherer Treffer ein genaues Ergebnis benötigst, nutze "page_age == 0", um die Erstellung neuer Seiten zu identifizieren. (Beachte, dass dies allerdings langsamer ist.) Dieses Problem wurde in 9369d08 behoben, implementiert am 11. September 2023.
Namensraum der Seite ($1)article_namespaceGanzzahl(veraltet) Verwende stattdessen page_namespace.
Namensraum der Seite ($1)page_namespaceGanzzahlbezieht sich auf den Namensraum-Index. Prüfe mit Ausdrücken wie "page_namespace == 2" oder "equals_to_any(page_namespace, 1, 3)" auf Namensräume
Seitenalter in Sekunden ($1)page_ageGanzzahldie Anzahl an Sekunden seit der ersten Bearbeitung (oder 0 für neue Seiten). Dies ist verlässlich, meist allerdings langsam; ziehe die Verwendung von page_id in Erwägung, wenn du keine hohe Genauigkeit benötigst.
Titel der Seite ohne Namensraum ($1)article_textZeichenkette(veraltet) Verwende stattdessen page_title.
Titel der Seite ohne Namensraum ($1)page_titleZeichenkette
Vollständiger Seitentitel ($1)article_prefixedtextZeichenkette(veraltet) Verwende stattdessen page_prefixedtitle.
Vollständiger Seitentitel ($1)page_prefixedtitleZeichenkette
Bearbeiten-Schutzstufe der Seite ($1)article_restrictions_editZeichenkette(veraltet) Verwende stattdessen page_restrictions_edit.
Bearbeiten-Schutzstufe der Seite ($1)page_restrictions_editArray von Strings
Verschieben-Schutzstufe der Seite ($1)article_restrictions_moveZeichenkette(veraltet) Verwende stattdessen page_restrictions_move.
Verschieben-Schutzstufe der Seite ($1)page_restrictions_moveArray von Strings
Hochladeschutz der Datei ($1)article_restrictions_uploadZeichenkette(veraltet) Verwende stattdessen page_restrictions_upload.
Hochladeschutz der Datei ($1)page_restrictions_uploadArray von Strings
Erstellschutz der Seite ($1)article_restrictions_createZeichenkette(veraltet) Verwende stattdessen page_restrictions_create.
Erstellschutz der Seite ($1)page_restrictions_createArray von Strings
Die letzten zehn Bearbeiter der Seite ($1)article_recent_contributorsarray of strings(veraltet) Verwende stattdessen page_recent_contributors.
Die letzten zehn Bearbeiter der Seite ($1)page_recent_contributorsArray von ZeichenkettenDies ist meist langsam (siehe #Leistung). Versuche, vor diese Bedingung andere Bedingungen zu setzen, die mit einer höheren Wahrscheinlichkeit als falsch ausgewertet werden, um die unnötige Ausführung der Abfrage zu vermeiden. Dieser Wert ist leer, wenn der Benutzer der einzige ist, der zu der Seite beigetragen hat (?) und prüft nur die letzten 100 Versionen
Erster Autor der Seite ($1)article_first_contributorZeichenkette(veraltet) Verwende stattdessen page_first_contributor.
Erster Autor der Seite ($1)page_first_contributorZeichenketteDies ist meist langsam (siehe #Leistung).[4] Versuche, vor diese Bedingung andere Bedingungen zu setzen, die mit einer höheren Wahrscheinlichkeit als falsch ausgewertet werden, um die unnötige Ausführung der Abfrage zu vermeiden.

Für bestimmte Aktionen verfügbare Variablen

Achtung! Achtung: Überprüfe immer, ob die Variable, die du verwenden möchtest, für die Aktion, nach der aktuell gefiltert wird, verfügbar ist, z. B. durch die Verwendung der Variable action. Wenn du dies nicht tust (beispielsweise accountname für eine Bearbeitung oder edit_delta für eine Löschung nutzt), wird der gesamte Code, der die fragliche Variable verwendet, falsch zurückgeben.
Bearbeitungsvariablen sind für das Auswerten früherer Uploads nicht verfügbar. (T345896)
Beschreibung Name Datentyp Anmerkungen
Zusammenfassung/Grund ($1)summaryZeichenketteVon MediaWiki automatisch erstellte Zusammenfassungen ("Neuer Abschnitt", "Geleert", etc.) werden erstellt, nachdem der Filter die Bearbeitung geprüft hat, weshalb sie nie erfasst werden, auch wenn der Debugger anzeigt, dass sie erfasst werden sollten. The variable contains whatever the user sees in the edit summary window, which may include MediaWiki preloaded section titles.[5]
Ob die Bearbeitung als geringfügig markiert ist oder nicht (nicht mehr in Verwendung)minor_editZeichenketteDeaktiviert und für alle Einträge zwischen 2016 und 2018 auf falsch gesetzt.[6]
Alter Wikitext der Seite, vor der Bearbeitung ($1)old_wikitextZeichenketteDiese Variable kann sehr groß sein. Ziehe zur Verbesserung der Leistung wenn möglich die Verwendung von removed_lines in Erwägung.
Neuer Wikitext der Seite, nach der Bearbeitung ($1)new_wikitextZeichenketteDiese Variable kann sehr groß sein. Ziehe zur Verbesserung der Leistung wenn möglich die Verwendung von added_lines in Erwägung.
Vereinigter Versionsunterschied der Bearbeitung ($1)edit_diffZeichenkette
Vereinigter Änderungsunterschied nach Bearbeitung, vor dem Speichern umgewandelt ($1)edit_diff_pstZeichenketteDies ist meist langsam (siehe #Leistung). Das Prüfen von sowohl added_lines als auch removed_lines ist wahrscheinlich effizienter.[7]
Neue Seitengröße ($1)new_sizeGanzzahl
Alte Seitengröße ($1)old_sizeGanzzahl
Größenänderung der Bearbeitung ($1)edit_deltaGanzzahl
Zeilen in der Bearbeitung hinzugefügt, vor dem Speichern umgewandelt ($1)added_lines_pstArray von StringsNutze wenn möglich added_lines, was effizienter ist.
Durch die Bearbeitung hinzugefügte Zeilen ($1)added_linesArray von Stringsenthält alle Zeilen im letzten Versionsunterschied, die mit + anfangen
Durch die Bearbeitung entfernte Zeilen ($1)removed_linesArray von Strings
Alle externen Links im neuen Text ($1)all_linksArray von ZeichenkettenDies ist meist langsam (siehe #Leistung).
Links der Seite, vor der Bearbeitung ($1)old_linksArray von StringsDies ist meist langsam (siehe #Leistung).
Alle durch die Bearbeitung hinzugefügten externen Links ($1)added_linksArray von ZeichenkettenDies ist meist langsam (siehe #Leistung). Ziehe in Erwägung, zunächst gegen added_lines zu prüfen und dann added_links, sodass weniger Bearbeitungen verlangsamt werden. Dies entspricht den MediaWiki-Regeln für externe Links. Nur einzigartige Links werden zum Array hinzugefügt. Das Ändern eines Links wird als ein hinzugefügter und ein entfernter Link gezählt.
Alle durch die Bearbeitung entfernten externen Links ($1)removed_linksArray von StringsDies ist meist langsam (siehe #Leistung). Ziehe in Erwägung, zunächst gegen removed_lines zu prüfen und dann removed_links, sodass weniger Bearbeitungen verlangsamt werden. Dies entspricht den MediaWiki-Regeln für externe Links. Nur einzigartige Links werden zum Array hinzugefügt. Das Ändern eines Links wird als ein hinzugefügter und ein entfernter Link gezählt.
Neuer Seitenwikitext, vor dem Speichern umgewandelt ($1)new_pstZeichenketteDiese Variable kann sehr groß sein.
HTML-Quelltext der neuen Version ($1)new_htmlZeichenketteDiese Variable kann sehr groß sein. Ziehe zur Verbesserung der Leistung wenn möglich die Verwendung von added_lines in Erwägung.
Neuer Seitentext, von jeglicher Textauszeichnung befreit ($1)new_textZeichenketteDiese Variable kann sehr groß sein. Ziehe zur Verbesserung der Leistung wenn möglich die Verwendung von added_lines in Erwägung.
HTML-Quelltext der alten Version (nicht mehr in Verwendung)old_htmlZeichenketteAus Gründen der Leistung deaktiviert.
Alter Seitentext, von jeglicher Textauszeichnung befreit (nicht mehr in Verwendung)old_textZeichenketteAus Gründen der Leistung deaktiviert.
Zeit seit der letzten Seitenbearbeitung in Sekunden ($1)page_last_edit_ageGanzzahl oder nullnull wenn die Seite nicht existiert
SHA1-Hash von Dateiinhalt ($1)file_sha1Zeichenkette[2]
Dateigröße in Bytes ($1)file_sizeGanzzahlDie Dateigröße in Bytes[2]
Breite der Datei in Pixel ($1)file_widthGanzzahlDie Breite in Pixeln[2]
Höhe der Datei in Pixel ($1)file_heightGanzzahlDie Höhe in Pixeln[2]
Bits pro Farbkanal der Datei ($1)file_bits_per_channelGanzzahlDie Anzahl von Bits je Farbkanal[2]
MIME-Typ der Datei ($1)file_mimeZeichenketteDer MIME-Typ der Datei.[2]
Medientyp der Datei ($1)file_mediatypeZeichenketteDer Medientyp der Datei.[8][2]
Seiten-ID der Zielseite ($1)moved_to_articleidGanzzahl(veraltet) Verwende stattdessen moved_to_id.
Seiten-ID der Zielseite ($1)moved_to_idGanzzahl
Titel der Zielseite ($1)moved_to_textZeichenkette(veraltet) Verwende stattdessen moved_to_title.
Titel der Zielseite ($1)moved_to_titleZeichenkette
Vollständiger Titel der Zielseite ($1)moved_to_prefixedtextZeichenkette(veraltet) Verwende stattdessen moved_to_prefixedtitle.
Vollständiger Titel der Zielseite ($1)moved_to_prefixedtitleZeichenkette
Namensraum der Zielseite ($1)moved_to_namespaceGanzzahl
Verschiebe-Zielseiten-Alter in Sekunden ($1)moved_to_ageGanzzahl
Zeit seit der letzten Änderung der Zielseite in Sekunden ($1)moved_to_last_edit_age Ganzzahl oder nullnull wenn die Zielseite nicht existiert
Bearbeitungs-Schutzstatus der Verschiebe-Zielseite ($1)moved_to_restrictions_editArray von ZeichenkettenSelbes wie page_restrictions_edit, jedoch für das Ziel der Verschiebung.
Verschiebe-Schutzstatus der Verschiebe-Zielseite ($1)moved_to_restrictions_moveArray von ZeichenkettenSelbes wie page_restrictions_move, jedoch für das Ziel der Verschiebung.
Hochladeschutz der Verschiebe-Zieldatei ($1)moved_to_restrictions_uploadArray von ZeichenkettenSelbes wie page_restrictions_upload, jedoch für das Ziel der Verschiebung.
Erstellschutz der Verschiebe-Zielseite ($1)moved_to_restrictions_createArray von ZeichenkettenSelbes wie page_restrictions_create, jedoch für das Ziel der Verschiebung.
Letzte zehn Benutzer, die zur Verschiebung der Zielseite beitragen ($1)moved_to_recent_contributorsArray von StringsSelbes wie page_recent_contributors, jedoch für das Ziel der Verschiebung.
Erster Benutzer, der zur Verschiebung der Zielseite beiträgt ($1)moved_to_first_contributorZeichenketteSelbes wie page_first_contributor, jedoch für das Ziel der Verschiebung.
Namensraum der Quellseite ($1)moved_from_namespaceGanzzahl
Titel der Quellseite ($1)moved_from_textZeichenkette(veraltet) Verwende stattdessen moved_from_title.
Titel der Quellseite ($1)moved_from_titleZeichenkette
Vollständiger Titel der Quellseite ($1)moved_from_prefixedtextZeichenkette(veraltet) Verwende stattdessen moved_from_prefixedtitle.
Vollständiger Titel der Quellseite ($1)moved_from_prefixedtitleZeichenkette
Seiten-ID der Quellseite ($1)moved_from_articleidGanzzahl(veraltet) Verwende stattdessen moved_from_id.
Seiten-ID der Quellseite ($1)moved_from_idGanzzahl
Verschiebe-Quellseiten-Alter in Sekunden ($1)moved_from_ageGanzzahl
Zeit seit der letzten Änderung der Quellseite in Sekunden ($1)moved_from_last_edit_ageGanzzahl
Bearbeitungs-Schutzstatus der Verschiebe-Quellseite ($1)moved_from_restrictions_editArray von ZeichenkettenSelbes wie page_restrictions_edit, jedoch für die Seite, die verschoben wird.
Verschiebe-Schutzstatus der Verschiebe-Quellseite ($1)moved_from_restrictions_moveArray von ZeichenkettenSelbes wie page_restrictions_move, jedoch für die Seite, die verschoben wird.
Hochladeschutz der Verschiebe-Quelldatei ($1)moved_from_restrictions_uploadArray von ZeichenkettenSelbes wie page_restrictions_upload, jedoch für die Seite, die verschoben wird.
Erstellschutz der Verschiebe-Quellseite ($1)moved_from_restrictions_createArray von ZeichenkettenSelbes wie page_restrictions_create, jedoch für die Seite, die verschoben wird.
Letzte zehn Benutzer, die zur Verschiebung der Quellseite beitragen ($1)moved_from_recent_contributorsArray von StringsSelbes wie page_recent_contributors, jedoch für die Seite, die verschoben wird.
Erster Benutzer, der zur Verschiebung der Quellseite beiträgt ($1)moved_from_first_contributorZeichenketteSelbes wie page_first_contributor, jedoch für die Seite, die verschoben wird.
Kontoname bei Kontoerstellung ($1)accountnameZeichenkette
Inhaltsmodell der alten Version old_content_model Zeichenkette Siehe Hilfe:ChangeContentModel für Informationen zur Änderung des Inhaltsmodells
Inhaltsmodell der neuen Version new_content_model Zeichenkette Siehe Hilfe:ChangeContentModel für Informationen zur Änderung des Inhaltsmodells

Geschützte Variablen

Eine Variable kann als geschützt betrachtet werden. Zum Beispiel gelten IP-Papiere in Wikis mit temporären Konten als PII und der Zugang zu ihnen muss eingeschränkt werden. Geschützte Variablen und Filter, die sie verwenden, sind nur für Betreuer mit dem Recht abusefilter-access-protected-vars zugänglich. Durch die Verwendung einer geschützten Variable wird auch der Filter als geschützt markiert. Der Schutz des Filters kann anschließend nicht entfernt werden, auch wenn er keine geschützte Variable mehr aktiv verwendet, da seine früheren Logbücher weiterhin verfügbar sind.

Logs generated by protected filters can only be viewed by users with the abusefilter-protected-vars-log right.

Die standardmäßig geschützten Variablen sind in AbuseFilterProtectedVariables in extension.json definiert.

user_unnamed_ip is null when examining past edits.
Beschreibung Name Datentyp Anmerkungen
IP-Adresse des Benutzerkontos (nur für abgemeldete Benutzer und temporäre Konten) ($1)user_unnamed_ip Zeichenkette Benutzer-IP für unangemeldete Benutzer / temporäre Konten
Dies gibt für angemeldete Benutzer null aus.
If the CheckUser extension is installed, then the user must also have access to the IP addresses of temporary accounts.This access is described at Help:Extension:CheckUser#Showing_IPs_for_temporary_accounts.

Variablen aus anderen Erweiterungen

Die meisten dieser Variablen werden bei der Untersuchung früherer Bearbeitungen immer auf falsch gesetzt und spiegeln möglicherweise ihren tatsächlichen Wert zum Zeitpunkt der Bearbeitung nicht wider. Siehe T102944.
Beschreibung Name Datentyp Werte Hinzugefügt von
Globale Gruppen, in denen der Benutzer ist ($1) global_user_groups Array CentralAuth
Globale Bearbeitungsanzahl des Benutzers ($1) global_user_editcount Ganzzahl CentralAuth
Globale Gruppen, in denen der Benutzer ist bei der Kontoerstellung ($1) global_account_groups Array Nur dann verfügbar, wenn action createaccount ist (dann ist es immer leer) oder autocreateaccount. CentralAuth
Globale Bearbeitungsanzahl des Benutzers bei der Kontoerstellung ($1) global_account_editcount Ganzzahl Nur dann verfügbar, wenn action createaccount ist (dann ist es immer null) oder autocreateaccount. CentralAuth
OAuth-Konsument, der zur Durchführung dieser Änderung verwendet wird ($1) oauth_consumer Ganzzahl OAuth
Seitenkennung des Strukturierte-Diskussionen-Boards ($1) board_articleid Ganzzahl (veraltet) Verwende stattdessen board_id. StructuredDiscussions
Seitenkennung des Strukturierte-Diskussionen-Boards ($1) board_id Ganzzahl StructuredDiscussions
Namensraum des Strukturierte-Diskussionen-Boards ($1) board_namespace Ganzzahl bezieht sich auf den Namensraum-Index StructuredDiscussions
Titel (ohne Namensraum) des Strukturierte-Diskussionen-Boards ($1) board_text Zeichenkette (veraltet) Verwende stattdessen board_title. StructuredDiscussions
Titel (ohne Namensraum) des Strukturierte-Diskussionen-Boards ($1) board_title Zeichenkette StructuredDiscussions
Vollständiger Titel des Strukturierte-Diskussionen-Boards ($1) board_prefixedtext Zeichenkette (veraltet) Verwende stattdessen board_prefixedtitle. StructuredDiscussions
Vollständiger Titel des Strukturierte-Diskussionen-Boards ($1) board_prefixedtitle Zeichenkette StructuredDiscussions
Quelltext der Übersetzungseinheit ($1) translate_source_text Zeichenkette Übersetzen
Zielsprache für die Übersetzung ($1) translate_target_language Zeichenkette Dies ist der Sprachcode, wie en für Englisch. Übersetzen
Änderung erfolgte durch einen Torausgangsknoten ($1) tor_exit_node Wahrheitswert wahr, wenn die Aktion von einem Tor-Ausgangsknoten kommt. TorBlock
Ob ein Benutzer über die mobile Oberfläche bearbeitet ($1) user_mobile Wahrheitswert wahr für mobile Nutzer, sonst falsch. MobileFrontend
Ob der Benutzer von der mobilen App bearbeitet ($1) user_app Wahrheitswert wahr, wenn der Benutzer von der mobilen App aus editiert, sonst falsch. MobileApp
Seitenaufrufe article_views Ganzzahl (veraltet) Verwende stattdessen page_views. HitCounters
Seitenaufrufe page_views Ganzzahl Die Anzahl der Seitenaufrufe HitCounters
Aufrufe der Quellseite moved_from_views Ganzzahl Die Anzahl der Aufrufe der Quellseite HitCounters
Aufrufe der Zielseite moved_to_views Ganzzahl Die Anzahl der Aufrufe der Zielseite HitCounters
Ob die IP-Adresse mittels der Liste stopforumspam.com gesperrt ist sfs_blocked Wahrheitswert Ob die IP-Adresse mittels der Liste stopforumspam.com gesperrt ist StopForumSpam
Whether the IP being used by the user is known by the IPoid service ($1) ip_reputation_ipoid_known boolean Data comes from the IPoid service. null if variables are not generated for the user performing the action. This variable is a protected variable. IPReputation
Number of clients associated with IP being used by the user ($1) ip_reputation_client_count integer 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
List of behaviors associated with the IP being used by the user ($1) ip_reputation_client_behaviors array 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
List of proxy services associated with IP being used by the user ($1) ip_reputation_client_proxies array 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
List of risks associated with the IP being used by the user ($1) ip_reputation_risk_types array 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
List of tunnel operators associated with the IP being used by the user ($1) ip_reputation_tunnel_operators array 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

Hinweise

Wenn action='move' ist, sind nur die Variablen summary, action, timestamp und user_* verfügbar. Die page_*-Variablen sind ebenfalls verfügbar, aber das Präfix wird durch moved_from_ und moved_to_ ersetzt, die die Werte des ursprünglichen Artikelnamens und des Zielnamens repräsentieren. Zum Beispiel moved_from_title und moved_to_title anstelle von page_title.

Seit MediaWiki 1.28 (gerrit:295254), wird action='upload' nur bei der Veröffentlichung eines Uploads verwendet und nicht für Stash-Uploads. Es wurde eine neue action='stashupload' eingeführt, die für alle Uploads verwendet wird, einschließlich Stash-Uploads. Dies verhält sich wie früher action='upload' und liefert nur Variablen für Datei-Metadaten (file_*). Variablen, die mit der Seitebearbeitung zusammenhängen, darunter summary, new_wikitext und einige andere, sind jetzt für action='upload' verfügbar. Für jeden Datei-Upload können Filter mit action='stashupload' (für Stash-Uploads) aufgerufen werden und sie werden immer mit action='upload' aufgerufen; sie werden nicht mit action='edit' aufgerufen.

Autoren von Filtern sollten action='stashupload' | action='upload' im Filtercode verwenden, wenn eine Datei nur auf Basis des Dateinhalts geprüft werden kann – beispielsweise um Dateien mit niedriger Auflösung abzulehnen – und action='upload' nur, wenn auch die Wikitext-Teile der Bearbeitung untersucht werden müssen – beispielsweise um Dateien ohne Beschreibung abzulehnen. Auf diese Weise können Werkzeuge, die das Hochladen und Veröffentlichen der Datei trennen (z. B. UploadWizard oder Hochladedialog), den Benutzer über den Fehler informieren, bevor er Zeit mit dem Ausfüllen der Hochlade-Details verbringt.

Leistung

Wie in der obigen Tabelle vermerkt, können einige dieser Variablen sehr langsam sein. Bedenke beim Schreiben von Filtern, dass die Bedingungsgrenze kein gutes Maß für die Belastung durch Filter ist. Beispielsweise ist für die Berechnung von Variablen wie *_recent_contributors oder *_links immer eine DB-Abfrage erforderlich, während für Variablen wie *_pst eine Textanalyse erforderlich ist, was wiederum eine aufwändige Operation ist. Alle diese Variablen sollten mit äußerster Vorsicht verwendet werden. Beispielsweise wurde in der italienischen Wikipedia beobachtet, dass bei 135 aktiven Filtern und durchschnittlich 450 verbrauchten Bedingungen die Ausführungszeit der Filter bei etwa 500 ms lag, mit Spitzenwerten von bis zu 15 Sekunden. Durch das Entfernen der Variable added_links aus einem einzelnen Filter und die Halbierung der Fälle, in denen ein anderer Filter added_lines_pst verwenden würde, verringerte sich die durchschnittliche Ausführungszeit auf 50 ms. Genauer:

  • Verwende _links-Variablen, wenn eine hohe Genauigkeit erforderlich ist und die Prüfung von "http://..." in anderen Variablen (beispielsweise added_lines) ​​zu schweren Fehlfunktionen führen könnte;
  • Verwende _pst-Variablen, wenn du dir wirklich sicher bist, dass Nicht-PST-Variablen nicht ausreichen. Du kannst auch anhand von Bedingungen entscheiden, was geprüft werden soll: Wenn du beispielsweise eine Signatur untersuchen möchtest, prüfe zuerst, ob added_lines ~~~ enthält;
  • Generell ist es beim Umgang mit diesen Variablen immer viel besser, weitere Bedingungen zu verbrauchen, aber dafür die Berechnung aufwändiger Dinge zu vermeiden. Um dies zu erreichen, setze aufwendige Variablen immer als letzte Bedingungen.

Zu guter Letzt beachte, dass wenn eine Variable für einen bestimmten Filter berechnet wird, sie gespeichert wird und von jedem anderen Filter sofort abgerufen werden kann. Dies bedeutet, dass ein einzelner Filter, der diese Variable berechnet, etwa so viel zählt wie Dutzende von Filtern, die sie verwenden.

Schlüsselwörter

Wenn nicht ausdrücklich angegeben, wandeln Schlüsselwörter ihre Operanden in Zeichenketten um.

Für häufig verwendete Funktionen sind die folgenden speziellen Schlüsselwörter enthalten:

  • like (oder matches) gibt wahr zurück, wenn der linke Operand mit dem Glob-Muster im rechten Operanden übereinstimmt.
  • in gibt wahr zurück, wenn der rechte Operand (eine Zeichenkette) den linken Operanden enthält. Hinweis: Leere Zeichenketten sind in keiner anderen Zeichenkette enthalten und enthalten auch keine andere Zeichenkette (nicht einmal die leere Zeichenkette selbst).
  • contains funktioniert wie in, aber mit vertauschten linken und rechten Operanden. Hinweis: Leere Zeichenketten sind in keiner anderen Zeichenkette enthalten und enthalten auch keine andere Zeichenkette (nicht einmal die leere Zeichenkette selbst).
  • rlike (oder regex) und irlike geben wahr zurück, wenn der linke Operand mit dem Regex-Muster im rechten Operanden übereinstimmt (es enthält) (bei irlike wird die Groß-/Kleinschreibung nichtbeachtet).
    • Das System nutzt PCRE.
    • Die einzige aktivierte PCRE-Option ist PCRE_UTF8 (Modifikator u in PHP); für irlike sind sowohl PCRE_CASELESS als auch PCRE_UTF8 aktiviert (Modifikator iu).
  • if ... then ... end
  • if ... then ... else ... end
  • ... ? ... : ...
  • true, false, null

Beispiele

Code Ergebnis Anmerkung
"1234" like "12?4" True
"1234" like "12*" True
"foo" in "foobar" True
"foobar" contains "foo" True
"o" in ["foo", "bar"] True Aufgrund der Zeichenketten-Besetzung
"foo" regex "\w+" True
"a\b" regex "a\\\\b" True Um mithilfe regulärer Ausdrücke nach dem Auslassungszeichen Backslash zu suchen, musst du entweder vier Backslashs oder zwei \x5C verwenden. (Beides funktioniert gut.)
"a\b" regex "a\x5C\x5Cb" True

Funktionen

Zur Behebung einiger häufiger Probleme sind zahlreiche integrierte Funktionen enthalten. Sie werden im allgemeinen Format functionName( arg1, arg2, arg3 ) ausgeführt und können anstelle jedes Literals oder jeder Variablen verwendet werden. Ihre Argumente können als Literale, Variablen oder sogar als andere Funktionen angegeben werden.

NameBeschreibung
lcaseGibt das in Kleinbuchstaben umgewandelte Argument zurück.
ucaseGibt das in Großbuchstaben umgewandelte Argument zurück.
lengthGibt die Länge der als Argument angegebenen Zeichenkette zurück. Wenn das Argument ein Array ist, gibt es seine Anzahl der Elemente zurück.
stringKonvertiert in den Zeichenketten-Datentyp. Wenn das Argument ein Array ist, wird es durch Zeilenumbrüche getrennt.
intKonvertiert in den Ganzzahl-Datentyp.
floatKonvertiert in den Gleitkommazahl-Datentyp.
boolKonvertiert in den booleschen Datentyp.
normÄquivalent zu rmwhitespace(rmspecials(rmdoubles(ccnorm(arg1)))).
ccnorm Normalisiert verwechselbare/ähnliche Zeichen im Argument und gibt eine kanonische Form zurück. Eine Liste von Zeichen und ihren Ersetzungen findet sich auf Git, z. B. ccnorm( "Eeèéëēĕėęě3ƐƷ" ) === "EEEEEEEEEEEEE".[9] Die Ausgabe dieser Funktion ist immer in Großbuchstaben. Diese Funktion ist zwar nicht aufwendig, aber auch nicht einfach und könnte einen Filter verlangsamen, wenn sie oft aufgerufen wird.
ccnorm_contains_any Normalisiert verwechselbare/ähnliche Zeichen in allen seinen Argumenten und gibt wahr zurück, wenn die erste Zeichenkette eine beliebige Zeichenkette aus den folgenden Argumenten enthält (unbegrenzte Anzahl von Argumenten, logischer ODER-Modus). Eine Liste von Zeichen und ihren Ersetzungen findet sich auf Git. Aufgrund der Verwendung von ccnorm kann diese Funktion langsam sein, wenn zu viele Argumente übergeben werden.
ccnorm_contains_all Normalisiert verwechselbare/ähnliche Zeichen in allen seinen Argumenten und gibt wahr zurück, wenn die erste Zeichenkette jede Zeichenkette aus den folgenden Argumenten enthält (unbegrenzte Anzahl von Argumenten, logischer UND-Modus). Eine Liste von Zeichen und ihren Ersetzungen findet sich auf Git. Aufgrund der Verwendung von ccnorm kann diese Funktion langsam sein, wenn zu viele Argumente übergeben werden.
specialratioGibt die Anzahl der nicht alphanumerischen Zeichen geteilt durch die Gesamtzahl der Zeichen im Argument zurück.
rmspecialsEntfernt alle Sonderzeichen im Argument und gibt das Ergebnis zurück. Entfernt keine Leerzeichen. (Äquivalent zu s/[^\p{L}\p{N}\s]//g.)
rmdoublesEntfernt wiederholte Zeichen im Argument und gibt das Ergebnis zurück.
rmwhitespaceEntfernt Leerzeichen (Leerzeichen, Tabulatoren, Zeilenumbrüche).
countGibt zurück, wie oft die Nadel (erste Zeichenkette) im Heuhaufen (zweite Zeichenkette) auftaucht. Wenn nur ein Argument angegeben ist, wird es durch Kommas getrennt und die Anzahl der Segmente zurückgegeben.
rcount Ähnlich wie count, aber die Nadel verwendet stattdessen einen regulären Ausdruck. Die Groß-/Kleinschreibung kann ignoriert werden, indem der reguläre Ausdruck mit "(?i)" begonnen wird. Bitte beachte, dass diese Funktion bei einfachen Zeichenketten bis zu 50-mal langsamer sein kann als count[10]. Verwende daher nach Möglichkeit diese Funktion.
get_matches MW 1.31+ Sucht nach Übereinstimmungen der Regex-Nadel (erste Zeichenkette) im Heuhaufen (zweite Zeichenkette). Gibt ein Array zurück, bei dem das Element 0 die gesamte Übereinstimmung und jedes Element [n] die Übereinstimmung der n-ten Erfassungsgruppe der Nadel ist. Die Groß-/Kleinschreibung kann ignoriert werden, indem der reguläre Ausdruck mit "(?i)" begonnen wird. Wenn eine Erfassungsgruppe nicht übereinstimmt, nimmt diese Array-Position den Wert falsch an.
ip_in_rangeGibt wahr zurück, wenn die IP des Benutzers (erste Zeichenkette) mit dem angegebenen IP-Bereich (zweite Zeichenkette, kann in CIDR-Notation, expliziter Notation wie "1.1.1.1-2.2.2.2" oder eine einzelne IP sein) übereinstimmt. Funktioniert nur für anonyme Benutzer. Unterstützt sowohl IPv4- als auch IPv6-Adressen.
ip_in_rangesGibt true zurück, wenn die IP des Benutzers (erste Zeichenkette) mit einem der angegebenen IP-Bereiche (folgende Zeichenketten in logischem ODER-Modus, kann in CIDR-Notation, expliziter Notation wie "1.1.1.1-2.2.2.2" oder eine einzelne IP sein) übereinstimmt. Funktioniert nur für anonyme Benutzer. Unterstützt sowohl IPv4- als auch IPv6-Adressen.
contains_anyGibt wahr zurück, wenn die erste Zeichenkette eine Zeichenkette aus den folgenden Argumenten enthält (unbegrenzte Anzahl von Argumenten in logischem ODER-Modus). Wenn das erste Argument ein Array ist, wird es in eine Zeichenkette umgewandelt.
contains_allGibt wahr zurück, wenn die erste Zeichenkette jede Zeichenkette aus den folgenden Argumenten enthält (unbegrenzte Anzahl von Argumenten in logischem UND-Modus). Wenn das erste Argument ein Array ist, wird es in eine Zeichenkette umgewandelt.
equals_to_anyGibt wahr zurück, wenn das erste Argument mit einem der folgenden identisch (===) ist (unbegrenzte Anzahl von Argumenten). Grundsätzlich ist equals_to_any(a, b, c) dasselbe wie a===b | a===c, aber es ist kompakter und spart Bedingungen.
substrGibt den Teil der ersten Zeichenkette nach dem Offset vom zweiten Argument (beginnt bei 0) und der maximalen Länge vom dritten Argument (optional) zurück.
strlenGleich wie length.
strpos Gibt die numerische Position des ersten Vorkommens der Nadel (zweite Zeichenkette) im Heuhaufen (erste Zeichenkette) zurück, beginnend beim Offset vom dritten Arguments (optional, Standard ist 0). Diese Funktion kann 0 zurückgeben, wenn die Nadel am Anfang des Heuhaufens gefunden wird, sodass sie von einem anderen Vergleichsoperator als falscher Wert fehlinterpretiert werden könnte. Besser ist es, === oder !== zu verwenden, um zu testen, ob es gefunden wird. 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_replaceErsetzt alle Vorkommen der Such-Zeichenkette durch die Ersetzungs-Zeichenkette. Die Funktion nimmt drei Argumente in der folgenden Reihenfolge entgegen: Text, nach dem gesucht werden soll, zu suchender Text, Ersetzungstext.
str_replace_regexpErsetzt mithilfe regulärer Ausdrücke alle Vorkommen der Such-Zeichenkette durch die Ersetzungs-Zeichenkette. Die Funktion nimmt drei Argumente in der folgenden Reihenfolge entgegen: Text, nach dem gesucht werden soll, übereinstimmender regulärer Ausdruck, Ersetzungstext.
rescapeGibt das Argument mit einigen Zeichen zurück, denen das Auslassungszeichen "\" vorangestellt ist, sodass die Zeichenkette in einem regulären Ausdruck verwendet werden kann, ohne dass diese Zeichen eine besondere Bedeutung haben.
setLegt eine Variable (erste Zeichenkette) mit einem gegebenen Wert (zweites Argument) zur weiteren Verwendung im Filter fest. Eine andere Syntax: name := value.
set_varGleich wie set.

Beispiele

Code Ergebnis Anmerkung
length( "Wikipedia" ) 9
lcase( "WikiPedia" ) wikipedia
ccnorm( "w1k1p3d14" ) WIKIPEDIA Ausgabe von ccnorm ist immer in Großbuchstaben
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 entfernt Leerzeichen, Sonderzeichen und Duplikate und verwendet dann 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']

Reihenfolge von Operationen

Operationen werden grundsätzlich von links nach rechts ausgeführt, es gibt jedoch eine Reihenfolge, in der sie aufgelöst werden. Sobald der Filter eine der Bedingungen nicht erfüllt, wird die Überprüfung der übrigen Bedingungen abgebrochen (aufgrund der Kurzschlussauswertung) und mit dem nächsten Filter fortgefahren. Die Auswertungsreihenfolge ist:

  1. Alles, was in Klammern steht (( und )), wird als einzelne Einheit ausgewertet.
  2. Umwandeln von Variablen/Literalen in die entsprechenden Daten (z. B. page_namespace in 0)
  3. Funktionsaufrufe (norm, lcase usw.)
  4. Unäres + und - (definieren positive oder negative Werte, z. B. -1234, +1234)
  5. Schlüsselwörter (in, rlike usw.)
  6. Boolesche Umkehrung (!x)
  7. Potenzierung (2**3 → 8)
  8. Multiplikationsbezogenes (Multiplikation, Division, Modulo)
  9. Addition und Subtraktion (3-2 → 1)
  10. Vergleiche (<, >, ==)
  11. Boolesche Operationen (&, |, ^)
  12. Ternärer Operator (... ? ... : ...)
  13. Zuordnungen (:=)

Beispiele

  • A & B | C entspricht (A & B) | C, nicht A & (B | C). Insbesondere ergeben sowohl false & true | true als auch false & false | true true.
  • A | B & C entspricht (A | B) & C, nicht A | (B & C). Insbesondere ergeben sowohl true | true & false als auch true | false & false false.
  • added_lines rlike "foo" + "|bar" ist falsch, verwende stattdessen added_lines rlike ("foo" + "|bar").

Zählung von Bedingungen

Die Bedingungsgrenze entspricht (mehr oder weniger) der Anzahl der Vergleichsoperatoren + der Anzahl der eingegebenen Funktionsaufrufe.

Weitere Erläuterungen zur Reduzierung der verwendeten Bedingungen finden sich unter Erweiterung:Missbrauchsfilter/Bedingungen.

Ausnahmen

Obwohl die Prüffunktion des Missbrauchsfilters "Zurücksetzungs"-Aktionen als Bearbeitungen identifiziert, wertet der Missbrauchsfilter Zurücksetzungs-Aktionen nicht auf Übereinstimmung aus.[11]

Anmerkungen

  1. Der Vergleich von Arrays mit anderen Typen gibt immer falsch zurück, außer im obigen Beispiel
  2. 1 2 3 4 5 6 7 8 Für das Hochladen von Dateien (action='upload') stehen aktuell nur die Variablen user_*, page_*, file_sha1, file_size, file_mime, file_mediatype, file_width, file_height, file_bits_per_channel zur Verfügung (die letzten fünf wurden erst seit der Veröffentlichung für MediaWiki 1.27 gerrit:281503 hinzugefügt). Alle Variablen mit file_* sind für andere Aktionen (einschließlich action='edit') nicht verfügbar.
  3. Seit MediaWiki 1.28 (gerrit:295254)
  4. Mehrere Filter (12), die diese Variable nutzen, wurden im Grafana-Dashboard AbuseFilterSlow angezeigt (zum Betrachten ist Logstash-Zugang erforderlich). Das Verschieben dieser Variable an das Ende des Filters hat anscheinend geholfen.
  5. Siehe phabricator:T191722
  6. Mit diesem Commit veraltet und mit diesem deaktiviert.
  7. Mehrere Filter, die diese Variable nutzen, wurden im Grafana-Dashboard AbuseFilterSlow angezeigt (Beispiel, zum Betrachten ist Logstash-Zugang erforderlich). Ziehe beispielsweise statt der Verwendung von "text" in edit_diff_pst (oder gar edit_diff) etwas wie "text" in added_lines & !("text" in removed_lines) in Erwägung
  8. Siehe den Quellcode für eine Liste von Typen.
  9. Bedenke phab:T27619. Du kannst Special:AbuseFilter/tools verwenden, um ccnorm( "your string" ) auszuwerten und so zu sehen, welche Zeichen konvertiert werden.
  10. https://3v4l.org/S6IGP
  11. T24713 - Zurücksetzung wird nicht von AF abgeglichen