Permissions des fichiers et dossiers dans PrestaShop : la bonne configuration
Un 777 « pour que ça marche » est une invitation. Nous vous expliquons les bonnes permissions et comment les corriger sans casser la boutique.
Quand un module ne peut pas écrire dans un dossier, la tentation est de lui mettre des permissions 777. Cela fonctionne, et en même temps cela permet à n'importe quel processus du serveur d'y écrire, y compris un attaquant qui aurait trouvé une vulnérabilité.
Les bonnes valeurs
- Dossiers : 755
- Fichiers : 644
- Fichiers de configuration (
app/config/parameters.php) : 640, ou 600 si le serveur le permet.
find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;
Le propriétaire compte plus que le chiffre
PrestaShop doit pouvoir écrire dans var/, img/, upload/, download/, themes/*/assets/cache, modules/ (pour installer) et translations/. Si les fichiers appartiennent au même utilisateur que celui qui exécute PHP, 755/644 suffit. Sinon, le problème vient du propriétaire, pas des permissions.
root. Les fichiers de cache appartiennent alors à root, le serveur web ne peut pas les écraser et le back-office commence à renvoyer des erreurs 500. Utilisez toujours l'utilisateur du serveur web.Bloquer PHP dans les dossiers d'upload
Dans les dossiers où l'on téléverse des fichiers, aucun .php ne devrait jamais s'exécuter. Avec Apache, un .htaccess dans chacun :
<FilesMatch "\.(?i:php|phtml|phar|pht)$">
Require all denied
</FilesMatch>
PrestaShop 9 fournit en standard un modules/.htaccess qui refuse l'accès direct aux fichiers .php dans modules/. Les modules doivent exposer leurs points d'entrée sous forme de contrôleurs (index.php?fc=module&module=...), pas de fichiers PHP isolés.
Après une mise à jour
Les mises à jour de PrestaShop peuvent écraser .htaccess et d'autres fichiers du cœur. Si vous aviez ajouté des règles de sécurité à la main, vérifiez qu'elles sont toujours là.