Serveur HTTP Apache Version 2.5

Apache > Serveur HTTP > Documentation > Version 2.5 > Modules

# Module Apache mod_dav

Description: | Fonctionnalité de création et gestion de versions de documents via le web (WebDAV)
Statut: | Extension
Identificateur de Module: | dav_module
Fichier Source: | mod_dav.c

### Sommaire

Ce module ajoute à Apache une fonctionnalité WebDAV de classes 1 et 2 ('Web-based Distributed Authoring and Versioning' ou Création et gestion de versions de documents via le web). Il s'agit d'une extension du protocole HTTP qui permet de créer, déplacer, copier et supprimer des ressources ou collections de ressources sur un serveur web distant.

### Sujets

- Activation de WebDAV
- Problèmes concernant la sécurité
- Configurations complexes

### Directives

### Traitement des bugs

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

### Voir aussi

- `mod_dav_fs`
- `LimitXMLRequestBody`

## Activation de WebDAV ¶

Pour activer le module `mod_dav`, ajoutez la ligne suivante à un conteneur de votre fichier `httpd.conf` :

    Dav On

Ceci active le fournisseur de système de fichier DAV implémenté par le module `mod_dav_fs`. Ce dernier doit donc être compilé dans le serveur ou chargé au démarrage à l'aide de la directive `LoadModule`.

Dans l’exemple ci-après, la directive `<RequireAny>` permet de s’assurer que les méthodes spécifiques à DAV (autrement dit les méthodes autres que `GET`, `POST` et `OPTIONS`) sont réservées aux utilisateurs authentifiés.

Pour définir la quantité maximale de données en octets qu'un client DAV peut envoyer par requête, vous devez utiliser la directive `LimitXMLRequestBody`, car La directive `LimitRequestBody` "habituelle" n'a aucune incidence sur les requêtes DAV.

### Exemple complet

    <Directory "/usr/local/apache2/htdocs/foo">
        Dav On

        AuthType Basic
        AuthName "DAV"
        AuthUserFile "user.passwd"

        <RequireAny>
            Require method GET POST OPTIONS
            Require user admin
        </RequireAny>
    </Directory>

## Problèmes concernant la sécurité ¶

Etant donné que les méthodes d'accès DAV permettent à des clients distants de manipuler des fichiers sur le serveur, vous devez vous assurer que votre serveur est bien sécurisé avant d'activer `mod_dav`.

Tout répertoire du serveur où DAV est activé doit être protégé par une procédure d'authentification. L'utilisation de l'authentification HTTP de base n'est pas recommandée. Vous devez utiliser au moins l'authentification HTTP à base de condensés qu'implémente le module `mod_auth_digest`. Pratiquement tous les clients WebDAV supportent cette méthode d'authentification. Vous pouvez aussi utiliser l'authentification de base sur une connexion où SSL est activé.

Pour que `mod_dav` puisse manipuler des fichiers, il doit avoir des permissions en écriture sur les répertoires et les fichiers qui sont sous son contrôle ; en d'autre termes, c'est l'utilisateur et le groupe sous lesquels Apache s'exécute et définis par les directives `User` et `Group` qui doivent avoir les droits en écriture sur ces fichiers et répertoires. Les fichiers nouvellement créés appartiendront aussi à ces utilisateur et groupe. Par conséquent, il est important de contrôler l'accès à ce compte. Les répertoires DAV sont considérés comme privés du point de vue d'Apache, et la modification des fichiers qu'ils contiennent autrement que par l'intermédiaire d'Apache (par exemple par FTP ou par des outils du niveau du système de fichiers) ne doit pas être permise.

`mod_dav` peut faire l'objet de plusieurs sortes d'attaques par déni de service. La directive `LimitXMLRequestBody` permet de limiter la quantité de mémoire consommée pour interpréter des requêtes DAV de grande taille. En outre, la directive `DavDepthInfinity` permet d'empêcher les requêtes `PROPFIND` concernant un répertoire de très grande taille de consommer de grandes quantités de mémoire. Un autre type d'attaque par déni de service peut aussi être mené par un client qui remplit simplement tout l'espace disque disponible avec des fichiers de très grande taille. Etant donné qu'il n'existe aucun moyen direct d'éviter ce genre d'attaque dans Apache, vous ne devez accorder des accès DAV qu'à des utilisateurs de confiance.

## Configurations complexes ¶

Les requêtes ayant pour but de manipuler des fichiers dynamiques (scripts PHP, scripts CGI, etc...) en utilisant `mod_dav` sont courantes. Ce traitement n'est pas évident car une requête `GET` va toujours tenter d'exécuter le script, plutôt que de télécharger son contenu. Pour éviter cet inconvénient, une méthode possible consiste à faire correspondre deux URLs différentes au même contenu, l'une d'entre elles servant à lancer le script, alors que l'autre peut être utilisée pour le télécharger et le manipuler avec DAV.

    Alias "/phparea" "/home/gstein/php_files"
    Alias "/php-source" "/home/gstein/php_files"
    <Location "/php-source">
    Dav On
    ForceType text/plain
    </Location>

Avec cette configuration, on peut utiliser `http://example.com/phparea` pour afficher le résultat de l'exécution des scripts PHP, et `http://example.com/php-source` pour les manipuler avec DAV.

## Directive Dav ¶

Description: | Active les méthodes HTTP WebDAV
Syntaxe: | `Dav On|Off|nom fournisseur`
Défaut: | `Dav Off`
Contexte: | répertoire
Statut: | Extension
Module: | mod_dav

La directive `Dav` active les méthodes HTTP WebDAV pour le conteneur condidéré :

    <Location "/foo">
        Dav On
    </Location>

La valeur `On` est en fait un alias vers le fournisseur par défaut `filesystem` implémenté par le module `mod_dav_fs`. Notez que lorsque DAV est activé pour un conteneur, on ne peut pas le désactiver pour ses sous-conteneurs. Pour un exemple de configuration complet, reportez-vous à la section précédente.

N'activez pas WebDAV tant que votre serveur n'est pas sécurisé. Si vous passez outre cette recommandation, tout le monde pourra enregistrer des fichiers sur votre système.

## Directive DavBasePath ¶

Description: | Définir le chemin de la racine du répertoire
Syntaxe: | `DavBasePath root-path`
Défaut: | `None`
Contexte: | répertoire
Statut: | Extension
Module: | mod_dav
Compatibilité: | Disponible à partir de la version 2.4.58 du serveur HTTP Apache

Si le répertoire DAV est défini en utilisant une correspondance d'expression rationnelle (comme `LocationMatch`), `mod_dav` ne sera pas en mesure de déterminer de lui-même la racine du répertoire à partir du chemin seul. En conséquence, des fournisseurs tiers (par exemple le module mod_dav_svn de Subversion) pourront échouer à traiter des requêtes sans disposer de la valeur correcte de la racine du répertoire.

Pour permettre aux fournisseurs de travailler correctement en présence d'une telle configuration, vous devez utiliser `DavBasePath`.

### Exemple

    <LocationMatch "^/repos/">
        Dav svn
        DavBasePath /repos
        SVNParentPath /var/svn
    </LocationMatch>

## Directive DavDepthInfinity ¶

Description: | Autorise les requêtes PROPFIND avec en-tête Depth: Infinity
Syntaxe: | `DavDepthInfinity on|off`
Défaut: | `DavDepthInfinity off`
Contexte: | configuration globale, serveur virtuel, répertoire
Statut: | Extension
Module: | mod_dav

La directive `DavDepthInfinity` autorise le traitement des requêtes `PROPFIND` contenant l'en-tête Depth: Infinity. Par défaut, ce type de requête n'est pas autorisé, car il peut favoriser les attaques de type Déni de service.

## Directive DavMinTimeout ¶

Description: | Durée minimale pendant laquelle le serveur maintient un verrou sur une ressource DAV
Syntaxe: | `DavMinTimeout secondes`
Défaut: | `DavMinTimeout 0`
Contexte: | configuration globale, serveur virtuel, répertoire
Statut: | Extension
Module: | mod_dav

Lorsqu'un client demande le verrouillage d'une ressource DAV, il peut aussi spécifier une durée au bout de laquelle le verrou sera automatiquement supprimé par le serveur. Cette valeur ne constitue qu'une requête, et le serveur peut l'ignorer ou informer le client qu'il va utiliser une valeur arbitraire.

La directive `DavMinTimeout` spécifie, en secondes, la durée minimale de verrouillage à renvoyer au client. Les Répertoires Web de Microsoft présentent une durée par défaut de 120 secondes ; la directive `DavMinTimeout` permet de définir une valeur supérieure (par exemple 600 secondes), afin de réduire les risques de perte du verrou par le client suite à une surcharge du réseau.

### Exemple

    <Location "/MSWord">
        DavMinTimeout 600
    </Location>

## Directive DavMSext ¶

Description: | Activer la prise en charge des extensions de Microsoft
Syntaxe: | `DavMSext None | [+|-]WDV | All`
Défaut: | `DavMSext None`
Contexte: | configuration globale, serveur virtuel, répertoire
Statut: | Extension
Module: | mod_dav

La directive `DavMSext` permet d'activer la prise en charge des extensions de Microsoft. Ses valeurs possibles sont :

- `None` Aucune extension de Microsoft n'est prise en charge.
- `WDV` Active la prise en charge de MS-WDV.
- `All` Toutes les extensions de Microsoft implémentées sont prises en charge. La liste se limite cependant à `WDV` car il s'agit de la seule extension de Microsoft actuellement implémentée.