ADC

Éléments de base d’une expression de stratégie avancée

Une expression de stratégie avancée se compose, au minimum, d’un préfixe (ou d’un seul élément utilisé à la place d’un préfixe). La plupart des expressions spécifient également une opération à effectuer sur les données identifiées par le préfixe. Vous pouvez formater une expression comportant jusqu’à 1 499 caractères comme suit :

<prefix>.<operation> [<compound-operator> <prefix>.<operation>. . .]

  • <prefix>

    est un point d’ancrage pour le démarrage d’une expression.

    Le préfixe est une clé délimitée par des points qui identifie une unité de données. Par exemple, le préfixe suivant examine les requêtes HTTP afin de détecter la présence d’un en-tête nommé Content-Type :

    http.req.header (« Content-Type »)

    Les préfixes peuvent également être utilisés seuls pour renvoyer la valeur de l’objet que le préfixe identifie.

  • <operation>

    identifie une évaluation à effectuer sur les données identifiées par le préfixe.

    Par exemple, considérez l’expression suivante :

    http.req.header(“Content-Type”).eq(“text/html”)

    Dans cette expression, le composant opérateur est le suivant :

    eq(“text/html”)

    Cet opérateur amène NetScaler à évaluer toutes les requêtes HTTP contenant un en-tête Content-Type et, en particulier, à déterminer si la valeur de cet en-tête est égale à la chaîne « text/html ». Pour plus d’informations, voir « Opérations ».

  • <compound-operator>

    est un opérateur booléen ou arithmétique qui forme une expression composée à partir de plusieurs éléments de préfixe ou de préfixe.

    Par exemple, considérez l’expression suivante :

    http.req.header(“Content-Type”).eq(“text/html”) && http.req.url.contains(“.html”)

Préfixes

Un préfixe d’expression représente une donnée discrète. Par exemple, un préfixe d’expression peut représenter une URL HTTP, un en-tête de cookie HTTP ou une chaîne dans le corps d’une requête HTTP POST. Un préfixe d’expression peut identifier et renvoyer un large éventail de types de données, notamment les suivants :

  • Adresse IP du client dans un paquet TCP/IP
  • Heure du système NetScaler
  • Une légende externe via HTTP
  • Un type d’enregistrement TCP ou UDP

Dans la plupart des cas, le préfixe d’une expression commence par l’un des mots-clés suivants :

  • CLIENT:
    • Identifie une caractéristique du client qui envoie une demande ou reçoit une réponse, comme dans les exemples suivants :
    • Le préfixe client.ip.dst désigne l’adresse IP de destination dans la demande ou la réponse.
    • Le préfixe client.ip.src désigne l’adresse IP source.
  • HTTP:
    • Identifie un élément dans une requête ou une réponse HTTP, comme dans les exemples suivants :
    • Le préfixe http.req.body (entier) désigne le corps de la requête HTTP sous la forme d’un objet texte multiligne, jusqu’à la position du caractère indiquée en entier.
    • Le préfixe http.req.header (« header_name ») désigne un en-tête HTTP, tel que spécifié dans header_name.
    • Le préfixe http.req.url désigne une URL HTTP au format URL codé.
  • SERVER:

    Identifie un élément du serveur qui traite une demande ou envoie une réponse.

  • SYS:

    Identifie une caractéristique du NetScaler qui traite le trafic.

    Remarque : Notez que les stratégies DNS ne prennent en charge que les objets SYS, CLIENT et SERVER.

    En outre, dans NetScaler Gateway, la fonction VPN sans client peut utiliser les types de préfixes suivants :

  • TEXTE :

    Identifie tout élément de texte dans une demande ou une réponse.

  • CIBLE :

    Identifie la cible d’une connexion.

  • URL:

    Identifie un élément dans la partie URL d’une requête ou d’une réponse HTTP.

En règle générale, tout préfixe d’expression peut être une expression autonome. Par exemple, le préfixe suivant est une expression complète qui renvoie le contenu de l’en-tête HTTP spécifié dans l’argument de chaîne (entre guillemets) :

http.res.header.("myheader")

Vous pouvez également combiner des préfixes avec des opérations simples pour déterminer les valeurs VRAI et FAUX. Par exemple, la commande suivante renvoie la valeur TRUE ou FALSE :

http.res.header.("myheader").exists

Vous pouvez également utiliser des opérations complexes sur des préfixes individuels et sur plusieurs préfixes au sein d’une expression, comme dans l’exemple suivant :

http.req.url.length + http.req.cookie.length <= 500

Les préfixes d’expression que vous pouvez spécifier dépendent de la fonctionnalité NetScaler. Le tableau suivant décrit les préfixes d’expression qui présentent un intérêt pour chaque fonctionnalité.

Fonctionnalité Types de préfixes d’expression utilisés dans la fonctionnalité
DNS SYS, CLIENT, SERVEUR
Responder dans les fonctionnalités de protection HTTP, SYS, CLIENT
Commutation de contenu HTTP, SYS, CLIENT
Réécriture HTTP, SYS, CLIENT, SERVER, URL, TEXT, TARGET, VPN
Mise en cache intégrée HTTP, SYS, CLIENT, SERVEUR
NetScaler Gateway, accès sans client HTTP, SYS, CLIENT, SERVER, URL, TEXT, TARGET, VPN

Tableau 1 Types de préfixes d’expression autorisés dans diverses fonctionnalités de NetScaler

Remarque : Pour plus de détails sur les préfixes d’expression autorisés dans une fonctionnalité, consultez la documentation de cette fonctionnalité.

Expressions à élément unique

Le type le plus simple d’expression de stratégie avancée contient un seul élément. Cet élément peut être l’un des suivants :

  • C’est vrai. Une expression de stratégie avancée peut simplement consister en la valeur true. Ce type d’expression renvoie toujours la valeur TRUE. Il est utile pour chaîner des actions de stratégie et déclencher des expressions Goto.
  • faux. Une expression de stratégie avancée peut simplement consister en la valeur false. Ce type d’expression renvoie toujours la valeur FALSE.
  • Préfixe d’une expression composée. Par exemple, le préfixe HTTP.REQ.HOSTNAME est une expression complète qui renvoie un nom d’hôte et HTTP.REQ.URL est une expression complète qui renvoie une URL. Le préfixe peut également être utilisé conjointement avec des opérations et des préfixes supplémentaires pour former une expression composée.

Opérations

Dans la plupart des expressions, vous spécifiez également une opération sur les données identifiées par le préfixe. Supposons, par exemple, que vous indiquiez le préfixe suivant :

http.req.url

Ce préfixe extrait les URL des requêtes HTTP. Ce préfixe d’expression ne nécessite pas l’utilisation d’opérateurs dans une expression. Toutefois, lorsque vous configurez une expression qui traite des URL de requête HTTP, vous pouvez spécifier des opérations qui analysent des caractéristiques particulières de l’URL. Voici quelques possibilités :

  • Recherchez un nom d’hôte particulier dans l’URL.
  • Recherchez un chemin particulier dans l’URL.
  • Évaluez la longueur de l’URL.
  • Dans l’URL, recherchez une chaîne indiquant un horodatage et convertissez-la en GMT.

Voici un exemple de préfixe qui identifie un en-tête HTTP nommé Server et une opération qui recherche la chaîne IIS dans la valeur de l’en-tête :

http.res.header("Server").contains("IIS")

Vous trouverez ci-dessous un exemple de préfixe identifiant les noms d’hôtes et d’opération de recherche de la chaîne « www.mycompany.com » comme valeur du nom :

http.req.hostname.eq("www.mycompany.com")

Opérations de base sur les préfixes d’expression

Le tableau suivant décrit quelques-unes des opérations de base qui peuvent être effectuées sur les préfixes d’expression.

Operation Détermine si oui ou non
CONTAINS() L’objet correspond à . Voici un exemple : http.req.header("Cache-Control").contains("no-cache")
EXISTE Un élément particulier est présent dans un objet. Voici un exemple : http.res.header(“MyHDR”).exists
EQ() Une valeur non numérique particulière est présente dans un objet. Voici un exemple : http.req.method.eq (post)
EQ() Une valeur numérique particulière est présente dans un objet. Voici un exemple : client.ip.dst.eq (10.100.10.100)
LT() La valeur d’un objet est inférieure à une valeur particulière. Voici un exemple : http.req.content_length.lt (5000)
GT() La valeur d’un objet est supérieure à une valeur particulière. Voici un exemple : http.req.content_length.gt (5)

Le tableau suivant récapitule quelques-uns des types d’opérations disponibles.

Type d’opération Description
Opérations sur le texte Associez des chaînes individuelles et des ensembles de chaînes à n’importe quelle partie d’une cible. La cible peut être une chaîne entière, le début d’une chaîne ou n’importe quelle partie de texte située entre le début et la fin de la chaîne. Par exemple, vous pouvez extraire la chaîne « XYZ » de « XYZSomeText ». Vous pouvez également comparer la valeur d’un en-tête HTTP avec un tableau de chaînes différentes. Vous pouvez également transformer du texte en un autre type de données. Voici des exemples : transformez une chaîne en une valeur entière, créez une liste à partir des chaînes de requête d’une URL et transformez une chaîne en valeur temporelle.
Opérations numériques Les opérations numériques incluent l’application d’opérateurs arithmétiques, l’évaluation de la longueur du contenu, le nombre d’éléments dans une liste, les dates, les heures et les adresses IP.
Éléments de base d’une expression de stratégie avancée