Outsider Stage 0.5
Replay and verify a real, sealed Outsider Stage 0.5 intervention chain.
Translation pending
C-Tech Archives — coffre documentaire sécurisé : archives, intégrité SHA-256 et traçabilité.
Translation pending
SecurityPython · HTMLGitHub @eulogepLatest connection check failedOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Coffre documentaire sécurisé : RBAC refusé par défaut, intégrité SHA-256, journal d’audit, recherche plein texte et double authentification — Django 5.2 LTS · PostgreSQL
Translation pending
Taken from the repository README
Loading the full README.
Read the full README ↗C-Tech Archives est le coffre documentaire de C-Tech : chaque document y est classé, protégé selon son niveau de confidentialité, scellé par une empreinte SHA-256 et suivi par un journal d’audit. Le projet, académique, a été conçu comme une application réelle : les droits sont décidés par le serveur et refusés par défaut, l’interface ne montre que ce que le rôle autorise, et chaque affirmation de sécurité est couverte par un test.
Cinq des six améliorations soumises au vote des utilisateurs sont désormais disponibles.
Chaque archive porte un emblème unique, calculé à partir de sa référence (jamais de son contenu) : trois anneaux symétriques, des teintes et une rotation tirées d’une empreinte SHA-256. Le serveur dessine le sceau en SVG, et le formulaire le recalcule à l’identique pendant la saisie, avec la même empreinte côté navigateur.
| Menace | Réponse | Preuve |
|---|---|---|
| Lire une archive hors de son niveau | QuerySet filtré avant liste, recherche, pagination, palette et graphiques ; 404 anti-inférence | RBAC-001…040, tests de la palette et des analyses |
| Fichier piégé ou falsifié | Extension, type MIME et signature binaire vérifiés ; aperçu limité à PNG, JPEG et texte, isolé (sandbox, nosniff) | FILE-001…020, ArchivePreviewTests |
| Altération silencieuse | Empreinte SHA-256 au dépôt, vérification à la demande, alertes sur 30 jours | HASH-001…024, ArchiveDetailV2Tests |
| Brute force | Verrouillage temporaire par compte, mot de passe non testé pendant le verrou | LoginThrottleTests |
| XSS et injection de contenu | CSP stricte sans unsafe-inline, aucun script ni style en ligne, autoéchappement | test de conformité CSP de tous les gabarits |
| Formules malveillantes dans un export | Cellules préfixées dans le CSV | AuditExportTests |
| Compte admin réactivé à son insu | Bootstrap en mode création seule au démarrage | BootstrapCreateOnlyTests |
| Dépendances vulnérables | Versions figées, pip-audit en CI | 0 vulnérabilité connue |
Le projet ne se présente pas comme « totalement sécurisé » : il n’offre ni MFA, ni antivirus, ni chiffrement applicatif au repos. Les risques résiduels sont listés dans
docs/security-review.md.
flowchart LR
U([Navigateur]) -->|HTTPS · CSP stricte| MW[Middlewares<br/>sécurité · session · CSRF]
MW --> V[Vues Django]
V --> P{Politique RBAC<br/>refus par défaut}
P -->|hors périmètre| N[404 anti-inférence]
P -->|autorisé| S[Services métier]
S --> DB[(PostgreSQL)]
S --> F[[Stockage privé<br/>noms UUID]]
S --> H[Empreinte SHA-256]
S --> A[(Journal d’audit<br/>append-only)]
Un monolithe Django modulaire : accounts (identité, rôles, connexion), archives (domaine, RBAC, fichiers, intégrité, sceaux), audit (journal, export), dashboard (indicateurs) et config (paramètres, CSP, santé). Les détails sont dans docs/architecture-final.md.
Prérequis : Python 3.12 ou plus et Docker.
git clone https://github.com/eulogep/c-tech-archives.git
cd c-tech-archives
cp .env.example .env # renseigner DJANGO_SECRET_KEY et POSTGRES_PASSWORD
make setup # environnement virtuel + versions figées
make db # PostgreSQL 17 via docker compose
make migrate
CTECH_DEMO_PASSWORD='choisissez-un-mot-de-passe-robuste' make seed
make run # http://127.0.0.1:8000
make seed crée trois comptes de démonstration ([email protected], [email protected], [email protected]), 42 archives réalistes et dix-huit semaines d’activité. Connectez-vous avec chacun pour voir l’interface changer selon le rôle, puis vérifiez l’intégrité de CT-DEMO-0013 : son fichier a été volontairement altéré.
python -m venv .venv
.venv\Scripts\activate # Windows ; sinon : source .venv/bin/activate
pip install -r requirements.txt -c constraints.txt
python manage.py migrate
python manage.py seed_demo --password "choisissez-un-mot-de-passe-robuste"
python manage.py runserver
Une instance PostgreSQL existante convient : renseignez POSTGRES_HOST et POSTGRES_PORT dans .env. Le guide détaillé est dans docs/installation.md.
| Touche | Action |
|---|---|
| Ctrl/⌘ K | Palette de commandes et recherche d’archives |
| / | Rechercher dans la page |
| G puis D · A · J · P | Tableau de bord · Archives · Journal · Profil |
| N | Nouvelle archive (si le rôle le permet) |
| T | Thème clair ou sombre |
| ? | Aide des raccourcis |
| Rôle | Niveaux visibles | Peut aussi |
|---|---|---|
| Consultant | Public | Rechercher, prévisualiser, télécharger, vérifier l’intégrité |
| Agent d’archives | Public, Interne | Créer et modifier dans son périmètre |
| Administrateur | Public, Interne, Confidentiel | Consulter le journal d’audit, l’exporter, voir l’historique des accès |
| Superutilisateur technique | Tous | Administrer les référentiels et les comptes |
| Indicateur | Valeur |
|---|---|
| Tests automatisés | 406, exécutés en environ 20 s |
Vulnérabilités connues (pip-audit) | 0 |
| Politique de contenu | CSP sans unsafe-inline ; aucun CDN, police ou script tiers |
| CI | PostgreSQL 17 × Python 3.12 / 3.13, contrôles de déploiement, build des statiques, pip-audit |
| Accessibilité | Lien d’évitement, focus visible, graphiques décrits, palette au motif combobox, prefers-reduced-motion |
| Production | Statiques hachés et compressés, journaux console, sonde /healthz/ |
Les améliorations sont proposées dans l’application, où chaque utilisateur peut voter pour les priorités.
L’historique des versions est dans CHANGELOG.md.
| Document | Contenu |
|---|---|
docs/design-system.md | Charte « Sceau » : jetons, composants, algorithme du sceau, règles CSP |
docs/deployment-render.md | Déploiement Render, réalignement des comptes, diagnostic |
docs/architecture-final.md | Architecture et modèle de données |
docs/final-rbac-matrix.md | Matrice des droits par rôle et confidentialité |
docs/security-review.md | Revue de sécurité et risques résiduels |
docs/final-test-matrix.md | Couverture des tests |
docs/demo-script.md | Scénarios de démonstration |
Django 5.2 LTS · PostgreSQL 17 (recherche plein texte) · psycopg 3 · Pillow 13 · pypdf · segno · WhiteNoise · gunicorn · Django Templates · CSS et JavaScript sans dépendance · Fraunces, Geist et Geist Mono (SIL OFL, auto-hébergées) · GitHub Actions · Render.
Conçu et développé par Euloge Junior Mabiala (eulogep), projet académique de Génie Informatique réalisé pour C-Tech.
Les modalités de licence du code restent à définir avec C-Tech et l’établissement. Les polices sont distribuées sous SIL Open Font License 1.1 (licences dans static/fonts/).