A propos Skills
Interactive Sandbox Web3 Engineering Security Lab Engineering Infrastructure Portfolio Audit Publications Changelog Veille Techno CTF Writeups Uses / Setup Blog Stats Now
Projets Parcours Contact
Retour au portfolio
Philosophie active

Engineering Philosophy

Principes fondamentaux qui guident chaque ligne de code, chaque architecture et chaque decision technique. La securite n'est pas une feature, c'est une fondation.

Domaine Software Engineering
Approche Securite par conception
Methode STRIDE / AEDSC
Mindset Clean Architecture
0
Principes STRIDE
0
Principes SOLID
0
Architecture Layers
0
Phases AEDSC

Security by Design

La securite ne s'ajoute pas apres coup. Elle se conçoit des la premiere ligne de code, dans chaque couche de l'architecture.

Defense in Depth

Plusieurs couches de securite independantes. Si une couche est compromise, les autres maintiennent la protection. Firewalls, WAF, validation input, ORM parametrise, CSP headers.

Network Application Data Physical

Principe du moindre privilege

Chaque composant n'obtient que les permissions strictement necessaires a son fonctionnement. Roles RBAC granulaires, tokens scopes, filesystem permissions minimales.

RBAC Scopes Perms

Fail Secure

En cas d'erreur, le systeme doit tomber dans un etat securise. Deny by default, pas de stack traces en production, error handling explicite sans fuite d'information.

Deny Log Recover

Zero Trust Architecture

Ne jamais faire confiance implicitement, meme au reseau interne. Authentification mutuelle TLS, verification continue, micro-segmentation reseau.

mTLS Verify Segment

Input Validation

Toute donnee externe est hostile par defaut. Validation whitelist, sanitisation, encoding contextuel. Double validation client et serveur obligatoire.

Whitelist Sanitize Encode

Cryptography First

Chiffrement au repos et en transit. Hashing bcrypt/argon2 pour les secrets. Rotation de cles automatisee. Jamais de crypto maison.

AES-256 Argon2 TLS 1.3

Clean Architecture

Une architecture propre isole la logique metier des details d'implementation. Le code doit etre testable, maintenable et independant des frameworks.

Presentation Layer
Infrastructure Layer
Application Layer
Domain Layer

Domain Layer

Entites et regles metier pures. Zero dependances externes. C'est le coeur de l'application qui ne change jamais pour des raisons techniques.

Entities Value Objects Domain Events

Application Layer

Use cases et orchestration. Coordonne les entites du domaine sans connaitre les details d'infrastructure.

Use Cases DTOs Ports

Infrastructure Layer

Base de donnees, APIs externes, filesystem. Les details techniques qui implementent les interfaces definies par les couches internes.

Repositories Adapters Gateways

Presentation Layer

UI, controllers, CLI. Transforme les donnees pour l'affichage. Aucune logique metier ici.

Controllers Views Middleware

SOLID Principles

S

Single Responsibility - Une classe, une raison de changer

O

Open/Closed - Ouvert a l'extension, ferme a la modification

L

Liskov Substitution - Les sous-types doivent etre substituables

I

Interface Segregation - Interfaces specifiques plutot que generiques

D

Dependency Inversion - Dependre des abstractions, pas des implementations

Threat Modeling

Identifier et attenuer les menaces avant qu'elles ne deviennent des vulnerabilites. Le threat modeling est integre dans chaque phase de conception.

Threat Example Mitigation
S Spoofing
Usurpation d'identite via token JWT forge
Auth multi-facteurs, signature JWT RS256, certificate pinning
T Tampering
Modification de donnees en transit ou au repos
HMAC sur les payloads, checksums, TLS mutuel, audit logs immutables
R Repudiation
Utilisateur nie avoir effectue une action
Logs signes cryptographiquement, timestamps NTP, audit trail complet
I Information Disclosure
Fuite de donnees sensibles via error messages ou logs
Error handling generique, PII masking, encryption at rest, access control
D Denial of Service
Surcharge du systeme par requetes massives
Rate limiting, circuit breaker, auto-scaling, CDN, queue-based architecture
E Elevation of Privilege
Escalade de droits via IDOR ou injection
RBAC strict, validation server-side, parameterized queries, sandboxing

Methodologie AEDSC

Assess (evaluer les assets) - Enumerate (identifier les menaces) - Design (concevoir les controles) - Simulate (tester les attaques) - Correct (appliquer les corrections). Cycle continu integre au SDLC.

A Assess
E Enumerate
D Design
S Simulate
C Correct

Attack Surface

Application Core REST API endpoints WebSocket real-time Database PostgreSQL Auth OAuth/JWT 3rd Party APIs CDN Static

Data Flow Diagram

User Browser WAF Filter API Gateway Rate Limit Service Business DB Encrypted Auth JWT/OAuth HTTPS Validated Authed TLS

Documentation Discipline

Le code documente le comment. La documentation explique le pourquoi. Chaque decision architecturale est tracee et justifiee.

Code as Documentation

Noms de variables explicites, fonctions courtes, types stricts. Le code doit se lire comme de la prose technique sans commentaires superflus.

JSDoc & Type Annotations

Documentation structuree des interfaces publiques. Types de parametres, valeurs de retour, exemples d'utilisation et edge cases documentes.

API Documentation

OpenAPI/Swagger pour chaque endpoint. Schemas de requete/reponse, codes d'erreur, rate limits et exemples curl documentes automatiquement.

Architecture Decision Records

Chaque decision architecturale majeure est documentee avec le contexte, les options evaluees, la decision prise et les consequences attendues.

auth.service.ts
1/**
2 * Authenticates a user against the identity provider.
3 * Implements rate limiting (5 attempts/min) and account lockout.
4 *
5 * @param {AuthCredentials} credentials - User credentials (email + password)
6 * @param {RequestContext} ctx - Request metadata for audit logging
7 * @returns {Promise<AuthResult>} JWT token pair or error with reason
8 * @throws {RateLimitError} When attempt threshold exceeded
9 * @throws {AccountLockedError} After 10 consecutive failures
10 */
11async authenticate(
12 credentials: AuthCredentials,
13 ctx: RequestContext
14): Promise<AuthResult> {
15 await this.rateLimiter.check(ctx.ip);
16 const user = await this.userRepo.findByEmail(credentials.email);
17 if (!user || !await verifyHash(credentials.password, user.hash)) {
18 await this.auditLog.record('AUTH_FAILURE', ctx);
19 return AuthResult.failure('INVALID_CREDENTIALS');
20 }
21 return this.tokenService.issueTokenPair(user, ctx);
22}

Refactoring Mindset

Le refactoring n'est pas une corvee, c'est un investissement. Chaque PR est une opportunite d'ameliorer le code existant.

Input Validation Refactor

handler.js AVANT
1function createUser(req, res) {
2 const name = req.body.name;
3 const email = req.body.email;
4 const age = req.body.age;
5 // No validation, no sanitization
6 db.query(
7 `INSERT INTO users VALUES
8 ('${name}', '${email}', ${age})`
9 );
10 res.json({ success: true });
11}
handler.ts APRES
1async createUser(dto: CreateUserDTO) {
2 const validated = await validate(
3 CreateUserSchema, dto
4 );
5 const sanitized = sanitize(validated);
6 const user = await this.repo
7 .create(sanitized);
8 await this.audit.log(
9 'USER_CREATED', user.id
10 );
11 return UserResponse.from(user);
12}

Error Handling Refactor

api.js AVANT
1try {
2 const data = await fetchData();
3 return data;
4} catch (e) {
5 // Leaks internal details
6 res.status(500).json({
7 error: e.message,
8 stack: e.stack
9 });
10}
api.ts APRES
1try {
2 const data = await fetchData();
3 return Result.ok(data);
4} catch (e) {
5 const id = correlationId();
6 logger.error({ id, err: e });
7 return Result.fail({
8 code: 'INTERNAL_ERROR',
9 ref: id // safe ref
10 });
11}

Gestion de la dette technique

La dette technique est innevitable mais doit etre geree activement. Chaque sprint inclut un budget de refactoring. Les code smells sont traques via des metriques automatisees.

A Maintainability
<5% Duplication
90%+ Coverage
0 Critical Smells

System Thinking

Un systeme est plus que la somme de ses parties. Comprendre les interactions, les bottlenecks et les points de defaillance est essentiel.

Monitoring & Alerting

Metriques temps reel (latency p99, error rate, throughput), dashboards Grafana, alertes PagerDuty sur SLO breach. On ne peut pas fixer ce qu'on ne mesure pas.

metrics.sh
$ curl /metrics | head
http_requests_total{status="200"} 48291
http_request_duration_p99 0.042s
error_rate_5m 0.001%
SLO: 99.95% — OK

Observability Stack

Les trois piliers : Logs structures (ELK), Metriques (Prometheus/Grafana), Traces distribuees (Jaeger/OpenTelemetry). Correlation d'evenements cross-service.

Logs
Metrics
Traces

Chaos Engineering

Injecter des pannes controlees pour valider la resilience. Tester les circuit breakers, les failovers et les strategies de degradation gracieuse.

Kill Pod Network Delay CPU Stress DNS Failure

Capacity Planning

Modelisation de charge, tests de performance, projections de croissance. Anticiper les bottlenecks avant qu'ils ne deviennent des incidents.

Load Testing Auto-scaling Forecasting