Protection des pièces jointes sous nginx
Le plugin dépose un .htaccess dans wp-content/uploads/solis-forms-uploads/,
qui interdit l’exécution de tout script s’y trouvant.
nginx ne lit pas les fichiers .htaccess. Aucune extension ne peut écrire
dans sa configuration, qui exige un rechargement du serveur : la règle doit donc
être posée à la main. Sans elle, le dossier reste protégé du listage mais rien
n’empêcherait l’exécution d’un script qui parviendrait à s’y déposer.
La règle
À ajouter dans le bloc server du site :
location ~* /wp-content/uploads/solis-forms-uploads/.*\.(php|phtml|php[0-9]|pl|py|jsp|asp|sh|cgi)$ {
deny all;
return 403;
}
Puis recharger : nginx -t && systemctl reload nginx.
Vérifier
Déposez un fichier test.php dans le dossier et appelez-le depuis un
navigateur. La réponse attendue est 403. Si le fichier s’exécute, la règle
n’est pas active — vérifiez qu’elle précède le location qui transmet les .php
à PHP-FPM, nginx retenant la première correspondance parmi les expressions
régulières.
Pensez à supprimer le fichier de test.
Pourquoi cette protection existe
Les types acceptés sont contrôlés d’après le contenu réel du fichier, et le nom
enregistré est reconstruit à partir de l’extension retenue : un document.php.jpg
devient {jeton}.jpg, l’extension double ne survit pas au dépôt.
Cette règle n’en reste pas moins nécessaire. La défense en profondeur ne suppose pas qu’un contrôle en amont soit infaillible, et la liste des types acceptés peut être élargie un jour, par une extension ou par une évolution du plugin.
Hébergements gérés
Certains hébergeurs (WP Engine, Kinsta, Pressable, o2switch…) interdisent déjà
l’exécution de PHP dans wp-content/uploads. La règle est alors superflue, mais
sans effet indésirable : la poser ne coûte rien et vous prémunit d’un changement
de politique.
