Sécurité de PHP et Apache, SetHandler vs AddHandler

Dans les paquets PHP officiels d'Enterprise Linux et Fedora <= 17, le moteur est activé par la directive AddHandler. Depuis Fedora 18, ou pour les utilisateurs de mon dépôt, il est activé par la directive SetHandler.

Quelques explications.

Ancienne version (dans le fichier /etc/httpd/conf.d/php.conf)

AddHandler php5-script .php

Comme indiqué dans la documentation apache, la présence du suffixe dans le nom d'un fichier, quelque soit sa position, déclenchera l'exécution du moteur. Cela peut poser un problème de sécurité dans un espace de téléchargement public où un manque de contrôle permettra à un utilisateur d'envoyer un fichier image.php.png et ensuite de lancer le script contenu.

Nouvelle version, recommandée (§8) dans la documentation du projet PHP:

<FilesMatch \\.php$>
    SetHandler application/x-httpd-php
</FilesMatch>

Désormais, seul le suffixe final déclenche l'exécution du moteur. La sécurité est donc meilleure (bien que laisser les utilisateurs maitriser le nom des fichiers dans un dossier public me semble une énorme erreur de conception). Je n'ai pas mesuré d'impact sur les performances.

Attention, ce changement peut casser des configurations existantes.

Dans le cas où vous souhaitez laisser la possibilité aux utilisateurs de télécharger des fichiers .php dans un espace public, mais en interdisant leur exécution, comme c'est le cas sur ce blog.

Avec l'ancienne configuration, il suffisait de supprimer le gestionnaire

<Directory /chemin/blog/public>
    RemoveHandler .php
<Files ~ "\\.php$">
ForceType text/plain
</Files>
</Directory>

Cette configuration ne fonctionnera plus et devra donc être adaptée

Par exemple, j'utilise (et j'en profite pour activer l'affichage colorisé des sources) :

<Directory /chemin/blog/public>
<FilesMatch \\.php$>
    SetHandler None
ForceType text/plain
</FilesMatch>
<FilesMatch \\.phps$>
    SetHandler application/x-httpd-php-source
</FilesMatch>
</Directory>

Ex : twit.php ou twit.phps

Donc, si vous passez de Fedora 17 à Fedora 18, ou si vous êtes passés de PHP 5.3 à PHP 5.4 depuis mon dépôt, pensez à vérifier tous vos fichiers de configuration.

Vus : 253
Publié par Remi Collet : 73