Serveur HTTP Apache Version 2.5

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

- Actions
- Tests de la politique de filtrage
- Exemple de configuration

### Directives

### Traitement des bugs

- Journal des modifications de httpd
- Problèmes connus
- Signaler un bug

### Voir aussi

- Les filtres
- Conformité au protocole HTTP
- Commentaires

## 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.

## 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`

## 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>

## 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

## 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.

## 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

## 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>

## 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

## 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.

## 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

## 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.

## 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

## 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.

## 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

## 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.

## 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 */*

## 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.

## 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

## 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.

## 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

## 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.

## 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

## 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

## 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 again 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 Freenode, or sent to our mailing lists.