Web app per la gestione dello studio personale: corsi, lezioni, appunti, materiali ed esercitazioni in un unico posto.
## Perché questo progettoProgetto personale nato per organizzare il proprio percorso di studio in modo strutturato, con particolare attenzione alla sicurezza applicativa lato backend.
Mentora nasce con un'architettura volutamente semplice: niente framework, niente build step, solo PHP e MySQL, con un focus deliberato sulla sicurezza, spesso trascurata in progetti di questa scala.
| Livello | Tecnologia |
|---|---|
| Backend | PHP puro (nessun framework), estensione mysqli |
| Database | MySQL / MariaDB |
| Frontend | Bootstrap 5 + Bootstrap Icons |
| Server | Apache, con hardening via .htaccess |
Nessuna dipendenza esterna via Composer o npm, scelta architetturale intenzionale, non una limitazione subita.
- Gestione corsi con avanzamento calcolato automaticamente (o manuale, se il corso non ha lezioni collegate)
- Lezioni tracciabili come completate/non completate
- Appunti ed esercitazioni collegabili a un corso, con scadenze
- Upload materiali con controllo reale del tipo di file (non solo estensione)
- Autenticazione completa: registrazione con verifica email, reset password, opzione "ricordami"
Questa è la parte su cui ho investito più attenzione, non un aspetto secondario:
| Area | Misura implementata |
|---|---|
| SQL Injection | Prepared statement su tutte le query, nessuna concatenazione di input utente |
| CSRF | Token di sessione verificato su ogni azione che modifica stato |
| Upload file | Whitelist estensioni + controllo MIME reale + esecuzione PHP disabilitata nella cartella upload |
| Sessioni | Rigenerazione ID al login, timeout per inattività, token "ricordami" verificato via hash (mai in chiaro nel DB) |
| Header HTTP | CSP, X-Frame-Options, X-Content-Type-Options, Referrer-Policy |
| Brute force | Blocco account dopo 5 tentativi falliti (15 minuti) |
| Enumerazione utenti | Messaggi generici su recupero password/verifica — non rivelano se un'email è registrata |
git clone https://github.com/SimoneM97/Mentora.git
cd Mentora- Crea un database MySQL/MariaDB vuoto
- Copia
config.example.phpinconfig.phpe inserisci le credenziali del database - Avvia il progetto su un server Apache/PHP locale (es. XAMPP), con la cartella del progetto in
htdocs/ - Visita
includes/install.phpda browser per creare/migrare lo schema del database (operazione manuale, va eseguita una sola volta) - Verifica che
uploads/elogs/abbiano i permessi di scrittura corretti
Nota: l'invio email usa
mail()nativo di PHP. In locale, senza un server SMTP configurato, i messaggi vengono scritti solo inlogs/email.loginvece di essere inviati realmente — comportamento voluto, non un bug.
Preferisco essere esplicito su cosa non è ancora rifinito:
- Nessun test automatico al momento (in lavorazione)
- Nessun autoload/Composer, dipendenze incluse via
require_onceespliciti dashboard.phpinterroga il database direttamente in alcuni punti, invece di passare sempre dal layer controller- CSP con
unsafe-inlinein alcune pagine, per via di handleronclick/onsubmitinline non ancora esternalizzati
- Test automatici (PHPUnit) sul modulo di autenticazione
- Grafici di andamento nel tempo in dashboard
- Esportazione appunti in PDF
- Pagina profilo utente (modifica dati da loggati)
Distribuito con licenza MIT — vedi LICENSE.
Documentazione tecnica completa: architecture.md

