Sécurité
Principe fondamental
Zero-trust côté serveur - Le client n'est jamais digne de confiance. Chaque action est re-vérifiée contre la structure WebContent stockée en base de données.
Les permissions sont déclaratives (configurées dans le Dev Panel), pas codées en dur. Le développeur n'a rien à coder pour la sécurité de base.
Pipeline de sécurité (5 étapes)
Chaque requête web traverse ce pipeline automatique :
Requête HTTP
|
v
1. HTTPS forcé (cert.pem = redirect HTTPS)
|
v
2. Licence + Session (Vérification composant + session)
|
v
3. Résolution URL (Domaine > Page > Paramètres)
|
v
4. Hook base hôte (BSPH_WEB_ON_CONNECTION)
|
v
5. Contrôle sécurité (Droits, pages, events, POST)
|
v
Code métier
3 niveaux de droits
Les droits d'accès sont déclaratifs et imbriqués :
| Niveau | Champ | Protégé | Comportement |
|---|---|---|---|
| 1 - Domaine | WebDomain.userRightUuid | Tout le site | Non connecté = login / Sans permission = 403 |
| 2 - Page | WebDomainMenu.userRightUuid | Une page spécifique | Même logique : login ou 403 |
| 3 - Bloc/Champ | blockProperties.userRightNeeded | Un bloc ou champ | Bloc non envoyé dans le HTML + données POST rejetées |
"Pas autorisé à voir un bouton ? Le HTML du bouton n'existe pas."
Les blocs protégés ne sont jamais envoyés au navigateur.
Validation des actions
- Trouver le WebContent - Requête sur triggerObject.uuid.
- Vérifier l'événement déclaré - className + functionName en whitelist.
- Valider les données - GG_CHECK_CONSTRAINT : droits, required, regex, types, captcha.
- Filtrer les champs inattendus - Tout champ POST non déclaré = supprimé.
Protections automatiques
| Attaque | Protection BWEB |
|---|---|
| Accès non autorisé | 3 niveaux de droits (domaine / page / bloc) |
| Injection de champs | Seuls les champs déclarés dans WebContent passent |
| Appel de fonction arbitraire | Whitelist serveur (className + functionName) |
| Man-in-the-middle | HTTPS forcé si cert.pem présent |
| Bots / scraping | URLs malformées = 404, captcha |
| Bloc protégé visible | Bloc jamais envoyé au navigateur |
Comparaison : HTML brut vs BWEB
| Fonctionnalité | HTML brut | BWEB |
|---|---|---|
| Sécurité | À coder soi-même | Automatique |
| Maintenance | Code source | Dev Panel visuel |
| Données 4D | REST custom | ORDA natif |
| CMS | À construire | Inclus |
| Droits | À coder | 3 niveaux déclaratifs |
| Validation | À coder | Regex, types, required |
| Événements | Non sécurisés | Whitelist serveur |

