<-
Apache > Serveur HTTP > Documentation > Version 2.5 > Modules

Module Apache mod_policy

Langues Disponibles:  en  |  fr 

Description:Mise en conformité avec le protocole HTTP.
Statut:Extension
Identificateur de Module:policy_module
Fichier Source:mod_policy.c

Sommaire

Le protocole HTTP recommande aux clients d'être "indulgents pour ce qu'ils doivent accepter", et aux serveurs d'être "stricts pour ce qu'ils envoient". Dans certains cas, il peut s'avérer difficile de déterminer si un serveur ou une application a été mal configuré, sert un contenu qui ne peut pas être mis en cache ou se comporte de manière non optimale, car le client HTTP est souvent en mesure de compenser les défauts du serveur. Ces problèmes peuvent induire une consommation de bande passante excessive, ou même une interruption de service suite à une charge trop importante du serveur.

Le module mod_policy propose un jeu de filtres qui permettent de tester la conformité du serveur au protocole HTTP. Ces tests permettent à l'administrateur du serveur de journaliser les violations, ou même de rejeter une réponse losque certaines conditions spécifiées se réalisent.

Il devient ainsi possible de définir des critères de conformité minimale au protocole HTTP pour développer des applications sans problème. En outre, il est possible de configurer un mandataire inverse ou un cache pour qu'il se protège lui-même contre les serveurs d'origine mal configurés ou les contenus indument impossible à être mis en cache, ou un mécanisme qui détecte les erreurs de configuration au sein du serveur lui-même.

Sujets

Directives

Traitement des bugs

Voir aussi

top

Actions

Si une règle est violée, il possible d'effectuer les actions suivantes :

ignore
La vérification de la politique de conformité sera désactivée pour l'espace d'URL spécifié, même si le filtre est présent.
log
La vérification de la politique de conformité sera exécutée, et si une violation est détectée, un avertissement sera enregistré dans le journal error_log du serveur, et un en-tête Warning ajouté à la réponse en tant qu'information à destination du client.
enforce
La vérification de la politique de conformité sera exécutée, The policy check will be executed, and if a violation is detected an error will be logged to the server error_log, a Warning header added to the response, and a 502 Bad Gateway will be returned to the client. Optional links to explanatory documentation can be added to each error message, detailing the origin of each policy.

Il est aussi possible de désactiver toutes les règles pour un espace d'URL donné, si le besoin s'en fait sentir, via la directive PolicyFilter.

En outre, la directive PolicyEnvironment permet de spécifier une variable d'environnement qui, si elle est définie, va court-circuiter les règles ou diminuer leur portée.

top

Tests de la politique de filtrage

Les filtres suivants sont disponibles :

POLICY_TYPE : Impose la validité des types de contenus
La requête peut être rejetée suite à la présence de types de contenus vides ou syntaxiquement invalides. Les types peuvent aussi être restreints à une liste pouvant contenir des caractères génériques ? et *.
POLICY_LENGTH : Impose la présence de l'en-tête Content-Length
La longueur des réponses peut être spécifiée de trois manières différentes : en spécifiant à l'avance une longueur explicite, en utilisant un codage de morcellement (chunking) pour définir la longueur, ou en ne spécifiant aucune longueur et en terminant la requête lorsque son traitement est achevé. L'absence de spécification d'une longueur de contenu peut affecter la possibilité de mise en cache de la réponse, et empêcher l'utilisation de la persistance avec les requêtes de type HTTP/1.0. Ce filtre impose la présence d'une longueur de contenu explicite dans la réponse.
POLICY_KEEPALIVE : Impose l'option de persistance
Moins restrictif que le filtre POLICY_LENGTH, ce filtre impose la possibilité de persistance de la réponse. Si la réponse n'a pas de longueur définie à 0 par le protocole, si elle n'est pas une erreur, et si elle ne contient pas d'en-tête Content-Length ou si elle est de type HTTP/1.1 et ne contient pas l'en-tête Content-Encoding: chunked, alors elle sera rejetée.
POLICY_VARY : Interdit la présence de certains en-têtes au sein des en-têtes Vary
Si l'en-tête Vary contient un des en-têtes spécifiés, ce filtre va rejeter la requête. Un cas typique est la présence de l'en-tête User-Agent dans l'en-tête Vary, ce qui peut être à l'origine d'une condition de déni de service au niveau du cache.
POLICY_VALIDATION: Impose la présence d'un en-tête Etag et/ou Last-Modified
La possibilité pour un cache de déterminer si une entité qu'il contient peut être rafraîchie dépend de la présence d'un en-tête Etag et/ou Last-Modified pour vérifier si elle est valide. La requête sera rejetée en cas d'absence de ces deux en-têtes, ou d'une syntaxe invalide d'un de ces deux en-têtes.
POLICY_CONDITIONAL: Impose un traitement conforme des en-têtes conditionnels
Lorsqu'une requête contient des en-têtes conditonnels, un serveur doit répondre dans certaines conditions avec un code 304 Not Modified ou 412 Precondition Failed. Il arrive q'un serveur ignore les en-têtes conditionnels, et cela diminue l'efficacité du mécanisme de mise en cache HTTP. Ce filtre rejète les requêtes lorsqu'un en-tête conditionnel était présent, et une réponse 2xx a été renvoyée au lieu de la réponse 304 ou 412 attendue.
POLICY_NOCACHE : Impose la possibilité de mise en cache des réponses
Lorsqu'une requête se déclare elle-même impossible à mettre en cache, elle est rejetée. C'est le cas si elle contient l'un des en-têtes suivants :
  • Cache-Control: no-cache
  • Pragma: no-cache
  • Cache-Control: no-store
  • Cache-Control: private
POLICY_MAXAGE : Impose une durée de vie minimale
Lorsqu'une réponse possède une durée de vie inférieure à la valeur spécifiée, ou si cette durée de vie est heuristique, la requête est rejetée. La chronologie de la vérification d'une réponse est la suivante :
  • Si s-maxage est présent mais d'une valeur trop faible; ou
  • Si max-age est présent mais d'une valeur trop faible; ou
  • Si Expires est présent et invalide; ou
  • Date est présent et invalide; ou
  • Expires moins Date est trop faible ; ou
  • Aucun en-tête s-maxage, maxage, ou Expires/Date n'est présent
POLICY_VERSION : Impose une version HTTP minimale dans la requête
Lorsqu'une requête possède un numéro de version HTTP inférieur au numéro de version minimum requis, la requête est rejetée. Les numéros de version suivants sont reconnus :
  • HTTP/1.1
  • HTTP/1.0
  • HTTP/0.9
top

Exemple de configuration

Voici un exemple de configuration qui protège un serveur qui délivre du contenu statique :

<Location "/">
  SetOutputFilter POLICY_TYPE;POLICY_LENGTH;POLICY_KEEPALIVE;POLICY_VARY;POLICY_VALIDATION; \
    POLICY_CONDITIONAL;POLICY_NOCACHE;POLICY_MAXAGE;POLICY_VERSION

  # le contenu peut être quelconque, mais l'en-tête Content-Type doit être
     # présent et valide
  PolicyType enforce */*

  # rejet si aucune longueur de contenu déclarée
  PolicyLength enforce

  # pris en charge par le filtre policy length
  PolicyKeepalive ignore

  # rejet si l'en-tête User-Agent aparaît dans les en-têtes Vary
  PolicyVary enforce User-Agent

  # la validation est imposée
  PolicyValidation enforce

  # les réponses conditionnelles non conformes sont rejetées
  PolicyConditional enforce

  # les réponses impossibles à mettre en cache sont rejetées
  PolicyNocache enforce

  # la durée de vie doit être au moins d'un jour
  PolicyMaxage enforce 86400

  # le numéro de version de la requête peut être quelconque
  PolicyVersion ignore HTTP/1.1
</Location>

# désactivation du filtrage pour le répertoire /server-status
<Location "/server-status">
  PolicyFilter off
</Location>
top

Directive PolicyConditional

Description:Active le filtrage des requêtes conditionnelles.
Syntaxe:PolicyConditional ignore|log|enforce
Défaut:ignore
Contexte:configuration globale, serveur virtuel, répertoire
Statut:Extension
Module:mod_policy
Compatibilité:Disponible à partir de la version 2.5.0 du serveur HTTP Apache.

Avec l'argument enforce, une réponse qui aurait du être conditionnelle mais ne l'est pas sera rejetée.

Exemple

# les réponses conditionnelles non conformes doivent être rejetées
PolicyConditional enforce
top

Directive PolicyConditionalURL

Description:URL contenant la description de la politique de filtrage des requêtes conditionnelles.
Syntaxe:PolicyConditionalURL url
Défaut:none
Contexte:configuration globale, serveur virtuel, répertoire
Statut:Extension
Module:mod_policy
Compatibilité:Disponible à partir de la version 2.5.0 du serveur HTTP Apache.

Cette directive permet de spécifier l'URL de la documentation décrivant la politique de filtrage des requêtes conditionnelles ; elle apparaîtra dans les messages d'erreur.

top

Directive PolicyEnvironment

Description:Modification des règles de filtrage en fonction d'une variable d'environnement.
Syntaxe:PolicyEnvironment variable log-value ignore-value
Défaut:none
Contexte:configuration globale, serveur virtuel, répertoire
Statut:Extension
Module:mod_policy
Compatibilité:Disponible à partir de la version 2.5.0 du serveur HTTP Apache.

Limite l'action des règles à la journalisation ou les désactive totalement en fonction de la présence d'une variable d'environnement. Si la variable spécifiée est présente et égale à la valeur de l'argument log-value, les erreurs rencontrées par les filtres ne seront que journalisées. Si la variable spécifiée est présente et égale à la valeur de l'argument ignore-value, toutes les règles seront ignorées.

Example

# limitation de l'action des règles si la variable POLICY_CONTROL
# est présente
PolicyEnvironment POLICY_CONTROL log ignore
top

Directive PolicyFilter

Description:Active ou désactive le filtrage pour un espace d'URL donné.
Syntaxe:PolicyFilter on|off
Défaut:on
Contexte:configuration globale, serveur virtuel, répertoire
Statut:Extension
Module:mod_policy
Compatibilité:Disponible à partir de la version 2.5.0 du serveur HTTP Apache.

Commutateur principal qui permet d'activer ou de désactiver le filtrage pour un espace d'URL donné.

Example

# activé par défaut
<Location "/">
  PolicyFilter on
</Location>

# désactivation du filtrage pour le répertoire /server-status
<Location "/server-status">
  PolicyFilter off
</Location>
top

Directive PolicyKeepalive

Description:Active la politique de persistance.
Syntaxe:PolicyKeepalive ignore|log|enforce
Défaut:ignore
Contexte:configuration globale, serveur virtuel, répertoire
Statut:Extension
Module:mod_policy
Compatibilité:Disponible à partir de la version 2.5.0 du serveur HTTP Apache.

Avec l'argument enforce, une réponse qui ne contient ni en-tête Content-Length, ni en-tête Transfer-Encoding de valeur chunked sera rejetée.

Exemple

# rejet suite a absence d'en-tête Content-Length ou Transfer-Encoding
PolicyKeepalive enforce
top

Directive PolicyKeepaliveURL

Description:URL contenant la description de la politique de persistance.
Syntaxe:PolicyKeepaliveURL url
Défaut:none
Contexte:configuration globale, serveur virtuel, répertoire
Statut:Extension
Module:mod_policy
Compatibilité:Disponible à partir de la version 2.5.0 du serveur HTTP Apache.

Cette directive permet de spécifier l'URL contenant la description de la politique de persistance ; elle apparaîtra dans les messages d'erreur.

top

Directive PolicyLength

Description:Active le filtrage de la spécification de la longueur du contenu.
Syntaxe:PolicyLength ignore|log|enforce
Défaut:ignore
Contexte:configuration globale, serveur virtuel, répertoire
Statut:Extension
Module:mod_policy
Compatibilité:Disponible à partir de la version 2.5.0 du serveur HTTP Apache.

Avec l'argument enforce, une réponse qui ne contient pas d'en-tête Content-Length sera rejetée.

Exemple

# rejet suite à l'absence de l'en-tête Content-Length
PolicyLength enforce
top

Directive PolicyLengthURL

Description:URL contenant la description de la politique de filtrage de la spécification de la longueur du contenu.
Syntaxe:PolicyLengthURL url
Défaut:none
Contexte:configuration globale, serveur virtuel, répertoire
Statut:Extension
Module:mod_policy
Compatibilité:Disponible à partir de la version 2.5.0 du serveur HTTP Apache.

Cette directive permet de spécifier l'URL contenant la documentation décrivant la politique de filtrage de la spécification de la longueur du contenu ; elle apparaîtra dans les messages d'erreur.

top

Directive PolicyMaxage

Description:Active le filtrage de la durée de vie des réponses.
Syntaxe:PolicyMaxage ignore|log|enforce age
Défaut:ignore
Contexte:configuration globale, serveur virtuel, répertoire
Statut:Extension
Module:mod_policy
Compatibilité:Disponible à partir de la version 2.5.0 du serveur HTTP Apache.

Avec l'argument enforce, une réponse dont la durée de vie n'est pas explicitement spécifiée via un en-tête max-age, s-maxage ou Expires, ou dont la durée de vie est inférieure à la valeur donnée sera rejetée.

Exemple

# rejet des réponses dont la durée de vie est inférieure à une
# journée
PolicyMaxage enforce 86400
top

Directive PolicyMaxageURL

Description:URL contenant la description de la politique de filtrage des réponses en fonction de leur durée de vie.
Syntaxe:PolicyMaxageURL url
Défaut:none
Contexte:configuration globale, serveur virtuel, répertoire
Statut:Extension
Module:mod_policy
Compatibilité:Disponible à partir de la version 2.5.0 du serveur HTTP Apache.

Cette directive permet de spécifier l'URL contenant la description de la politique de filtrage des réponses en fonction de leur durée de vie ; elle apparaîtra dans les messages d'erreur.

top

Directive PolicyNocache

Description:Active le filtrage des réponses qui se définissent elles-mêmes comme impossibles à mettre en cache.
Syntaxe:PolicyNocache ignore|log|enforce
Défaut:ignore
Contexte:configuration globale, serveur virtuel, répertoire
Statut:Extension
Module:mod_policy
Compatibilité:Disponible à partir de la version 2.5.0 du serveur HTTP Apache.

Avec l'argument enforce, une réponse qui se définit elle-même comme impossible à mettre en cache via l'en-tête Cache-Control ou Pragma sera rejetée.

Exemple

# une réponse contenant l'en-tête Cache-Control: no-cache sera
# rejetée
PolicyNocache enforce
top

Directive PolicyNocacheURL

Description:URL contenant la description de la politique de filtrage des réponses qui se définissent elles-mêmes comme impossibles à mettre en cache.
Syntaxe:PolicyNocacheURL url
Défaut:none
Contexte:configuration globale, serveur virtuel, répertoire
Statut:Extension
Module:mod_policy
Compatibilité:Disponible à partir de la version 2.5.0 du serveur HTTP Apache.

Cette directive permet de spécifier l'URL contenant la description de la politique de filtrage des réponses qui se définissent elles-mêmes comme impossibles à mettre en cache ; elle apparaîtra dans les messages d'erreur.

top

Directive PolicyType

Description:Active la politique des types de contenus.
Syntaxe:PolicyType ignore|log|enforce type [ type [ ... ]]
Défaut:ignore
Contexte:configuration globale, serveur virtuel, répertoire
Statut:Extension
Module:mod_policy
Compatibilité:Disponible à partir de la version 2.5.0 du serveur HTTP Apache.

Avec l'argument enforce, une réponse qui ne contient pas d'en-tête Content-Type, ou dont l'en-tête Content-Type est mal formé, ou dont l'en-tête Content-Type contient une valeur qui ne correspond pas au(x) modèle(s) spécifié(s) sera rejetée.

Exemple

# impose le type de contenu json ou XML
PolicyType enforce application/json text/xml

Exemple

# rejet suite à type de contenu mal formé
PolicyType enforce */*
top

Directive PolicyTypeURL

Description:URL contenant la description de la politique des types de contenu.
Syntaxe:PolicyTypeURL url
Défaut:none
Contexte:configuration globale, serveur virtuel, répertoire
Statut:Extension
Module:mod_policy
Compatibilité:Disponible à partir de la version 2.5.0 du serveur HTTP Apache.

Cette directive permet de spécifier l'URL contenant la description de la politique des types de contenu ; elle apparaîtra dans les messages d'erreur.

top

Directive PolicyValidation

Description:Active le filtrage de la validation du contenu.
Syntaxe:PolicyValidation ignore|log|enforce
Défaut:ignore
Contexte:configuration globale, serveur virtuel, répertoire
Statut:Extension
Module:mod_policy
Compatibilité:Disponible à partir de la version 2.5.0 du serveur HTTP Apache.

Avec l'argument enforce, une réponse qui ne contient ni en-tête ETag valide, ni en-tête Last-Modified, ou dont la syntaxe d'un de ces deux en-têtes est incorrecte sera rejetée.

Exemple

# rejet suite à l'absence des en-têtes Etag et/ou Last-Modified
PolicyValidation enforce
top

Directive PolicyValidationURL

Description:URL contenant la description de la politique de filtrage de la validation du contenu.
Syntaxe:PolicyValidationURL url
Défaut:none
Contexte:configuration globale, serveur virtuel, répertoire
Statut:Extension
Module:mod_policy
Compatibilité:Disponible à partir de la version 2.5.0 du serveur HTTP Apache.

Cette directive permet de spécifier l'URL contenant la description de la politique de filtrage de la validation du contenu ; elle apparaîtra dans les messages d'erreur.

top

Directive PolicyVary

Description:Active la politique de filtrage de l'en-tête Vary.
Syntaxe:PolicyVary ignore|log|enforce header [ header [ ... ]]
Défaut:ignore
Contexte:configuration globale, serveur virtuel, répertoire
Statut:Extension
Module:mod_policy
Compatibilité:Disponible à partir de la version 2.5.0 du serveur HTTP Apache.

Avec l'argument enforce, une réponse dont l'en-tête Vary contient un des en-têtes spécifiés sera rejetée.

Exemple

# rejet suite à la présence de l'en-tête "User-Agent" dans l'en-tête
# Vary
PolicyVary enforce User-Agent
top

Directive PolicyVaryURL

Description:URL contenant la description de la politique de filtrage de l'en-tête Vary.
Syntaxe:PolicyVaryURL url
Défaut:none
Contexte:configuration globale, serveur virtuel, répertoire
Statut:Extension
Module:mod_policy
Compatibilité:Disponible à partir de la version 2.5.0 du serveur HTTP Apache.

Cette directive permet de spécifier l'URL contenant la description de la politique de filtrage de l'en-tête Vary ; elle apparaîtra dans les messages d'erreur.

top

Directive PolicyVersion

Description:Active le filtrage des requêtes en fonction du numéro de version HTTP.
Syntaxe:PolicyVersion ignore|log|enforce HTTP/0.9|HTTP/1.0|HTTP/1.1
Défaut:ignore
Contexte:configuration globale, serveur virtuel, répertoire
Statut:Extension
Module:mod_policy
Compatibilité:Disponible à partir de la version 2.5.0 du serveur HTTP Apache.

Avec l'argument enforce, une requête dont le numéro de version HTTP est inférieur à la valeur spécifiée sera rejetée.

Exemple

# rejet des requêtes dont le numéro de version HTTP est inférieur à
# HTTP/1.1
PolicyVersion enforce HTTP/1.1
top

Directive PolicyVersionURL

Description:URL contenant la description de la politique de filtrage des requêtes en fonction du numéro de version HTTP.
Syntaxe:PolicyVersionURL url
Défaut:none
Contexte:configuration globale, serveur virtuel, répertoire
Statut:Extension
Module:mod_policy
Compatibilité:Disponible à partir de la version 2.5.0 du serveur HTTP Apache.

Cette directive permet de spécifier l'URL contenant la description de la politique de filtrage des requêtes en fonction du numéro de version HTTP ; elle apparaîtra dans les messages d'erreur.

Langues Disponibles:  en  |  fr 

top

Commentaires

Notice:
This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Libera.chat, or sent to our mailing lists.