Sicurezza e privacy

Ogni query passa da una guardia.

Questa pagina non dice che siamo sicuri. Dice che cosa facciamo, dove stanno i dati, quanto li teniamo e chi altro li tocca. Comprese le cose che non facciamo.

Isolamento

I dati della tua struttura non escono dalla tua struttura.

Wyora è multi-struttura: sullo stesso sistema convivono organizzazioni diverse. Il rischio numero uno di un software così è che una richiesta legga per errore i dati di qualcun altro. Non ci affidiamo alla sola attenzione di chi scrive il codice.

Un controllo automatico ispeziona ogni interrogazione che il sistema invia al database. Se tocca una tabella che contiene dati di struttura senza filtrarli per struttura, la segnala. In integrazione continua la soglia è zero: una sola segnalazione fa fallire la build e la modifica non entra.

71 tabelle sorvegliate

Le tabelle sotto controllo non sono un elenco scritto a mano: sono ricavate automaticamente dalla struttura del database, quindi una tabella nuova entra nel perimetro da sola.

Soglia zero in integrazione continua

Il controllo gira dopo la suite di test end-to-end. Più di zero violazioni e la build è rossa.

26 punti deboli chiusi

Alla prima esecuzione reale il controllo ha trovato 26 query prive di filtro diretto. Verificate una per una: nessuna esponeva dati, ma tutte erano un punto singolo di guasto. Corrette tutte.

Oltre 50 test di isolamento

Oltre alla guardia, una suite dedicata verifica che una struttura non veda i dati di un'altra sui gruppi di endpoint principali.

Cosa questa guardia non è.Non è row level security applicata dal database: è un controllo un livello più in alto, scelto perché la vera RLS richiederebbe una transazione aperta per l'intera durata di ogni richiesta — inaccettabile quando una richiesta attende un servizio esterno per decine di secondi. E non copre le query emesse dai guardiani stessi, che girano prima che il contesto della richiesta sia disponibile. Lo diciamo perché un numero senza il suo limite è pubblicità, non informazione.

Accessi

Un token rubato non dice chi sei.

Il token contiene solo un identificativo

Ruolo, organizzazione e strutture gestite non stanno dentro il token: vengono letti dal database a ogni richiesta. Un token intercettato non porta con sé nessun privilegio da riutilizzare, e una revoca ha effetto entro un minuto.

Sessione di 30 minuti

Il token di accesso dura mezz'ora, in un cookie non leggibile da JavaScript. Ridotto dalle 24 ore iniziali per restringere la finestra utile a un attaccante.

Rinnovo con rotazione

Ogni rinnovo emette un token nuovo e invalida il precedente. Nel database è conservata solo la sua impronta: da un dump non si ricava un accesso.

Verifica in due passaggi

Disponibile per tutti gli account dello staff, con codice temporaneo generato dall'app di autenticazione.

Freno ai tentativi ripetuti

Limiti di frequenza a fasce sugli endpoint, più il blocco dell'account dopo una sequenza di tentativi falliti.

Sull'app, nella cassaforte del telefono

Le credenziali di sessione dell'app vivono nel portachiavi di iOS e nello storage cifrato di Android, non in un file dell'applicazione.

Cifratura

Non tutto è uguale, quindi non tutto è protetto allo stesso modo.

Le password non sono cifrate: sono trasformate con una funzione che non si inverte, calibrata per essere lenta da attaccare. Il codice fiscale, i segreti della verifica in due passaggi, i codici di recupero, le credenziali di accesso unico e la chiave AI della struttura sono cifrati nel database con AES-256-GCM. Anche il testo inviato all'AI e la sua risposta sono cifrati.

I file (documenti, certificati, foto) non si servono da un percorso indovinabile: ogni accesso passa da un collegamento firmato che scade.

Continuità

Il backup che nessuno ha mai provato a ripristinare non è un backup.

  • Copia completa ogni notte, cifrata prima di lasciare il sistema.
  • Trenta giorni di storico, più una copia fuori sede su archivio separato.
  • Prova di ripristino trimestrale, con procedura scritta.
  • Allarme automatico se un backup salta o se la copia fuori sede invecchia oltre le 25 ore.

La regola manualistica dice tre copie su due supporti con una fuori sede. Noi oggi siamo a due copie su due supporti, una fuori sede: il rischio grave (perdita del datacenter) è coperto, la terza copia indipendente no. Preferiamo scriverlo.

Dati personali

Quanto teniamo le cose, e perché.

Un atleta può chiedere in ogni momento l'esportazione dei propri dati o la cancellazione, dal suo profilo nell'app. L'esportazione copre le tabelle che contengono dati personali, mantenute in un elenco dedicato. La cancellazione rende anonimo il profilo subito e rimuove definitivamente i dati dopo novanta giorni, con l'eccezione di quanto la legge impone di conservare.

DatoConservazione
Log di accesso ai locali2 anni
Tentativi di login falliti1 anno
Login riusciti (contengono IP e user agent)12 mesi
Registro delle operazioni (audit log)180 giorni
Storico delle notifiche12 mesi
Transazioni di pagamento7 anni (obbligo di legge)
Documenti e registri fiscali10 anni (obbligo di legge)
Dati di un utente dopo la richiesta di cancellazione90 giorni, poi rimozione definitiva

In caso di violazione, 72 ore

Esiste una procedura scritta: contenimento, valutazione, notifica al Garante entro 72 ore, e comunicazione agli interessati — anch'essa entro 72 ore — quando il rischio per loro è elevato. Con i modelli già pronti, perché in quel momento non è il momento di scriverli.

Registro delle operazioni

Chi ha fatto cosa e quando, consultabile dallo staff autorizzato. Utile quando serve ricostruire una modifica, non solo quando qualcosa va storto.

Intelligenza artificiale

Nessun piano nutrizionale arriva all'atleta senza che una persona lo abbia letto.

I dati che riguardano la salute — allergie, patologie, integrazioni — non entrano in un servizio self-service. L'AI lavora per il backoffice: propone, lo staff decide. E solo se l'atleta ha dato il consenso esplicito, che può revocare quando vuole.

L'atleta non genera piani nutrizionali

Compila la propria scheda e legge il piano approvato. Non può chiedere una generazione, non può modificare una proposta.

Un'eccezione, dichiarata

La generazione di allenamenti personali dall'app è self-service. Usa attrezzatura, durata, livello e disciplina; età, peso, altezza e sesso solo se l'atleta ha dato il consenso esplicito. Mai patologie, allergie o integrazioni. È l'unica deroga e non ne aggiungiamo altre.

Puoi usare la tua chiave

Una struttura può configurare la propria chiave del servizio AI: in quel caso le richieste passano dal suo progetto cloud, non dal nostro, e il rapporto con il fornitore AI è direttamente suo.

Richieste e risposte cifrate

Il testo inviato all'AI e quello ricevuto sono conservati cifrati, consultabili dallo staff autorizzato per verificare come è nata una proposta. Dopo 24 mesi vengono cancellati in automatico.

Trasparenza

Dove stanno i dati e chi altro li tocca.

Database e file sono ospitati in Unione Europea. Alcuni fornitori necessari al servizio trattano però dati anche fuori dall'UE: il gestore dei pagamenti, il fornitore del servizio AI, quelli delle email e delle notifiche push, e la rete che protegge il traffico. Questi trasferimenti sono coperti dalle clausole contrattuali standard previste dal GDPR. L'elenco completo dei responsabili del trattamento è nella nostra informativa.

Scrivere "nessun dato lascia l'Unione Europea" sarebbe più comodo e sarebbe falso.

Certificazioni. Non ne rivendichiamo nessuna. Non siamo certificati ISO 27001 né SOC 2, e una "certificazione GDPR" per un software non esiste. Quello che facciamo è descritto in questa pagina, ed è verificabile in fase di valutazione: se stai facendo una due diligence, chiedi e ti mostriamo il dettaglio.