Surface d'exposition

Surface d'exposition

Dernière mise à jour : 2026-05-10

Endpoints publics vs internes

Public (via NPM)

Interne (LAN seulement)

CORS

config.CORS_ORIGIN whitelist :

Parsing : splitAndTrimArray() + matching CIDR via ipaddr.js. Parsé une fois au boot, comparé à chaque requête.

# Exemple .env prod
CORS_ORIGIN=https://rules.thymon.fr,192.168.10.0/24

⚠️ Ne pas laisser CORS_ORIGIN=* en prod — annule la protection.

Headers sécurité

Gérés par NPM en amont (Advanced → Custom Nginx Configuration) :

Strict-Transport-Security: max-age=31536000; includeSubDomains
Content-Security-Policy: default-src 'self'; ... (à durcir si nécessaire)
X-Frame-Options: SAMEORIGIN
X-Content-Type-Options: nosniff
Referrer-Policy: strict-origin-when-cross-origin
Permissions-Policy: ...

Vérifier : curl -I https://rules.thymon.fr.

Ports ouverts (Unraid host)

À auditer périodiquement avec nmap -p- localhost depuis Unraid CLI :

Port Service Exposition
80, 443 NPM (entrée publique) Internet
22 SSH Unraid LAN seulement (firewall)
6333 Qdrant LAN
8099 TEI LAN
8990 TEI Reranker LAN
3000 App LAN seulement

⚠️ Qdrant exposé sur LAN sans auth : si quelqu'un a accès au LAN, il peut lire / modifier toutes les collections vectorielles. Acceptable pour un home network privé, mais à durcir si le LAN devient moins de confiance (genre invités, IoT) :

Injection / validation

Rate limiting

Rate-limiters in-memory (Map). Restart container = compteurs reset.

Couverture log

Les actions sensibles sont logées :

Filtrer dans /app/data/logs/server.log :

grep -E "auth|admin|ssh|quota" /app/data/logs/server.log

CVE / dépendances vulnérables

npm audit régulièrement. Niveau acceptable : --audit-level=high. Critical → fix immédiat.

Pas de scanner CI auto actuellement. À ajouter : un job audit dans .gitea/workflows/build.yml qui fail sur high+.

Pas de WAF

NPM ne fait pas de WAF (rules custom Nginx limitées). Si un jour tu veux du WAF :

Pour l'usage actuel (single user, LAN-friendly), c'est overkill.

Données collectées / RGPD

Ce que l'app stocke :

Pas d'analytics tiers (Google Analytics, Hotjar, etc.). Logs serveur en local.

Pour un usage perso, RGPD n'est pas un sujet. Si tu ouvres à des tiers :


Revision #1
Created 2026-05-10 15:20:20 UTC by thymon
Updated 2026-05-10 15:20:20 UTC by thymon