OSD_Aurox™ framework PHP brutaliste
open source · MIT

Vue d'ensemble

La carte du framework : ce que fait chaque classe, en une ligne. Pour le détail, chaque nom renvoie à son code source, court et commenté. Tout est dans src/OsdAurox/, une classe par sujet.

Les principes

  • Des tableaux, pas des objets. Les données circulent sous forme de tableaux PDO, du SQL jusqu'à la vue.
  • Des méthodes statiques, sans état. Un singleton seulement quand une initialisation doit être conservée (configuration, connexion).
  • La base de données fait référence pour les schémas, les types et les relations.
  • Filtrer en entrée, échapper en sortie. Sec::getParam() à la lecture, Sec::h() à l'affichage.
  • Pas de dépendance lourde. PHP, PDO, jQuery et Bootstrap. Le code se lit en une après-midi.

Base & configuration

AppConfig Lit conf.php. get() échappe les valeurs, safe: true pour la valeur brute.
Base Raccourcis transverses : redirection, détection mobile, balises script/css versionnées, dieOrThrow().
Dbo Connexion PDO unique, MySQL / MariaDB ou PostgreSQL, en SSL.
Log Journal fichier minimal (/logs), niveaux debug à error.
ErrorMonitoring En production, capte erreurs, exceptions et fatales, et les notifie.

Données

BaseModel Active Record minimal : des tableaux PDO en entrée et en sortie, méthodes statiques. Pas un ORM.
BrutalCrud CRUD générique décrit par un tableau de configuration, pour les tables très simples.
Cache Cache en fichiers plats, clé salée, durée de vie par entrée. Scalaires et tableaux.
Dict Lecture sûre dans les tableaux (clé absente, valeur par défaut).

Formulaires & validation

Forms Génère les champs HTML (input, select, date, checkbox, textarea…) déjà échappés.
Validator Valide un tableau de données selon des règles décrites en tableau (syntaxe inspirée de Dolibarr).
FormValidator Collecte les erreurs de validation et les rend au formulaire.
Field Une règle de champ, telle que lue par le Validator.
FormsFilter Filtres de liste (exact, contient, commence par, dates) sous forme de liens et de champs.
Paginator Pagination SQL (LIMIT / OFFSET) ou tableau DataTables, avec recherche.

Sécurité

Sec Filtres d'entrée (getParam, sanitize), échappement de sortie (h), rôles, rate-limit, liste blanche SQL.
Csrf Jeton CSRF par session ou par requête.
Captcha Captcha image léger, sans service externe. À coupler avec le rate-limit.
Otp Double authentification TOTP (RFC 6238), compatible Google Authenticator, Aegis…
Ban WAF maison : honeypots, motifs d'URL, User-Agent, flood de 404, bans écrits dans .htaccess.
AbuseIp Bloque les IP mal notées sur AbuseIPDB via votre propre proxy. Désactivé sans URL configurée.
IpInfo Géolocalisation d'IP via votre passerelle. Désactivé sans URL configurée.

Vues

Flash Messages flash en session (succès, info, avertissement, erreur).
Modal Modales Bootstrap générées côté serveur (classique, chargement, saisie).
Filter Filtres d'affichage : dates FR / US, troncature.
Fmt Formatage pour l'affichage (booléens…).
I18n Traductions et formats localisés, champs traduits en base (name_fr, name_en…).
MobileDetect Détection mobile / tablette par User-Agent.
Image Redimensionnement et compression d'images (Imagick).
Js Passerelle PHP vers la console JS, pour le debug.
ViewsShortcuts Liste les fichiers d'un dossier, pour un index de vues en développement.

Échanges & services

Api Réponse JSON au format commun (statut, messages, données, erreurs de validation) comprise par le JS d'Aurox.
Mailer Envoi SMTP via PHPMailer, configuré par conf.php.
Discord Notifications vers un webhook Discord (bans, erreurs).

Côté navigateur

api-request.js Appels Ajax (fetch) avec jeton CSRF, au format Api.
validator.js Affiche les erreurs de validation renvoyées par Api.
osd_utils.js Utilitaires : slug, nettoyage de saisie, erreurs de champ.
modal-manager.js Gestion des modales côté navigateur.
osd-bp.js Breakpoint Bootstrap courant de l'écran.

À savoir avant la production

  • Dans BaseModel, les noms de colonnes et de tables passent par une liste blanche. Seul le paramètre $select est injecté tel quel : jamais de saisie utilisateur dedans.
  • L'IP du visiteur est lue uniquement dans REMOTE_ADDR. Derrière un proxy ou un CDN, configurez mod_remoteip, sinon le WAF bannira le proxy.
  • AbuseIp et IpInfo n'envoient rien tant qu'aucune URL d'API n'est configurée.
  • En production, HTTPS est forcé et Strict-Transport-Security inclut les sous-domaines.

Le détail est dans le README du dépôt. Pour installer : Démarrer.