Extension:AbuseFilter
AbuseFilter État de la version : stable |
|
---|---|
Implémentation | Activité utilisateur , Page spéciale , API |
Description | Permet de placer des restrictions spécifiques basées sur des comportements sur le wiki. |
Auteur(s) |
|
Politique de compatibilité | Versions ponctuelles alignées avec MediaWiki. Le master n'est pas compatible arrière. |
MediaWiki | >= 1.43.0 |
Modifie la base de données |
Oui |
Composer | mediawiki/abuse-filter |
Tables | abuse_filter abuse_filter_action abuse_filter_history abuse_filter_log |
Licence | Licence publique générale GNU v2.0 ou supérieur |
Téléchargement | |
|
|
|
|
|
|
|
|
Téléchargements trimestriels | 131 (Ranked 41st) |
Utilisé par les wikis publics | 2,939 (Ranked 186th) |
Traduire l’extension AbuseFilter sur translatewiki.net si elle y est disponible | |
Problèmes | Tâches ouvertes · Signaler un bogue |
L’extension AbuseFilter (filtre anti-abus) permet aux utilisateurs privilégiés de positionner des contrôles spécifiques sur les actions des utilisateurs tels que les contributions et de créer des réactions automatiques pour certains comportements.
Par exemple, un filtre peut être créé pour empêcher que certains utilisateurs anonymes n'ajoutent des liens externes , ou pour bloquer un utilisateur qui supprime plus de 2000 caractères.
Installation
- Téléchargez et placez le(s) fichier(s) dans un répertoire appelé
AbuseFilter
dans votre dossierextensions/
.
Les développeurs et les contributeurs au code doivent à la place installer l'extension à partir de Git en utilisant:cd extensions/
git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/AbuseFilter - Seulement lorsque vous installez à partir de Git, exécutez Composer pour installer les dépendances PHP, en entrant
composer install --no-dev
après vous être positionné dans le répertoire de l'extension. (Voir tâche T173141 pour des complications potentielles.) - Ajoutez le code suivant à la fin de votre fichier LocalSettings.php :
wfLoadExtension( 'AbuseFilter' );
- Exécutez le script de mise à jour qui va créer automatiquement les tables de base de données dont cette extension a besoin.
- Configurer si nécessaire.
- Fait – Accédez à Special:Version sur votre wiki pour vérifier que l'extension a bien été installée.
Ainsi, après l'installation depuis Git, allez dans le répertoire contenant l'extension, par exemple "../extensions/AbuseFilter/" et exécutez composer install --no-dev
, ou lors de la mise à jour : composer update --no-dev
.
Alternativement et de préférence, ajoutez la ligne "extensions/AbuseFilter/composer.json"
au fichier « composer.local.json » dans le répertoire racine de votre wiki comme par exemple
{
"extra": {
"merge-plugin": {
"include": [
"extensions/AbuseFilter/composer.json"
]
}
}
}
Configuration
Droits utilisateur
Une fois que vous avez installé l’extension, vous devez paramétrer les droits utilisateur dans "LocalSettings.php".
Droit | Description | Notes | User groups that have this right by default |
---|---|---|---|
abusefilter-modify | Créer ou modifier les filtres anti-abus | Requires the abusefilter-view right
|
sysop |
abusefilter-view | Voir les filtres anti-abus | * | |
abusefilter-log | Voir le journal des filtres anti-abus | * | |
abusefilter-log-detail | Voir les entrées détaillées du journal anti-abus | Requires the abusefilter-log right
|
sysop |
abusefilter-privatedetails | Voir les données privées dans le journal anti-abus | Prior to 1.34 this right was named abusefilter-private - Requires the abusefilter-log-detail right
|
— |
abusefilter-modify-restricted | Modifier les filtres anti-abus qui ont des actions restreintes | Requires the abusefilter-modify right
|
sysop |
abusefilter-modify-global | Créer ou modifier des filtres anti-abus globaux | Requires the abusefilter-modify right
|
— |
abusefilter-revert | Révoquer toutes les modifications effectuées par un filtre anti-abus donné | sysop | |
abusefilter-view-private | Voir les filtres anti-abus marqués comme privés | Requires the abusefilter-view right (not needed if the group already has the abusefilter-modify right)
|
sysop |
abusefilter-log-private | Voir les entrées du journal des filtres anti-abus marqués comme privés | Requires the abusefilter-log right (not needed if the group already has the abusefilter-modify or abusefilter-view-private rights)
|
sysop |
abusefilter-hide-log | Masquer des entrées dans le journal anti-abus | Requires the abusefilter-log right
|
suppress |
abusefilter-hidden-log | Voir les entrées masquées du journal anti-abus | Requires the abusefilter-log right
|
suppress |
abusefilter-privatedetails-log | Afficher les détails confidentiels du journal des filtres anti-abus | Prior to 1.34 this right was named abusefilter-private-log
|
— |
abusefilter-modify-blocked-external-domains | Créer ou modifier la liste des domaines externes vers lesquels les liens sont bloqués | sysop | |
abusefilter-bypass-blocked-external-domains | Contourner les domaines externes bloqués | Requires the edit right
|
bot |
Par exemple, la configuration d’exemple suivante permet aux sysops de faire tout ce qu’ils veulent avec AbuseFilter, et tout le monde peut voir les journaux et les paramètres publics du filtre :
$wgGroupPermissions['sysop']['abusefilter-modify'] = true;
$wgGroupPermissions['*']['abusefilter-log-detail'] = true;
$wgGroupPermissions['*']['abusefilter-view'] = true;
$wgGroupPermissions['*']['abusefilter-log'] = true;
$wgGroupPermissions['sysop']['abusefilter-privatedetails'] = true;
$wgGroupPermissions['sysop']['abusefilter-modify-restricted'] = true;
$wgGroupPermissions['sysop']['abusefilter-revert'] = true;
abusefilter-modify
ou abusefilter-view-private
.
Paramètres
Nom de la variable | Valeur par défaut | Description |
---|---|---|
$wgAbuseFilterActions
|
[
'throttle' => true,
'warn' => true,
'disallow' => true,
'blockautopromote' => true,
'block' => true,
'rangeblock' => false,
'degroup' => false,
'tag' => true
]
|
Actions possibles que peuvent faire les filtres anti-abus. Lors de l'ajout d'une nouvelle action, vérifiez si elle est restreinte dans $wgAbuseFilterActionRestrictions et, si c'est le cas, n'oubliez pas d'ajouter le droit abusefilter-modify-restricted aux groupes d'utilisateurs appropriés.
|
$wgAbuseFilterConditionLimit
|
1000
|
Nombre maximum de 'conditions' qui peuvent être utilisées à chaque fois que les filtres sont exécutés sur une modification. (Les filtres plus complexes demandent davantage de 'conditions'.) |
$wgAbuseFilterValidGroups
|
[
'default'
]
|
Liste des groupes de filtres dans lesquels ils peuvent être classés. Par défaut il n'existe qu'un seul groupe. D'autres extensions peuvent ajouter des groupes supplémentaires. |
$wgAbuseFilterEmergencyDisableThreshold
|
[
'default' => 0.05
]
|
Désactiver les filtres s’ils sont déclenchés sur plus de 2 modifications, constituant plus de 5 % des actions vérifiées avec le groupe de filtres durant la période d'observation choisie (le plus souvent un jour), et que le filtre ait été modifié dans les 86400 dernières secondes (un jour). Voir la limitation d'urgence. |
$wgAbuseFilterEmergencyDisableCount
|
[
'default' => 2
]
| |
$wgAbuseFilterEmergencyDisableAge
|
[
'default' => 86400
]
| |
$wgAbuseFilterActionRestrictions
|
[
"throttle" => false,
"warn" => false,
"disallow" => false,
"blockautopromote" => true,
"block" => true,
"rangeblock" => true,
"degroup" => true,
"tag" => false
]
|
Les utilisateurs doivent avoir le droit utilisateur abusefilter-modify-restricted ainsi que abusefilter-modify pour pouvoir créer ou modifier les filtres que supposent ces actions.
|
$wgAbuseFilterNotifications
|
false
|
Permet de configurer l'extension pour envoyer des notifications de déclenchement vers Special:RecentChanges ou vers UDP. Options disponibles : rc, udp, rcandudp
Pour envoyer les modifications des fitres anti-abus sur Special:RecentChanges, utiliser
unset($wgLogRestrictions['abusefilter']); . |
$wgAbuseFilterNotificationsPrivate
|
false
|
Autoriser les notifications pour les filtres privés. |
$wgAbuseFilterCentralDB
|
null
|
MW 1.41+ Nom de la base de données où les filtres anti-abus sont stockés (supporté uniquement dans la dernière version de développement). Cela nécessite que CentralAuth soit installé, autrement les filtres globaux ne fonctionneront pas dans une ferme de wikis. |
$wgAbuseFilterIsCentral
|
false
|
MW 1.41+ Positionnez cette variable à true pour le wiki où les filtres globaux anti-abus sont stockés (supporté uniquement dans la dernière version de développement). Cela nécessite que CentralAuth soit installé, autrement les filtres globaux ne fonctionneront pas dans une ferme de wikis.
|
$wgAbuseFilterLocallyDisabledGlobalActions
|
[
"throttle" => false,
"warn" => false,
"disallow" => false,
"blockautopromote" => false,
"block" => false,
"rangeblock" => false,
"degroup" => false,
"tag" => false
]
|
Interdire aux filtres centralisés d'effectuer des actions définies comme true dans cette variable. |
$wgAbuseFilterBlockDuration
|
'indefinite'
|
Durée des blocages faits par le filtre anti-abus.
A partir de 1.31.0-wmf.25, les durées de blocage peuvent être spécifiées indépendamment pour chaque filtre et remplacent cette variable. Cette variable est uniquement utilisée lors de l'activation du blocage afin de présélectionner une durée par défaut.
|
$wgAbuseFilterAnonBlockDuration
|
null
|
Durée des blocages décidés par AbuseFilter pour les utilisateurs anonymes; la valeur de $wgAbuseFilterBlockDuration sera utilisée si cette durée n'est pas initialisée.
A partir de 1.31.0-wmf.25, les durées des blocages peuvent être spécifiées pour chaque filtre indépendamment et remplacent cette variable. Cette variable est uniquement utilisée lors de l'activation du blocage afin de présélectionner une durée par défaut.
|
$wgAbuseFilterBlockAutopromoteDuration
|
5
|
Durée en jours pendant laquelle les filtres empêchent l'autopromotion de l'utilisateur. |
$wgAbuseFilterDefaultWarningMessage
|
[
'default' => 'abusefilter-warning'
]
|
Messages d'avertissement par défaut, par groupe de filtrage. |
$wgAbuseFilterDefaultDisallowMessage
|
[
'default' => 'abusefilter-disallowed'
]
|
Messages d'interdiction par défaut, per groupe de filtre |
$wgAbuseFilterLogIP
|
true
|
Inclure ou non l’adresse IP dans le journal d’Abuse Filter (abuse_filter_log) |
$wgAbuseFilterLogIPMaxAge
|
3 * 30 * 24 * 3600
|
Durée utilisée comme limite pour purger les anciennes données journalisées par adresse IP. Par défaut : 3 mois. Utilisé par le script de maintenance purgeOldLogIPData.php .
|
$wgAbuseFilterProfileActionsCap
|
10000
|
Nombre d'actions qui déterminent quand il faut réinitialiser les statistiques de profilage. |
$wgAbuseFilterLogPrivateDetailsAccess
|
false
|
indique s'il faut tracer l'accès aux informations privées à partir d'une entrée de journal du filtre. |
$wgAbuseFilterPrivateDetailsForceReason
|
false
|
indique si les utilisateurs sont obligés de fournir un motif pour accéder aux données privées à partir d'une entrée de journal du filtre. |
$wgAbuseFilterSlowFilterRuntimeLimit
|
500
|
Temps d’exécution en millisecondes autorisé avant que le filtre soit considéré comme lent. |
$wgAbuseFilterRangeBlockSize
|
[
'IPv4' => '16',
'IPv6' => '19',
]
|
Taille de la plage bloquée par l’action « rangeblock ». |
Limitation d'urgence
AbuseFilter est livré avec une fonctionnalité qui limite automatiquement (désactive) les filtres qui ont été dernièrement modifiés et qui vérifient un certain seuil d'actions récentes.
Ceci est fait pour empêcher les modifications nuisibles sur les filtres, pour bloquer chaque utilisateur réalisant une action sur le wiki ou similaire.
La condition pour désactiver le filtre dépend de ces variables :
$wgAbuseFilterEmergencyDisableThreshold
- Pourcentage de déclenchements du filtre sur le nombre total d'actions durant la période d'observation.$wgAbuseFilterEmergencyDisableCount
- compte le nombre de fois où le filtre s'est déclenché pendant la période d'observation.$wgAbuseFilterEmergencyDisableAge
- Age du filtre pour le prendre en compte. Si la dernière modification du filtre est plus ancienne que ce nombre de secondes, le filtre ne sera pas limité - à moins qu'il ne le soit déjà.
Les filtres de limitation peuvent être identifiés dans la liste des filtres (Special:AbuseFilter) avec l'état Activé, Taux élevé de correspondances. La limitation se fait silencieusement, et il n'est pas possible de voir quand un filtre est limité.
Lorsqu'un filtre est limité, il n'exécute aucune action dangereuse (actions généralement limitées à des droits spéciaux comme le blocage de l'utilisateur ou sa suppression de groupes, contrôlés par $wgAbuseFilterActionRestrictions), et seules les actions "sûres" sont autorisées (celles qui peuvent avertir ou empêcher l'action en cours). Les filtres de limitation ne sont pas activés automatiquement. Pour désactiver la limitation, vous devez modifier les filtres. Notez que vous devez modifier actuellement quelque chose dans le filtre : mettre à jour ses commentaires est suffisant.
Notez que si vous modifiez le filtre, vous modifiez également son age, et vous pourrez provoquer éventuellement sa désactivation s'il satisfait aux conditions pour être limité durant une courte période depuis la dernière modification, ce qui en fait un filtre non utilisable si votre wiki reçoit davantage de modifications abusives que de modifications légitimes.
Créer et gérer les filtres
Une fois l’extension installée, les filtres peuvent être créés, testés, changés, effacés, et on peut accéder aux journaux depuis la page de gestion du filtre anti-abus Special:AbuseFilter.
- Le format des règles - les bases sur la manière d'écrire un filtre
- Actions
- Règles globales
- Guide pour optimiser l'utilisation des conditions aux limites
- Pour importer des filtres depuis Wikipédia : lorsque vous avez installé l’extension, allez sur Special:AbuseFilter, choisissez un filtre (par exemple Special:AbuseFilter/3), cliquez sur « Exporter ce filtre vers un autre wiki », copiez le texte, allez sur « Special:AbuseFilter/import » sur votre wiki et collez le texte.
- m:Small wiki toolkits/Starter kit/AbuseFilter - Un guide pour les petites communautés wiki sur metawiki
API
Le filtre anti-abus ajoute deux modules dans l’API list, un relatif aux détails du filtre anti-abus (abusefilters) et un relatif au journal des filtrages puisque celui-ci est séparé des autres journaux MediaWiki (abuselog). Il n’est pas possible de créer ou de modifier des filtres anti-abus à partir de l’API.
list = abusefilters
Liste les informations sur les filtres
- Paramètres
abfstartid
- identifiant du filtre où commencer l’énumérationabfendid
- identifiant du filtre où terminer l’énumérationabfdir
- direction dans laquelle se fait l’énumération (older, newer = vers le plus ancien, vers le plus récent)abfshow
- ne montrer que les filtres qui répondent à ces critères (enabled|!enabled|deleted|!deleted|private|!private = activé|!activé|effacé|!effacé|privé|!privé)abflimit
- nombre maximum de filtres dans la listeabfprop
- quelles propriétés afficher (id|description|pattern|actions|hits|comments|lasteditor|lastedittime|status|private = identifiant|description|motif|actions|nombre d’activations|commentaires|dernier contributeur|date de dernière modification|statut|privé)
Quand les filtres sont privés, quelques-unes des propriétés spécifiées avec abfprop
seront manquantes à moins que vous n’ayez les droits utilisateur appropriés.
- Exemples
Résultat |
---|
{
"batchcomplete": "",
"continue": {
"abfstartid": 18,
"continue": "-||"
},
"query": {
"abusefilters": [
{
"id": 1,
"hits": 41430
},
{
"id": 3,
"hits": 957485
},
{
"id": 5,
"hits": 5931
},
{
"id": 6,
"hits": 19
},
{
"id": 8,
"hits": 7
},
{
"id": 9,
"hits": 41354
},
{
"id": 11,
"hits": 132971
},
{
"id": 12,
"hits": 139693
},
{
"id": 14,
"hits": 63
},
{
"id": 15,
"hits": 15
}
]
}
}
|
list = abuselog
Liste les instances où des actions ont actionné un filtre anti-abus.
- Paramètres
aflstart
- identifiant du filtre où commencer l’énumérationaflend
- identifiant du filtre où terminer l’énumérationafldir
- direction dans laquelle se fait l’énumération (older, newer = vers le plus vieux, vers le plus récent)afluser
- ne montrer que les entrées où l’action est testée pour un utilisateur ou une IP donné.afltitle
- ne montrer que les entrées où l’action est testée pour une page donnée.aflfilter
- ne montrer que les entrées actionnées par un identifiant de filtre donnéafllimit
- nombre maximum d’entrées dans la listeaflprop
- quelles propriétés afficher: (ids|filter|user|ip|title|action|details|result|timestamp|hidden|revid|wiki)
- Exemple
Résultat |
---|
{
"batchcomplete": "",
"continue": {
"aflstart": "2018-03-06T02:34:18Z",
"continue": "-||"
},
"query": {
"abuselog": [
{
"id": 27219261,
"filter_id": "1073"
},
{
"id": 26938051,
"filter_id": ""
},
{
"id": 23388942,
"filter_id": "1"
},
{
"id": 22044912,
"filter_id": ""
},
{
"id": 22032235,
"filter_id": ""
},
{
"id": 22032196,
"filter_id": ""
},
{
"id": 21983882,
"filter_id": ""
},
{
"id": 20594818,
"filter_id": "904"
},
{
"id": 20593489,
"filter_id": "904"
},
{
"id": 20590442,
"filter_id": "904"
}
]
}
}
|
Erreurs potentielles
- Certains utilisateurs peuvent s'apercevoir que créer de nouveaux filtres ou en modifier des anciens ne fonctionne pas et ils sont redirigés simplement vers la page d'origine. Si le wiki utilise des certificats SSL, cette erreur peut être éventuellement dûe à la valeur de
$wgServer
, qui peut utiliser « http:// » au lieu de « https:// » . Une indication de cette erreur sera que le navigateur affichera un avertissement https pour les pages Special:AbuseFilter. (Topic:T23dyyih0ofjada5)
Integration avec d'autres extensions
Vous pouvez intégrer AbuseFilter avec d'autres extensions de différentes manières.
Ajouter des variables pour le filtrage
Il est possible d'ajouter de nouvelles variables à utiliser dans les filtres anti-abus. Une liste d'exemples est disponible . Pour faire cela, vous devez :
- Ajoutez un gestionnaire pour l'accroche AbuseFilter-builder . Pour ajouter une variable, vous devez utiliser
$builder['vars']['variable_name'] = 'i18n-key';
, oùvariable_name
est le nom de la variable, eti18n-key
est le fragment d'une clé i18n. La clé complète seraabusefilter-edit-builder-vars-{$your_key}
. - Ajouter les messages i18n que vous avez choisis à l'étape précédente.
- Choisissez un gestionnaire d'accroche pour lequel la variable sera calculée. En fonction de votre cas d'utilisation, vous pouvez :
- Implémente l'accroche AbuseFilter-generateTitleVars ; ceci est fait particulièrement pour les variables relatives aux pages;
- Implémente l'accroche AbuseFilter-generateUserVars ; ceci est fait particulièrement pour les variables relatives aux utilisateurs;
- Implémenter l’accroche AbuseFilter-generateGenericVars (cela sert pour les variables non liées à une page spécifique ou à un utilisateur) ;
- Implémentez l'accroche AbuseFilterAlterVariables ; ceci est un peu plus flexible que les autres accroches, mais il a un inconvénient : votre variable ne sera pas disponible lorsque vous examinerez les dernière entrées des modifications récentes réalisées. Si vous voulez implémenter cette fonctionnalité (et il est recommandé de le faire), vous devez utiliser l'une des accroches décrites ci-dessus, et son troisième paramètre (
$RCRow
).
- A l'intérieur du gestionnaire associé à l'accroche, il existe deux façons d'ajouter une variable :
- La manière directe est d'appeler
$vars->setVar( 'var_name', var_value );
. Ceci est l'idéal uniquement quand la valeur est facile et rapide à évaluer : la valeur est évaluée même si aucun filtre actif ne l'utilise. - La manière paresseuse est d'appeler
$vars->setLazyLoadVar( 'var_name', 'method_name', $params );
. Ici, 'method_name' est un identifiant (unique) qui sera utilisé pour évaluer la variable (il est recommandé de le préfixer en lui ajoutant le nom de votre extension). Pour enregistrer la méthode, vous devez ajouter un gestionnaire à l'accroche AbuseFilter-computeVariable ; de là vous devez contrôler si la $method passée correspond à 'method_name' et si c'est le cas, vous évaluez la variable. Enfin, $params est un tableau de paramètres dont vous aurez besoin pour évaluer la variable; ceux-ci sont passés au gestionnaire de l'accrochecomputeVariable
. Pour un exemple de ceci, voyez leglobal_user_groups
de CentralAuth.
- La manière directe est d'appeler
Ajouter des actions personnalisées
Vous pouvez ajouter des gestionnaires d’actions personnalisées, afin que les filtres puissent effectuer d’autres actions. Pour ce faire, choisissez un nom pour votre action (« my-action » ici), puis :
- Créez une classe nommée par ex. MyAction, qui doit hériter de \MediaWiki\Extension\AbuseFilter\Consequence et qui peut implémenter HookAborterConsequence ou ConsequencesDisablerConsequence.
- Enregistrez une fonction à l’accroche AbuseFilterCustomActions ; la fonction doit fournir, comme indiqué dans la documentation de l’accroche, un callback qui renvoie une instance de la classe créée ci-dessus. Par exemple :
class MyAction extends \MediaWiki\Extension\AbuseFilter\Consequence {
public function run() {
throw new \Exception( 'Write me' );
}
}
public function onAbuseFilterCustomActions( &$actions ) {
$actions[] = function ( \MediaWiki\Extension\AbuseFilter\Consequence\Parameters $params, array $rawParams ) : MyConsequence {
return new MyAction( $params, $rawParams );
};
}
Ensuite, vous devez ajouter les messages i18n suivants. Vous pouvez remplacer « my_action » avec par exemple « block » afin de voir à quoi servent ces messages.
'abusefilter-edit-action-${my_action}'
'abusefilter-action-${my_action}'
Ajouter des groupes de règles
Vous pouvez aussi ajouter des groupes de règles supplémentaires, qui peuvent être utilisés pour regrouper les filtres anti-abus existants. Notez qu'actuellement, chaque filtre ne peut se trouver que dans un seul groupe à la fois (T116642). Actuellement, le seul consommateur connu de cette fonctionnalité sont les Extension:StructuredDiscussions . Pour faire cela vous devez :
- Ajouter le nom du groupe à
$wgAbuseFilterValidGroups
- Ajouter du code pour exécuter les filtres avec votre groupe. Notez que AbuseFilter ne fera pas cela tout seul. Pour cela, vous devez construire un objet
AbuseFilterRunner
en lui passant le nom de votre groupe.
Voir aussi
- Nombreux wikis WMF où il est activé (et avec quelle configuration)
Cette extension est utilisée par au moins un des projets Wikimédia. Cela signifie probablement que l’extension est assez stable et fonctionnelle pour être utilisée sur des sites à fort trafic. Recherchez le nom de cette extension dans le CommonSettings.php de Wikimédia et dans le fichier de configuration InitialiseSettings.php pour situer les endroits où elle est installée. Une liste complète des extensions installées sur un Wiki donné peut être visualisée sur la page Special:Version de ce wiki. |
Cette extension est incluse dans les fermes de wikis ou les hôtes suivants et / ou les paquets : Cette liste ne fait pas autorité. Certaines fermes de wikis ou hôtes et / ou paquets peuvent contenir cette extension même s'ils ne sont pas listés ici. Vérifiez toujours cela avec votre ferme de wikis ou votre hôte ou votre paquet avant de confirmer. |