Tous les produits
Search
Centre de documentation

Edge Security Acceleration:Fonctions

Dernière mise à jour :Aug 12, 2026

Le langage de règles ESA fournit des fonctions de transformation pour manipuler et valider les valeurs extraites des requêtes HTTP.

Fonctions de transformation prises en charge

concat

Concatène des chaînes de caractères.

  • Format : concat(String | Integer | Bytes | Array elements):String.

  • Logique : Assemble une liste de valeurs séparées par des virgules en une seule chaîne.

  • Exemples :

    • concat("String1"," ","String",2) retourne "String1 String2".

    • concat("/archive",http.request.uri.path) ajoute le segment de chemin "/archive" au début du chemin URI.

    • concat("userid=123&",http.request.uri.query) préfixe la paire clé-valeur "userid=123" à la chaîne de requête URI.

    • concat("https://www.example.com",http.request.uri.path) combine un nouveau nom d'hôte avec le chemin de la requête d'origine pour générer une nouvelle URL.

ends_with

Vérifie si une chaîne se termine par une sous-chaîne spécifiée.

  • Format : ends_with(source String,substring String):Boolean.

  • Logique :

    • Retourne true si source String se termine par substring String. Sinon, la fonction retourne false.

    • source String doit être un champ. Les chaînes littérales ne sont pas autorisées. Par exemple, n'écrivez pas ends_with("foo.html",".html").

  • Exemple : Si http.request.uri.path vaut "/welcome.html", alors ends_with(http.request.uri.path,".html") retourne true.

exists

Vérifie la présence d'informations spécifiques dans la requête.

  • Format : exists(String):Boolean.

  • Logique : Certains champs de requête sont facultatifs (en-têtes, Referer, User-Agent, cookies). Cette fonction vérifie si les informations facultatives spécifiées sont présentes dans la requête client. Elle retourne true si l'information existe, ou false dans le cas contraire.

  • Exemple : Si la requête ne contient pas d'en-tête nommé example, alors exists(http.request.headers["example"]) retourne false.

len

Retourne la longueur d'une chaîne.

  • Format : len(String):Integer.

  • Logique : Retourne le nombre de caractères de la valeur de chaîne d'un champ.

  • Exemples :

    • Si http.host vaut "example.com", alors len(http.host) retourne 11.

    • len(http.request.uri) eq 11 retourne true.

    • len(http.request.uri) gt 11 retourne false.

    • len(http.request.uri) lt 11 retourne false.

lower

Convertit une chaîne en minuscules.

  • Format : lower(String):String

  • Logique : Convertit en minuscules la valeur de chaîne d'un champ. Seuls les octets ASCII majuscules sont convertis ; les autres octets restent inchangés.

  • Exemple : Si http.host vaut "WWW.example.com", alors lower(http.host)=="www.example.com" retourne true.

percent

Filtre les requêtes selon la valeur d'un champ spécifié et un seuil de pourcentage.

  • Format : percent(String | IP address, Integer):Boolean.

  • Logique : Calcule le hachage MD5 de la valeur du champ spécifié dans la requête client, puis applique un modulo pour mapper le résultat à un entier compris entre 1 et 100. Si la valeur mappée (A) est inférieure ou égale à l'entier spécifié (B), la fonction retourne true. Sinon, elle retourne false.

  • Remarques :

    • Si la valeur du champ est vide (par exemple, si la requête ne contient pas l'en-tête spécifié), la règle ne s'applique pas et la fonction retourne false.

    • Le second paramètre doit être un entier compris entre 1 et 100.

  • Champs pris en charge :

    • En-tête : http.request.headers["example"]

    • Adresse IP client : ip.src

    • Valeur de cookie : http.request.cookies["example"]

    • Paramètre de requête URI : http.request.uri.args["example"]

    • Horodatage de la requête : http.request.timestamp.sec

  • Exemples :

    • percent(http.request.headers["example"], 80)

    • percent(ip.src, 80)

    • percent(http.request.cookies["example"], 80)

    • percent(http.request.uri.args["example"], 80)

    • percent(http.request.timestamp.sec, 80)

regex_replace

Remplace les sous-chaînes correspondant à un modèle d'expression régulière.

  • Format : regex_replace(source String,regular_expression String,replacement String):String.

  • Logique :

    • Remplace la première sous-chaîne correspondant à l'expression régulière par la chaîne de remplacement.

    • Par défaut, la correspondance respecte la casse.

    • Seule la première occurrence est remplacée, même si la chaîne source contient plusieurs correspondances.

    • Échappez un caractère $ dans la chaîne de remplacement en le faisant précéder d'un autre caractère $.

    • La chaîne de remplacement peut contenir des références aux groupes de capture de l'expression régulière au format ${<NUMBER>}, où <NUMBER> correspond au numéro du groupe de capture. Jusqu'à huit références de ce type sont prises en charge, telles que ${1} et ${2}.

  • Exemples :

    • Correspondance et remplacement de caractères statiques :

      • Correspondance de chaîne réussie : regex_replace("/animal/cat","/cat$","/dog")=="/animal/dog".

      • En l'absence de correspondance, la chaîne source reste inchangée :

        • Chaînes différentes : regex_replace("/x","^/y$","/z")=="/x".

        • Chaînes sensibles à la casse : regex_replace("/cat","^/CAT$","/dog")=="/cat".

      • Lorsqu'il existe plusieurs correspondances, seule la première est remplacée : regex_replace("/a/a","/a","/b")=="/b/a".

      • Échappement du caractère $ dans la chaîne de remplacement : regex_replace("/b","^/b$","/b$$")=="/b$".

      • Utilisation de groupes de capture dans la chaîne de remplacement : regex_replace("/foo/a/path","^/foo/([^/]*)/(.*)$","/bar/${2}/${1}")=="/bar/path/a".

    • Correspondance et remplacement de champs dynamiques :

      • La chaîne source utilise un champ dynamique pour récupérer les informations de chemin de la requête client. Cet exemple remplace /cat/ dans le chemin par /dog/ : regex_replace(http.request.uri.path,"/cat/(.*)$","/dog/${1}").

      • Exemple de remplacement complexe : Remplace chaque caractère + du chemin de requête d'origine par la chaîne %2B : regex_replace(http.request.uri.path, "^([^+]*)\\+([^+]*)\\+(.*)$", "${1}%2B${2}%2B${3}").

starts_with

Vérifie si une chaîne commence par une sous-chaîne spécifiée.

  • Format : starts_with(source String,substring String):Boolean

  • Logique :

    • Retourne true si source String commence par substring String. Sinon, elle retourne false.

    • source String doit être un champ. Les chaînes littérales ne sont pas autorisées. Par exemple, n'écrivez pas starts_with("foo.html",".html").

  • Exemple : Si http.request.uri.path vaut "/welcome.html", alors starts_with(http.request.uri.path,".html") retourne true.

to_string

Convertit une valeur en sa représentation sous forme de chaîne.

  • Format : to_string(Integer | Boolean | IP address):String.

  • Logique : Retourne la représentation sous forme de chaîne d'une valeur Integer, Boolean ou d'une adresse IP.

  • Exemples :

    • Si le résultat de ip.src.asnum est 15169, alors to_string(ip.src.asnum) retourne "15169".

    • Si le résultat de ssl est true, alors to_string(ssl) retourne "true".

    • Si le résultat de ip.src est 192.168.0.1, alors to_string(ip.src) retourne "192.168.0.1".

upper

Convertit une chaîne en majuscules.

  • Format : upper(String):String.

  • Logique : Convertit en majuscules la valeur de chaîne d'un champ. Seuls les octets ASCII minuscules sont convertis ; les autres octets restent inchangés.

  • Exemple : Si http.host vaut "www.example.com", alors upper(http.host) retourne "WWW.EXAMPLE.COM".

wildcard_replace

Remplace les sous-chaînes correspondant à un modèle avec caractères génériques.

  • Format : wildcard_replace(source Bytes,wildcard_pattern Bytes,replacement Bytes,flags Bytes optional):String

  • Logique :

    • Compare la chaîne source à un modèle contenant zéro ou plusieurs caractères génériques *, remplace la partie correspondante par la chaîne de remplacement et retourne le résultat. La chaîne de remplacement peut contenir des références aux groupes de capture génériques, telles que ${1} et ${2}. Jusqu'à huit références de remplacement sont prises en charge.

    • En l'absence de correspondance, la fonction retourne la chaîne source d'origine.

    • Le paramètre source doit être un champ, et non une chaîne littérale. L'intégralité de la valeur source doit correspondre au paramètre wildcard_pattern ; les correspondances partielles ne sont pas prises en charge.

    • Pour saisir un caractère * littéral dans le paramètre wildcard_pattern, échappez-le avec \*. Échappez également le caractère \ avec \\. Deux caractères * non échappés consécutifs, tels que **, sont invalides et inutilisables. Pour échapper des caractères, utilisez la syntaxe de chaîne brute pour le paramètre wildcard_pattern.

    • Pour saisir un caractère $ littéral dans le paramètre replacement, échappez-le avec $$.

    • Pour effectuer une correspondance générique sensible à la casse, définissez le paramètre flags sur s.

    • Cette fonction utilise une correspondance paresseuse : chaque * correspond à la chaîne la plus courte possible.

  • Exemples :

    • Si l'URI complète est https://apps.example.com/calendar/admin?expand=true, l'expression wildcard_replace(http.request.full_uri,"https://*.example.com/*/*","https://example.com/${1}/${2}/${3}") retourne https://example.com/apps/calendar/admin?expand=true.

    • Si l'URI complète est https://example.com/applications/app1, l'expression wildcard_replace(http.request.full_uri,"/applications/*","/apps/${1}") retourne https://example.com/applications/app1 inchangée, car le modèle doit correspondre à l'URI complète. Utilisez http.request.uri.path pour une correspondance limitée au chemin.

    • Si le chemin URI est /calendar, l'expression wildcard_replace(http.request.uri.path,"/*","/apps/${1}") retourne /apps/calendar.

    • Si le chemin URI est /Apps/calendar, l'expression wildcard_replace(http.request.uri.path,"/apps/*","/${1}") retourne /calendar. La correspondance est insensible à la casse par défaut.

    • Si le chemin URI est /Apps/calendar, l'expression wildcard_replace(http.request.uri.path,"/apps/*","/${1}","s") retourne /Apps/calendar. Le paramètre flags est défini sur s pour activer la correspondance sensible à la casse. Comme le modèle ne correspond pas au chemin URI d'origine, le résultat reste inchangé.

    • Si le chemin URI est /apps/calendar/login, l'expression wildcard_replace(http.request.uri.path,"/apps/*/login","/${1}/login") retourne /calendar/login.