Extension:AbuseFilter/Rules format/fr

Les règles sont un langage personnalisé. Elles sont formatées comme des conditions dans un langage similaire à C/Java/Perl.

Chaînes
Vous pouvez spécifier un littéral en le plaçant entre guillemets simples ou doubles (pour les chaînes), ou en le tapant tel quel (pour les nombres, à la fois en virgule flottante et les entiers). Vous pouvez obtenir des sauts de ligne avec, des caractères de tabulation avec  , et vous pouvez également échapper le caractère apostrophe avec une barre oblique inverse.

Utilisez le symbole  (plus) pour concaténer deux chaînes littérales ou les valeurs de deux variables avec une valeur de chaîne.


 * Exemples:

Variables définies par l'utilisateur
Vous pouvez définir des variables personnelles pour faciliter la compréhension en utilisant le symbole d'assignation  sur une ligne (fermée par  ) à l'intérieur d'une condition. De telles variables peuvent utiliser des lettres, des caractères souligné  et des chiffres (sauf le premier caractère) et ne sont pas sensibles à la casse. Exemple (avec w:Special:AbuseFilter/79) :

Tableaux
AbuseFilter prend en charge les tableaux non associatifs pouvant être utilisés comme dans les exemples suivants.

Commentaires
Vous pouvez écrire des commentaires en utilisant la syntaxe suivante :

Arithmétique
Vous pouvez utiliser les symbloles de base de l'arithmétique sur les variables et les littérraux avec la syntaxe suivante :


 * — Soustraire l'opérande de droite de l'opérande de gauche.
 * — Ajouter l'opérande de droite à l'opérande de gauche.
 * — Multiplier l'opérande de gauche par l'opérande de droite.
 * — Diviser l'opérande de gauche par de l'opérande de droite.
 * — Elever l'opérande de gauche à la puissance exponentielle spécifiée par l'opérande de droite.
 * — Retourner le reste de la division de l'opérande de gauche par l'opérande de droite (opération modulo).

Le type du résultat retourné est le même que celui retourné par PHP, pour lequel vous pouvez trouver beaucoup de documentation en ligne. Vous pouvez voir d'autres exemples plus exhaustifs dans ce test sur l'analyseur syntaxique AF.

Opérations booléennes
Vous pouvez détecter positivement si et seulement si toutes les conditions d'un ensemble sont vraies, si une condition est vraie parmi plusieurs, ou si une et une seule des conditions est vraie.


 * &mdash; OR – retourne  si une ou plusieurs conditions sont vraies.
 * &mdash; AND – retourne  si à la fois les deux conditions sont vraies.
 * &mdash; XOR – retourne  si une et une seule des deux conditions est vraie.
 * &mdash; NOT – retourne  si la condition n'est pas vraie.

Exemples

Comparaisons simples
Vous pouvez comparer des variables avec d'autres variables ou des littéraux en utilisant la syntaxe suivante :


 * &mdash; Retourne  si l'opérande de gauche est inférieur à ou plus grand que l'opérateur de droite respectivement. Notez bien : les opérandes sont castés en chaînes et, comme cela se produit en PHP,  et.
 * &mdash; Retourne  si l'opérande de gauche est inférieur à ou égal à ou plus grand que l'opérande de droite respectivement. Notez bien : les opérandes sont castés en chaînes et, comme cela se produit en PHP,  et.
 * (ou ),   &mdash; Retourne   si 'opérande de gauche est égal à ou différent de l'opérande de droite respectivement.
 * &mdash; Retourne  si l'opérande de gauche est égal à ou différent de l'opérande de droite ET que l'opérande de gauche a le même type de données ou a un type différent de celui de l'opérande de droite respectivement.

Variables embarquées
Le filtre anti-abus passe par nom diverses variables à l'analyseur syntaxique. Ces variables peuvent être accédées en entrant leur nom, à un endroit destiné à un littéral. Vous pouvez voir les variables associées à chaque requête dans le journal anti-abus.

Performances
Comme indiqué dans la table ci-dessus, certaines de ces variables peuvent être très lentes. Lorsque vous codez des filtres, rappelez-vous que la condition aux limites n'est pas une bonne métrique de l'importance des filtres. Par exemple, les variables comme  ou   ont toujours besoin de construire une requête à la base de données, tandis que les variables   devront faire l'analyse syntaxique du texte, qui est encore une opération lourde; toutes ces variables doivent être utilisées très, très soigneusement. Par exemple, sur la Wikipedia italienne on a vu que, avec 135 filtres actifs et une moyenne de 450 conditions utilisées, le temps d'exécution des filtres était d'environ 500ms, avec des pointes jusqu'à 15 secondes. En supprimant la variable  d'un filtre unique, et réduisant de moitié les cas où un autre filtre utiliserait   on ramène le temps moyen d'exécution à 50 ms. Plus particulièrement :

Enfin notez que dès qu'une variable est évaluée pour un filtre donné, elle est sauvegardée et les autres filtres peuvent immédiatement récupérer sa valeur. Cela signifie qu'un filtre unique qui évalue cette variable représente plus ou moins plusieurs dizaines de filtres qui l'utilisent.
 * Utilisez les variables  lorsque vous avez besoin d'une grande précision et vérifier « http://... » dans les autres variables (par exemple,  ) peut conduire à de lourds dysfonctionnements;
 * Utiliser les variables  lorsque vous êtes réellement sûr que les variables non-PST ne sont pas assez suffisantes. Vous pouvez aussi décider conditionnellement ce qui sera à vérifier : si par exemple vous voulez examiner une signature, vérifiez d'abord si   contient  ;
 * En général, quand vous utilisez ces variables, il est toujours mieux d'exécuter les autres conditions en évitant de calculer des éléments très lourds. Afin de réaliser cela, placez toujours les variables conséquentes dans les dernières conditions.

Mots-clés
Les moys-clés spéciaux suivants sont inclus pour les fonctionnalités souvent utilisées :


 * (ou ) retourne   si l'opérande de gauche correspond au modèle global de l'opérande de droite.
 * retourne  si l'opérande de droite (une chaîne) contient l'opérande de gauche. Note : les chaînes vides ne sont pas contenues dans, ni ne contiennent, tout autre chaîne (même pas la chaîne vide elle même).
 * fonctionne comme, mais en permutant les opérandes gauche et droit. Note : les chaînes vides ne sont pas contenues dans, ni ne contiennent, tout autre chaîne (même pas la chaîne vide elle même).
 * (ou ) et   retournent   si l'opérande de gauche correspond (contient) le modèle regex dans l'opérande de droite (  pour le cas insensible à la casse).
 * Le système utilise les PCRE (Perl Compatible Regular Expressions).
 * La seule option PCRE autorisée est  (modificateur   en PHP); pour , à la fois   et   sont activés (modificateur  ).

Exemples

Fonctions
Un nombre de fonctions embarquées est inclus pour faciliter quelques problèmes communs. Ils sont exécutés dans le format général, et peuvent être utilisés à la place de n'importe quel littéral ou variable. Ses arguments peuvent être passés en tant que littéraux, variables, ou même d'autres fonctions.

Ordre des opérations
Les opérations sont généralement faites de gauche à droite mais il existe un ordre dans lequel elles sont résolues. Dès que le filtre évalue une condition qui sort en échec, il arrête l'analyse des autres conditions restantes (à cause de l'évaluation en court-circuit) et passe à l'analyse du filtre suivant. L'ordre d'évaluation est :


 * 1) Tout ce qui est entouré de parenthèses (  et  ) est évalué comme une seule unité.
 * 2) En remplaçant les variables et le littéraux par leur données respectives. (par exmple   par  )
 * 3) Appels de fonctions (,  , etc.)
 * 4)   et   unaire (définissant une valeur positive ou negative, par exemple ,  )
 * 5) Mots-clés (,  , etc.)
 * 6) Inversion booléenne
 * 7) Exponentiation
 * 8) Relatif aux multiplications (multiplication, division, modulo)
 * 9) Addition et soustraction
 * 10) Comparaisons.
 * 11) Opérations booléennes.

Exemples

 * est équivalent à, mais non pas à  . En particulier, à la fois   et   valent.
 * est équivalent à, mais pas à  . En particulier, à la fois   et   valent.

Comptage des conditions
La condition limite est (plus ou moins) le suivi du nombre d'opérateurs de comparaison + le nombre d'appels de fonctions dans lesquelles on est entré.

Vous trouverez d'autres explications concernant la manière de réduire les conditions utilisées sur.

Exclusions
Bien que la fonction d'analyse de AbuseFilter identifie les actions de restitution (rollback) comme des modifications, AbuseFilter n'évaluera pas les restitutions pour les filtrer.

Liens utiles

 * syntaxe des modèles PCRE (Perl Compatible Regular Expressions)
 * Modifier les filtres d'intérêt inter-wiki