Aller au contenu
ZarexDocs

Filtres

Écrivez vos propres conditions pour autoriser ou refuser une requête selon son IP, son pays, son chemin ou ses en-têtes.

Les filtres couvrent ce que les autres règles ne font pas : réserver une zone d'administration à certaines adresses, refuser un pays, bloquer un client HTTP précis… Chaque condition compare un champ de la requête à une valeur.

Le problème

Certaines règles sont propres à votre activité, et aucune protection générique ne peut les deviner : votre back-office ne doit être accessible que depuis le bureau, votre boutique ne livre que dans certains pays, un réseau d'hébergement n'envoie que des attaques, une ancienne version de votre application ne doit plus appeler l'API.

Ce qu'ils permettent

  • réserver une zone, comme l'administration, à des adresses connues ;
  • restreindre ou refuser des pays ou des réseaux (ASN) ;
  • bloquer un client, un en-tête ou un paramètre précis ;
  • fonctionner en liste blanche : tout refuser, sauf ce que vous autorisez.

Quand l'utiliser

Quand vous savez précisément qui doit, ou ne doit pas, accéder à une route.

Configuration

import { requestFilter } from "@zarex/express"; // ou le paquet de votre framework

rules: [
  requestFilter({
    conditions: [
      { field: "path", operator: "STARTS_WITH", value: "/admin", action: "DENY" },
    ],
  }),
],

Champs

ChampContenu
ipAdresse IP du visiteur. Avec IN / NOT_IN, les plages CIDR sont acceptées ("10.0.0.0/8").
ip.countryPays de l'adresse IP, code ISO ("BJ", "SN"…). "ZZ" = inconnu.
ip.asnRéseau de l'adresse IP ("AS15169"). "AS0" = inconnu.
pathChemin de la requête.
methodMéthode HTTP (GET, POST…).
hostNom de domaine demandé.
headers.<nom>Un en-tête, par exemple headers.user-agent.
query.<nom>Un paramètre d'URL.
cookies.<nom>Un cookie. Nécessite l'option inspectCookies: true.

Opérateurs

OpérateurSignification
EQ · NEégal · différent
IN · NOT_INdans la liste values · hors de la liste
CONTAINS · STARTS_WITHcontient · commence par
LIKEmotif avec * (n'importe quelle suite) et ? (un caractère), par exemple "/admin/*"
REGEXexpression régulière
LEN_EQ · LEN_GT · LEN_LTlongueur égale à · supérieure à · inférieure à

Les comparaisons ne tiennent pas compte de la casse. ip.country et ip.asn acceptent seulement EQ, NE, IN et NOT_IN.

Options

OptionValeursRôle
conditionsde 1 à 32 conditionsObligatoire. Chaque condition : field, operator, value ou values, action ("DENY" par défaut, ou "ALLOW"), et not: true pour l'inverser.
logic"OR" · "AND"Défaut "OR" : la première condition vraie décide. Avec "AND", toutes doivent être vraies.
default"ALLOW" · "DENY"Ce qui arrive à une requête qu'aucune condition ne reconnaît. Défaut "ALLOW".
mode"LIVE" · "DRY_RUN" · "OFF"Défaut "LIVE".

Exemples

Réserver l'administration à votre bureau :

requestFilter({
  conditions: [
    { field: "ip", operator: "IN", values: ["203.0.113.0/24"], action: "ALLOW" },
    { field: "path", operator: "STARTS_WITH", value: "/admin", action: "DENY" },
  ],
}),

N'accepter que certains pays :

requestFilter({
  conditions: [
    { field: "ip.country", operator: "IN", values: ["BJ", "TG", "CI", "SN"], action: "ALLOW" },
  ],
  default: "DENY",
}),

ALLOW n'exempte pas des autres règles

Une condition ALLOW reconnaît la requête pour ce filtre seulement : le Shield, la limitation de débit et les autres règles s'appliquent quand même.

Sur cette page