Sécurité de PHP et Apache, SetHandler vs AddHandler
+
Par Remi le dimanche 13 janvier 2013, 08:40 - HowTo - Lien permanent
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>
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.
Commentaires
Haha ! Je n'avais pas le problème ; mais je n'avais pas fait attention au php.conf.rpmnew lors de la mise à jour...
Une fois la bonne config en place ; j'ai effectivement pu reproduire le problème (ie. mes fichiers .php étaient exécutés) et le correctif que tu proposes a bel et bien corrigé le problème.
Comme d'hab ; merci ;-)