Fichiers statiques et logs
Sécurité des fichiers statiques et des fichiers logs
Notions théoriques
1. Introduction
Les fichiers statiques (images, CSS, JavaScript) et les fichiers de logs sont des éléments essentiels d’un site Web ou d’un serveur.
Cependant, s’ils ne sont pas correctement protégés, ils peuvent exposer des informations sensibles ou être exploités par des attaquants.
Les fichiers statiques sont souvent stockés dans des répertoires accessibles publiquement (/assets/, /static/, /public/).
Les fichiers de logs, en revanche, enregistrent des informations sur l’activité du serveur et des utilisateurs (access.log, error.log).
2. Risques liés aux fichiers statiques
Les fichiers statiques peuvent contenir des informations sensibles si leur accès n’est pas restreint :
- Fichiers de configuration exposés (
config.js,.env,settings.json). - Fichiers de sauvegarde oubliés (
index.php.bak,config.old). - Fichiers contenant des commentaires ou du code non utilisé révélant des informations sur l’architecture du site.
Un attaquant peut scanner un site Web pour identifier ces fichiers et les exploiter.
3. Risques liés aux fichiers de logs
Les fichiers de logs enregistrent des informations qui peuvent être utiles pour la surveillance et le débogage, mais aussi pour les attaquants :
- Fuites d’informations sensibles (adresses IP, identifiants, erreurs détaillées).
- Injection de commandes si les logs ne sont pas correctement filtrés.
- Exploitation des logs pour des attaques XSS si les entrées utilisateur ne sont pas échappées.
Un attaquant peut essayer d’accéder aux fichiers de logs via des chemins connus (/var/log/apache2/access.log, /logs/error.log).
4. Bonnes pratiques de sécurisation
a) Protection des fichiers statiques
- Restreindre l’accès aux fichiers sensibles via
.htaccessou la configuration du serveur. - Ne pas stocker d’informations sensibles dans les fichiers statiques.
- Supprimer les fichiers inutilisés ou de sauvegarde.
b) Protection des fichiers de logs
- Définir des permissions strictes (
chmod 600pour empêcher la lecture par des utilisateurs non autorisés). - Désactiver l’affichage des erreurs en production (
display_errors = Offdansphp.ini). - Limiter l’accès aux logs via un pare-feu ou une authentification.
Exemple pratique
Il est possible de sécuriser les fichiers statiques et les logs en appliquant des règles de configuration et des bonnes pratiques.
1. Protéger les fichiers statiques avec .htaccess
Un fichier .htaccess peut être utilisé pour empêcher l’accès à certains fichiers :
# Bloquer l’accès aux fichiers de configuration
<FilesMatch "\.(env|json|bak|old|config)$">
Order allow,deny
Deny from all
</FilesMatch>
2. Restreindre l’accès aux fichiers de logs
Il est possible d’empêcher l’accès direct aux fichiers de logs en les déplaçant hors du répertoire public :
sudo mv /var/www/html/logs /var/logs_secure/
Puis, configurer Apache pour interdire l’accès :
<Directory "/var/www/html/logs">
Order allow,deny
Deny from all
</Directory>
3. Sécuriser les permissions des fichiers de logs
Il est important de restreindre les permissions des fichiers de logs :
chmod 600 /var/logs_secure/*.log
chown root:www-data /var/logs_secure/*.log
Test de mémorisation/compréhension
TP pour réfléchir et résoudre des problèmes
L’objectif de ce TP est de mettre en pratique les bonnes pratiques de sécurité pour protéger les fichiers statiques et les logs d’un site Web.
Étape 1 : Préparer l’environnement de travail
Avant de commencer, il est essentiel d’avoir un environnement fonctionnel.
Instructions :
- Créer un dossier de projet pour organiser les fichiers :
mkdir securite-Web
cd securite-Web
- Créer une arborescence de répertoires pour structurer les fichiers :
mkdir public logs_secure
- Créer des fichiers de test pour simuler un site Web :
touch public/index.html public/config.json logs_secure/access.log logs_secure/error.log
- Ajouter du contenu dans
public/index.html:
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Site sécurisé</title>
</head>
<body>
<h1>Bienvenue sur le site sécurisé</h1>
</body>
</html>
- Ajouter du contenu dans
public/config.json(fichier sensible) :
{
"database": {
"user": "admin",
"password": "supersecret"
}
}
- Ajouter des logs de test dans
logs_secure/access.log:
echo "192.168.1.1 - - [14/Mar/2025:10:00:00 +0100] \"GET /index.html HTTP/1.1\" 200 -" > logs_secure/access.log
Vérifier si :
- Le projet est bien structuré avec un dossier
public/pour les fichiers accessibles etlogs_secure/pour les logs sécurisés. - Le fichier
config.jsoncontient des informations sensibles qui ne doivent pas être accessibles publiquement.
Étape 2 : Protéger les fichiers statiques sensibles
Certains fichiers statiques ne doivent pas être accessibles directement via un navigateur.
L’objectif est de bloquer l’accès aux fichiers sensibles dans public/.