Erweiterung:Missbrauchsfilter/Regelformat
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: | 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 + 1 |
2 |
2 * 2 |
4 |
1 / 2 |
0.5 |
9 ** 2 |
81 |
6 % 5 |
1 |
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
undnull > 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
undnull >= 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 == 2 |
false |
1 <= 2 |
true |
1 >= 2 |
false |
1 != 2 |
true |
1 < 2 |
true |
1 > 2 |
false |
2 = 2 |
true |
'' == false |
true |
'' === false |
false |
1 == true |
true |
1 === true |
false |
['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 & [] == null |
true |
['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
Beschreibung | Name | Datentyp | Anmerkungen |
---|---|---|---|
Aktion | action |
Zeichenkette | Eine der folgenden: edit, move, createaccount, autocreateaccount, delete, upload[2], stashupload[3] |
Unix-Zeitstempel der Änderung | timestamp |
Zeichenkette | int(timestamp) gibt dir eine Zahl, mit der du das Datum, die Zeit, den Wochentag, etc. berechnen kannst. |
Datenbankname des Wikis ($1) | wiki_name |
Zeichenkette | Dies ist beispielsweise "enwiki" in der englischsprachigen Wikipedia und "itwikiquote" im italienischen Wikiquote. |
Sprachcode des Wikis ($1) | wiki_language |
Zeichenkette | Dies 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_editcount |
Ganzzahl/null | Null nur für nicht registrierte Benutzer. |
Name des Benutzerkontos ($1) (IP in case the user is not registered) | user_name |
Zeichenkette | Nutze für die Aktionen "createaccount" und "autocreateaccount"
accountname , wenn du den Namen des erstellten Kontos erhalten möchtest. |
Typ des Benutzerkontos ($1) | user_type |
Zeichenkette | 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_emailconfirm |
Zeichenkette/null | Im Format: JJJJMMTTHHMMSS. Null, wenn die E-Mail nicht bestätigt wurde. |
Alter des Benutzerkontos ($1) | user_age |
Ganzzahl | In Sekunden. 0 für unangemeldete Benutzer. |
Ob der Benutzer gesperrt ist ($1) | user_blocked |
Wahrheitswert | True 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_groups |
Array von Strings | siehe Special:ListGroupRights |
Rechte, die ein Benutzer hat ($1) | user_rights |
Array von Zeichenketten | siehe Special:ListGroupRights |
Seitenkennnummer ($1) | article_articleid |
Ganzzahl | (veraltet) Verwende stattdessen page_id .
|
Seitenkennnummer ($1) (kann über den Link "Seiteninformation" in der Seitenleiste gesehen werden) | page_id |
Ganzzahl | Dies 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_namespace |
Ganzzahl | (veraltet) Verwende stattdessen page_namespace .
|
Namensraum der Seite ($1) | page_namespace |
Ganzzahl | bezieht 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_age |
Ganzzahl | die 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_text |
Zeichenkette | (veraltet) Verwende stattdessen page_title .
|
Titel der Seite ohne Namensraum ($1) | page_title |
Zeichenkette | |
Vollständiger Seitentitel ($1) | article_prefixedtext |
Zeichenkette | (veraltet) Verwende stattdessen page_prefixedtitle .
|
Vollständiger Seitentitel ($1) | page_prefixedtitle |
Zeichenkette | |
Bearbeiten-Schutzstufe der Seite ($1) | article_restrictions_edit |
Zeichenkette | (veraltet) Verwende stattdessen page_restrictions_edit .
|
Bearbeiten-Schutzstufe der Seite ($1) | page_restrictions_edit |
Array von Strings | |
Verschieben-Schutzstufe der Seite ($1) | article_restrictions_move |
Zeichenkette | (veraltet) Verwende stattdessen page_restrictions_move .
|
Verschieben-Schutzstufe der Seite ($1) | page_restrictions_move |
Array von Strings | |
Hochladeschutz der Datei ($1) | article_restrictions_upload |
Zeichenkette | (veraltet) Verwende stattdessen page_restrictions_upload .
|
Hochladeschutz der Datei ($1) | page_restrictions_upload |
Array von Strings | |
Erstellschutz der Seite ($1) | article_restrictions_create |
Zeichenkette | (veraltet) Verwende stattdessen page_restrictions_create .
|
Erstellschutz der Seite ($1) | page_restrictions_create |
Array von Strings | |
Die letzten zehn Bearbeiter der Seite ($1) | article_recent_contributors |
array of strings | (veraltet) Verwende stattdessen page_recent_contributors .
|
Die letzten zehn Bearbeiter der Seite ($1) | page_recent_contributors |
Array von Zeichenketten | Dies 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_contributor |
Zeichenkette | (veraltet) Verwende stattdessen page_first_contributor .
|
Erster Autor der Seite ($1) | page_first_contributor |
Zeichenkette | Dies 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
Beschreibung | Name | Datentyp | Anmerkungen |
---|---|---|---|
Zusammenfassung/Grund ($1) | summary |
Zeichenkette | Von 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] |
minor_edit |
Deaktiviert und für alle Einträge zwischen 2016 und 2018 auf falsch gesetzt.[6] | ||
Alter Wikitext der Seite, vor der Bearbeitung ($1) | old_wikitext |
Zeichenkette | Diese 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_wikitext |
Zeichenkette | Diese 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_diff |
Zeichenkette | |
Vereinigter Änderungsunterschied nach Bearbeitung, vor dem Speichern umgewandelt ($1) | edit_diff_pst |
Zeichenkette | Dies 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_size |
Ganzzahl | |
Alte Seitengröße ($1) | old_size |
Ganzzahl | |
Größenänderung der Bearbeitung ($1) | edit_delta |
Ganzzahl | |
Zeilen in der Bearbeitung hinzugefügt, vor dem Speichern umgewandelt ($1) | added_lines_pst |
Array von Strings | Nutze wenn möglich added_lines , was effizienter ist.
|
Durch die Bearbeitung hinzugefügte Zeilen ($1) | added_lines |
Array von Strings | enthält alle Zeilen im letzten Versionsunterschied, die mit + anfangen |
Durch die Bearbeitung entfernte Zeilen ($1) | removed_lines |
Array von Strings | |
Alle externen Links im neuen Text ($1) | all_links |
Array von Zeichenketten | Dies ist meist langsam (siehe #Leistung). |
Links der Seite, vor der Bearbeitung ($1) | old_links |
Array von Strings | Dies ist meist langsam (siehe #Leistung). |
Alle durch die Bearbeitung hinzugefügten externen Links ($1) | added_links |
Array von Zeichenketten | Dies 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_links |
Array von Strings | Dies 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_pst |
Zeichenkette | Diese Variable kann sehr groß sein. |
HTML-Quelltext der neuen Version ($1) | new_html |
Zeichenkette | Diese 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_text |
Zeichenkette | Diese Variable kann sehr groß sein. Ziehe zur Verbesserung der Leistung wenn möglich die Verwendung von added_lines in Erwägung.
|
old_html |
Aus Gründen der Leistung deaktiviert. | ||
old_text |
Aus Gründen der Leistung deaktiviert. | ||
Zeit seit der letzten Seitenbearbeitung in Sekunden ($1) | page_last_edit_age |
Ganzzahl oder null |
null wenn die Seite nicht existiert
|
SHA1-Hash von Dateiinhalt ($1) | file_sha1 |
Zeichenkette | [2] |
Dateigröße in Bytes ($1) | file_size |
Ganzzahl | Die Dateigröße in Bytes[2] |
Breite der Datei in Pixel ($1) | file_width |
Ganzzahl | Die Breite in Pixeln[2] |
Höhe der Datei in Pixel ($1) | file_height |
Ganzzahl | Die Höhe in Pixeln[2] |
Bits pro Farbkanal der Datei ($1) | file_bits_per_channel |
Ganzzahl | Die Anzahl von Bits je Farbkanal[2] |
MIME-Typ der Datei ($1) | file_mime |
Zeichenkette | Der MIME-Typ der Datei.[2] |
Medientyp der Datei ($1) | file_mediatype |
Zeichenkette | Der Medientyp der Datei.[8][2] |
Seiten-ID der Zielseite ($1) | moved_to_articleid |
Ganzzahl | (veraltet) Verwende stattdessen moved_to_id .
|
Seiten-ID der Zielseite ($1) | moved_to_id |
Ganzzahl | |
Titel der Zielseite ($1) | moved_to_text |
Zeichenkette | (veraltet) Verwende stattdessen moved_to_title .
|
Titel der Zielseite ($1) | moved_to_title |
Zeichenkette | |
Vollständiger Titel der Zielseite ($1) | moved_to_prefixedtext |
Zeichenkette | (veraltet) Verwende stattdessen moved_to_prefixedtitle .
|
Vollständiger Titel der Zielseite ($1) | moved_to_prefixedtitle |
Zeichenkette | |
Namensraum der Zielseite ($1) | moved_to_namespace |
Ganzzahl | |
Verschiebe-Zielseiten-Alter in Sekunden ($1) | moved_to_age |
Ganzzahl | |
Zeit seit der letzten Änderung der Zielseite in Sekunden ($1) | moved_to_last_edit_age
|
Ganzzahl oder null |
null wenn die Zielseite nicht existiert
|
Bearbeitungs-Schutzstatus der Verschiebe-Zielseite ($1) | moved_to_restrictions_edit |
Array von Zeichenketten | Selbes wie page_restrictions_edit , jedoch für das Ziel der Verschiebung.
|
Verschiebe-Schutzstatus der Verschiebe-Zielseite ($1) | moved_to_restrictions_move |
Array von Zeichenketten | Selbes wie page_restrictions_move , jedoch für das Ziel der Verschiebung.
|
Hochladeschutz der Verschiebe-Zieldatei ($1) | moved_to_restrictions_upload |
Array von Zeichenketten | Selbes wie page_restrictions_upload , jedoch für das Ziel der Verschiebung.
|
Erstellschutz der Verschiebe-Zielseite ($1) | moved_to_restrictions_create |
Array von Zeichenketten | Selbes wie page_restrictions_create , jedoch für das Ziel der Verschiebung.
|
Letzte zehn Benutzer, die zur Verschiebung der Zielseite beitragen ($1) | moved_to_recent_contributors |
Array von Strings | Selbes wie page_recent_contributors , jedoch für das Ziel der Verschiebung.
|
Erster Benutzer, der zur Verschiebung der Zielseite beiträgt ($1) | moved_to_first_contributor |
Zeichenkette | Selbes wie page_first_contributor , jedoch für das Ziel der Verschiebung.
|
Namensraum der Quellseite ($1) | moved_from_namespace |
Ganzzahl | |
Titel der Quellseite ($1) | moved_from_text |
Zeichenkette | (veraltet) Verwende stattdessen moved_from_title .
|
Titel der Quellseite ($1) | moved_from_title |
Zeichenkette | |
Vollständiger Titel der Quellseite ($1) | moved_from_prefixedtext |
Zeichenkette | (veraltet) Verwende stattdessen moved_from_prefixedtitle .
|
Vollständiger Titel der Quellseite ($1) | moved_from_prefixedtitle |
Zeichenkette | |
Seiten-ID der Quellseite ($1) | moved_from_articleid |
Ganzzahl | (veraltet) Verwende stattdessen moved_from_id .
|
Seiten-ID der Quellseite ($1) | moved_from_id |
Ganzzahl | |
Verschiebe-Quellseiten-Alter in Sekunden ($1) | moved_from_age |
Ganzzahl | |
Zeit seit der letzten Änderung der Quellseite in Sekunden ($1) | moved_from_last_edit_age |
Ganzzahl | |
Bearbeitungs-Schutzstatus der Verschiebe-Quellseite ($1) | moved_from_restrictions_edit |
Array von Zeichenketten | Selbes wie page_restrictions_edit , jedoch für die Seite, die verschoben wird.
|
Verschiebe-Schutzstatus der Verschiebe-Quellseite ($1) | moved_from_restrictions_move |
Array von Zeichenketten | Selbes wie page_restrictions_move , jedoch für die Seite, die verschoben wird.
|
Hochladeschutz der Verschiebe-Quelldatei ($1) | moved_from_restrictions_upload |
Array von Zeichenketten | Selbes wie page_restrictions_upload , jedoch für die Seite, die verschoben wird.
|
Erstellschutz der Verschiebe-Quellseite ($1) | moved_from_restrictions_create |
Array von Zeichenketten | Selbes 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_contributors |
Array von Strings | Selbes 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_contributor |
Zeichenkette | Selbes wie page_first_contributor , jedoch für die Seite, die verschoben wird.
|
Kontoname bei Kontoerstellung ($1) | accountname |
Zeichenkette | |
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. |
Variablen aus anderen Erweiterungen
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 | translate_source_text
|
Zeichenkette | Übersetzen | |
Zielsprache für die Übersetzung | 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[1] | article_views
|
Ganzzahl | (veraltet) Verwende stattdessen page_views .
|
HitCounters |
Seitenaufrufe[2] | page_views
|
Ganzzahl | Die Anzahl der Seitenaufrufe | HitCounters |
Aufrufe der Quellseite[3] | moved_from_views
|
Ganzzahl | Die Anzahl der Aufrufe der Quellseite | HitCounters |
Aufrufe der Zielseite[4] | moved_to_views
|
Ganzzahl | Die Anzahl der Aufrufe der Zielseite | HitCounters |
Ob die IP-Adresse mittels der Liste stopforumspam.com gesperrt ist[5] | sfs_blocked
|
Wahrheitswert | Ob die IP-Adresse mittels der Liste stopforumspam.com gesperrt ist | StopForumSpam |
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 (beispielsweiseadded_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, obadded_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
Für häufig verwendete Funktionen sind die folgenden speziellen Schlüsselwörter enthalten:
like
(odermatches
) 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 wiein
, 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
(oderregex
) undirlike
geben wahr zurück, wenn der linke Operand mit dem Regex-Muster im rechten Operanden übereinstimmt (es enthält) (beiirlike
wird die Groß-/Kleinschreibung nichtbeachtet).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.
Name | Beschreibung |
---|---|
lcase |
Gibt das in Kleinbuchstaben umgewandelte Argument zurück. |
ucase |
Gibt das in Großbuchstaben umgewandelte Argument zurück. |
length |
Gibt die Länge der als Argument angegebenen Zeichenkette zurück. Wenn das Argument ein Array ist, gibt es seine Anzahl der Elemente zurück. |
string |
Konvertiert in den Zeichenketten-Datentyp. Wenn das Argument ein Array ist, wird es durch Zeilenumbrüche getrennt. |
int |
Konvertiert in den Ganzzahl-Datentyp. |
float |
Konvertiert in den Gleitkommazahl-Datentyp. |
bool |
Konvertiert 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.
|
specialratio |
Gibt die Anzahl der nicht alphanumerischen Zeichen geteilt durch die Gesamtzahl der Zeichen im Argument zurück. |
rmspecials |
Entfernt alle Sonderzeichen im Argument und gibt das Ergebnis zurück. Entfernt keine Leerzeichen. (Äquivalent zu s/[^\p{L}\p{N}\s]//g.) |
rmdoubles |
Entfernt wiederholte Zeichen im Argument und gibt das Ergebnis zurück. |
rmwhitespace |
Entfernt Leerzeichen (Leerzeichen, Tabulatoren, Zeilenumbrüche). |
count |
Gibt 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_range |
Gibt 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_ranges |
Gibt 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_any |
Gibt 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_all |
Gibt 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_any |
Gibt 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.
|
substr |
Gibt 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. |
strlen |
Gleich 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_replace |
Ersetzt 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_regexp |
Ersetzt 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. |
rescape |
Gibt 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. |
set |
Legt eine Variable (erste Zeichenkette) mit einem gegebenen Wert (zweites Argument) zur weiteren Verwendung im Filter fest. Eine andere Syntax: name := value .
|
set_var |
Gleich 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:
- Alles, was in Klammern steht (
(
und)
), wird als einzelne Einheit ausgewertet. - Umwandeln von Variablen/Literalen in die entsprechenden Daten (z. B.
page_namespace
in 0) - Funktionsaufrufe (
norm
,lcase
usw.) - Unäres
+
und-
(definieren positive oder negative Werte, z. B.-1234
,+1234
) - Schlüsselwörter (
in
,rlike
usw.) - Boolesche Umkehrung (
!x
) - Potenzierung (
2**3 → 8
) - Multiplikationsbezogenes (Multiplikation, Division, Modulo)
- Addition und Subtraktion (
3-2 → 1
) - Vergleiche (
<
,>
,==
) - Boolesche Operationen (
&
,|
,^
) - Ternärer Operator (
... ? ... : ...
) - Zuordnungen (
:=
)
Beispiele
A & B | C
entspricht(A & B) | C
, nichtA & (B | C)
. Insbesondere ergeben sowohlfalse & true | true
als auchfalse & false | true
true
.A | B & C
entspricht(A | B) & C
, nichtA | (B & C)
. Insbesondere ergeben sowohltrue | true & false
als auchtrue | false & false
false
.added_lines rlike "foo" + "|bar"
ist falsch, verwende stattdessenadded_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]
Nützliche Links
- Syntax von PCRE-Mustern
- Wikiübergreifend interessante Bearbeitungsfilter
- Erweiterung:Missbrauchsfilter/Bedingungen
Anmerkungen
- ↑ Der Vergleich von Arrays mit anderen Typen gibt immer falsch zurück, außer im obigen Beispiel
- ↑ 2.0 2.1 2.2 2.3 2.4 2.5 2.6 2.7 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.
- ↑ Seit MediaWiki 1.28 (gerrit:295254)
- ↑ 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.
- ↑ Siehe phabricator:T191722
- ↑ Mit diesem Commit veraltet und mit diesem deaktiviert.
- ↑ 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 garedit_diff
) etwas wie"text" in added_lines & !("text" in removed_lines)
in Erwägung - ↑ Siehe den Quellcode für eine Liste von Typen.
- ↑ Bedenke phab:T27619. Du kannst Special:AbuseFilter/tools verwenden, um
ccnorm( "your string" )
auszuwerten und so zu sehen, welche Zeichen konvertiert werden. - ↑ https://3v4l.org/S6IGP
- ↑ T24713 - Zurücksetzung wird nicht von AF abgeglichen