Configurer GRAV Correctement en Matière de Sécurité

La sécurité est une préoccupation fondamentale lors de la gestion de tout site web, surtout lorsque vous travaillez avec un système de gestion de contenu comme Grav CMS. Bien que Grav soit intrinsèquement plus sûr que d'autres plateformes grâce à son architecture sans base de données, il est toujours recommandé de prendre des mesures supplémentaires pour protéger votre site. Dans cet article, nous vous guidons étape par étape pour configurer correctement Grav et minimiser les risques.

Cette guide repose sur mes propres apprentissages pendant le développement de VeleroAzul et sur les précieuses recommandations fournies par mon assistant IA.


1. Gardez votre Site à Jour

Les mises à jour incluent des correctifs de sécurité et des améliorations importantes. Assurez-vous de maintenir à jour tant Grav que tous ses plugins :

  • Depuis le panneau d'administration : Tools > Check for Updates.
  • Depuis la ligne de commande :
    bin/gpm self-upgrade
    bin/gpm install grav

2. Configurez l'Accès au Panneau d'Administration

Le panneau d'administration (/admin) est une entrée critique. Protégez cet accès en suivant ces étapes :

a) Utilisez des Mots de Passe Forts

Changez le mot de passe par défaut pour un mot de passe sécurisé (au moins 12 caractères avec lettres, chiffres et symboles). Activez l'authentification à deux facteurs (2FA) si possible.

b) Renommez la Route /admin

Changer la route du panneau d'administration rend difficile les tentatives d'accès non autorisées. Éditez user/config/system.yaml :

admin:
    route: /votre-nouvelle-route-secrete

c) Restreignez l'Accès par IP

Si vous naviguez depuis des IPs fixes, restreignez l'accès au panneau uniquement depuis ces adresses. Créez un fichier .htaccess dans /admin (pour Apache) :

Order deny,allow
Deny from all
Allow from 123.456.789.012  # Remplacez avec votre adresse IP

Pour Nginx, configurez dans votre fichier de configuration :

location /votre-nouvelle-route-secrete {
    allow 123.456.789.012;  # Remplacez avec votre adresse IP
    deny all;
}

3. Désactivez les Fonctions Inutiles

Supprimez ou désactivez les plugins et fonctionnalités que vous n'utilisez pas. Chaque composant supplémentaire peut être un vecteur d'attaque potentiel. Allez dans Plugins dans le panneau d'administration et désactivez ce qui n'est pas nécessaire.


4. Protégez les Fichiers Sensibles

Bloquez l'accès direct aux répertoires sensibles via des fichiers .htaccess. Voici ce que vous avez déjà fait et quelques suggestions supplémentaires :

a) Répertoire /user

Protégez ce répertoire avec un .htaccess personnalisé :

<Files "*">
    Order deny,allow
    Deny from all
</Files>

<FilesMatch "\.(yaml|md|txt|json|woff|woff2|ttf|eot|svg|png|jpg|jpeg|gif|css|js)$">
    Allow from all
</FilesMatch>

b) Répertoires /cache et /logs

Ajoutez un .htaccess de base dans ces répertoires :

Deny from all

c) Nettoyez la Cache Régulièrement

Exécutez cette commande périodiquement :

bin/grav clear-cache

5. Configurez HTTPS

Activez HTTPS pour chiffrer toute la communication entre le client et le serveur. Utilisez Let's Encrypt pour obtenir un certificat SSL gratuit. Dans votre fichier .htaccess principal, redirigez tout le trafic vers HTTPS :

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

6. Authentification HTTP de Base pour /admin

Ajoutez une couche de sécurité supplémentaire avec l'authentification HTTP de base. Cela nécessite la création d'un fichier .htpasswd avec des identifiants sécurisés.

Pour Apache :

Créez un .htaccess dans /admin :

AuthType Basic
AuthName "Restricted Area"
AuthUserFile /chemin/vers/votre/fichier/.htpasswd
Require valid-user

Générez le fichier .htpasswd :

htpasswd -c /chemin/vers/votre/fichier/.htpasswd votre-utilisateur

Pour Nginx :

Configurez dans votre fichier de configuration :

location /votre-nouvelle-route-secrete {
    auth_basic "Restricted Area";
    auth_basic_user_file /chemin/vers/votre/fichier/.htpasswd;
}

7. Surveillez les Logs

Vérifiez régulièrement les logs du système pour détecter des activités suspectes :

  • Les logs de Grav sont dans /logs.
  • Les logs du serveur web (Apache ou Nginx) peuvent également fournir des indices sur des accès non autorisés.

8. Désactivez le Mode Debug

Le mode debug affiche des informations sensibles sur les erreurs. Désactivez-le en production :

debug:
    enabled: false

9. Restreignez l'Usage des Plugins de Tierces Parties

Installez uniquement des plugins provenant de sources fiables et tenez-les à jour. Évitez d'utiliser des plugins inutiles.


10. Configurez un Pare-feu

Un pare-feu ajoute une couche de protection supplémentaire contre les attaques malveillantes. Certaines options populaires incluent :

  • Cloudflare : Offre une protection contre les DDoS et des pare-feux gratuits.
  • Pare-feu du Serveur : Configurez des règles spécifiques pour bloquer le trafic suspect.

11. Faites des Sauvegardes Régulières

Les sauvegardes sont cruciales pour vous remettre de pannes ou d'attaques. Utilisez le plugin officiel Backup ou automatiser les sauvegardes avec des scripts comme rsync.


12. Configurez Matomo Analytics sans Cookies

Si vous utilisez Matomo, assurez-vous de le configurer sans cookies pour respecter le RGPD. Vérifiez qu'il ne traque pas de données personnelles.


13. Protégez contre les Attaques CSRF

Activez la protection CSRF dans user/config/security.yaml :

csrf:
    enabled: true

14. Nettoyez les Fichiers Temporaires

Supprimez les fichiers temporaires qui pourraient accumuler des informations sensibles :

bin/grav clear-temp

15. Configurez les Permissions Correctement

Définissez les permissions appropriées pour éviter les accès non autorisés :

find /chemin/vers/grav -type d -exec chmod 755 {} \;
find /chemin/vers/grav -type f -exec chmod 644 {} \;
chmod -R 775 /chemin/vers/grav/cache
chmod -R 775 /chemin/vers/grav/logs

16. Ajoutez un Fichier robots.txt

Évitez que des bots malveillants indexent des parties sensibles de votre site. Exemple :

User-agent: *
Disallow: /admin/
Disallow: /cache/
Disallow: /logs/
Disallow: /backup/
Disallow: /user/
Allow: /user/pages/
Allow: /user/themes/
Allow: /user/images/
Allow: *.css$
Allow: *.js$

17. Considérez une CDN (Optionnel)

Une CDN comme Cloudflare améliore les performances et offre des couches supplémentaires de sécurité, telles que la protection contre les DDoS.


Conclusion

Suivre ces étapes garantira que votre site Grav soit bien protégé contre les menaces courantes. Rappelez-vous que la sécurité n'est jamais complète : vérifiez régulièrement les mises à jour, surveillez les logs et ajustez les configurations selon vos besoins.

Cette guide repose sur mes propres apprentissages pendant le développement de VeleroAzul et sur les précieuses recommandations fournies par mon assistant IA. J'espère qu'elle sera utile à vous et à d'autres utilisateurs de Grav cherchant à améliorer la sécurité de leurs sites.