Skip to content

Repository files navigation

Mentora

Mentora Logo

Web app per la gestione dello studio personale: corsi, lezioni, appunti, materiali ed esercitazioni in un unico posto.

Progetto personale nato per organizzare il proprio percorso di studio in modo strutturato, con particolare attenzione alla sicurezza applicativa lato backend.

Dashboard di Mentora

## Perché questo progetto

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.

Stack tecnico

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.

Funzionalità principali

  • 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"

Sicurezza applicativa

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

Installazione locale

git clone https://github.com/SimoneM97/Mentora.git
cd Mentora
  1. Crea un database MySQL/MariaDB vuoto
  2. Copia config.example.php in config.php e inserisci le credenziali del database
  3. Avvia il progetto su un server Apache/PHP locale (es. XAMPP), con la cartella del progetto in htdocs/
  4. Visita includes/install.php da browser per creare/migrare lo schema del database (operazione manuale, va eseguita una sola volta)
  5. Verifica che uploads/ e logs/ 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 in logs/email.log invece di essere inviati realmente — comportamento voluto, non un bug.

Debito tecnico noto

Preferisco essere esplicito su cosa non è ancora rifinito:

  • Nessun test automatico al momento (in lavorazione)
  • Nessun autoload/Composer, dipendenze incluse via require_once espliciti
  • dashboard.php interroga il database direttamente in alcuni punti, invece di passare sempre dal layer controller
  • CSP con unsafe-inline in alcune pagine, per via di handler onclick/onsubmit inline non ancora esternalizzati

Roadmap

  • 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

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages