# =====================================================
# Sillycone Village
# Configuration Apache sécurisée pour site statique Hugo
# =====================================================


# -----------------------------------------------------
# 1. Forcer HTTPS
# -----------------------------------------------------

RewriteEngine On

RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]


# -----------------------------------------------------
# 2. Protection contre accès fichiers sensibles
# -----------------------------------------------------

<FilesMatch "(^\.|\.git|\.env|\.bak|\.backup|\.old|\.sql|\.log|composer\.json|package\.json)">
    Require all denied
</FilesMatch>


# Bloquer l'accès au fichier .htaccess lui-même

<Files ".htaccess">
    Require all denied
</Files>


# -----------------------------------------------------
# 3. Headers de sécurité HTTP
# -----------------------------------------------------

<IfModule mod_headers.c>

    # Empêche le navigateur de deviner les types MIME
    Header always set X-Content-Type-Options "nosniff"


    # Protection contre certaines attaques XSS anciennes
    Header always set X-XSS-Protection "1; mode=block"


    # Contrôle des informations envoyées aux sites externes
    Header always set Referrer-Policy "strict-origin-when-cross-origin"


    # Désactive les fonctionnalités navigateur inutiles
    Header always set Permissions-Policy "geolocation=(), microphone=(), camera=(), payment=(), usb=()"


    # Protection contre l'intégration dans une iframe externe
    Header always set X-Frame-Options "SAMEORIGIN"


    # Politique de sécurité du contenu
    # - pas de JS
    # - pas de CDN
    # - pas de police externe
    # - CSS local uniquement

    Header always set Content-Security-Policy "default-src 'self'; style-src 'self'; img-src 'self' data:; font-src 'self'; object-src 'none'; base-uri 'self'; frame-ancestors 'self'; form-action 'self'"

</IfModule>


# -----------------------------------------------------
# 4. Compression
# -----------------------------------------------------

<IfModule mod_deflate.c>

    AddOutputFilterByType DEFLATE \
        text/html \
        text/plain \
        text/css \
        text/javascript \
        application/javascript \
        application/json \
        application/xml \
        image/svg+xml

</IfModule>


# -----------------------------------------------------
# 5. Cache navigateur
# -----------------------------------------------------

<IfModule mod_expires.c>

    ExpiresActive On

    # HTML : court pour faciliter les mises à jour
    ExpiresByType text/html "access plus 1 hour"


    # CSS
    ExpiresByType text/css "access plus 1 month"


    # SVG
    ExpiresByType image/svg+xml "access plus 1 month"


    # Fichiers statiques
    ExpiresByType application/javascript "access plus 1 month"


</IfModule>


# -----------------------------------------------------
# 6. Désactiver le listing des répertoires
# -----------------------------------------------------

Options -Indexes


# -----------------------------------------------------
# 7. Bloquer certains robots agressifs
# -----------------------------------------------------

<IfModule mod_setenvif.c>

    SetEnvIfNoCase User-Agent "MJ12bot" bad_bot
    SetEnvIfNoCase User-Agent "AhrefsBot" bad_bot

    <RequireAll>
        Require all granted
        Require not env bad_bot
    </RequireAll>

</IfModule>