Turismo digitale — rete WiFi e POI
Infrastruttura WiFi + BLE per città d’arte, DB relazionale, pagine web PHP, gestione tariffe. Tutti e 4 i quesiti della seconda parte.
Scenario
Un Assessorato al Turismo vuole offrire ai visitatori di una città d’arte contenuti multimediali sui POI (Point of Interest) — monumenti, musei, mostre — distribuiti nel centro storico. I contenuti vengono erogati via pagine web su minitablet a noleggio presso InfoPoint (chioschi) dislocati in città.
Formati di pagina
| Formato | Video | Immagini | Lingua |
|---|---|---|---|
| Base | 1 min, solo italiano + sottotitoli EN | Max 3, didascalia IT/EN | Italiano fisso |
| Avanzata | 5 min, 1 tra 7 lingue | ~20, descrizione ~500 car., 1 tra 7 lingue | Scelta utente |
Tre tariffe
| Tariffa | Accesso |
|---|---|
| Base | Pagina base per ogni POI |
| Intermedia | Pagina avanzata per 3 POI a scelta + base per gli altri |
| Piena | Pagina avanzata per tutti i POI |
Vincoli progettuali chiave
- Solo i minitablet forniti dall’InfoPoint possono accedere al servizio
- Contenuti solo su server (non memorizzati sul dispositivo)
- Accesso previo password univoca dal biglietto (validità giornaliera)
- Fruizione solo in prossimità o all’interno del POI di riferimento
- Restituzione al medesimo InfoPoint (documento d’identità) o a qualsiasi InfoPoint (carta di credito)
1a — Architettura di rete e server
L’infrastruttura si articola su tre livelli: server centrale, rete WiFi cittadina e dispositivi client.
Schema topologico — visione generale
Server centrale — caratteristiche e posizionamento
Dove: data center comunale (o hosting cloud della PA con contratto GDPR-compliant). La collocazione municipale garantisce bassa latenza, sicurezza fisica dei dati e governance pubblica dei contenuti culturali.
| Componente | Specifiche | Motivazione |
|---|---|---|
| Web Server | Apache/Nginx + PHP 8.x | Serve pagine dinamiche con autenticazione sessione |
| Media Server | Video streaming (HLS) dedicato | I video 5 min in 7 lingue richiedono banda elevata; separare da web server migliora le prestazioni |
| DB Server | MySQL/MariaDB o PostgreSQL | Dati strutturati: biglietti, POI, contenuti, sessioni |
| Auth Service | Session manager (Redis) | Sessioni rapide in memoria per validazione password biglietto |
| CDN locale | Cache video/immagini su infrastruttura WiFi | Riduce latenza per file pesanti (TAC 200 MB), evita colli di bottiglia |
1b — Protocolli e servizi di comunicazione
| Livello | Protocollo / Servizio | Funzione |
|---|---|---|
| WiFi | IEEE 802.11ac (WiFi 5) o 802.11ax (WiFi 6) | Connettività wireless dei minitablet; banda sufficiente per streaming video 5 min |
| Sicurezza WiFi | WPA2-Enterprise (802.1X) con certificato sul tablet | Solo dispositivi con certificato valido accedono alla SSID del servizio |
| IP | DHCP privato (192.168.x.0/24 per zona) | Assegnazione automatica IP ai tablet |
| Applicativo | HTTPS (TLS 1.3) | Comunicazione cifrata tra tablet e server; mandatory per dati di autenticazione |
| Sessione | Cookie di sessione sicuro (HTTPOnly, Secure, SameSite=Strict) | Mantiene l’autenticazione dopo il login con password biglietto |
| Video | HLS (HTTP Live Streaming) su HTTPS | Streaming adattivo; il tablet richiede chunk di video man mano |
| Gestione rete | RADIUS (802.1X) + DHCP + DNS locale | Autenticazione WiFi centralizzata; risoluzione nomi interna |
| Monitoring | SNMP v3 / Syslog | Monitoraggio AP e switch; log centralizzati |
1c — Geolocalizzazione: accesso solo in prossimità del POI
È il vincolo tecnicamente più critico. Tre opzioni a confronto:
| Tecnologia | Precisione | Indoor | Costo | Scelta |
|---|---|---|---|---|
| GPS | 3–5 m outdoor | NO (segnale assente) | Basso (integrato nel tablet) | Solo fallback outdoor |
| BLE Beacon | 1–5 m indoor/outdoor | SÌ | Basso (beacon €5–20 cad.) | ✓ Scelta principale |
| WiFi RSSI | 3–10 m | Parziale | Zero (usa AP esistenti) | Fallback secondario |
| QR Code | Dipende dall’utente | SÌ | Minimo | No (falsificabile) |
Soluzione adottata: BLE beacon + GPS come fallback
Ad ogni POI vengono installati uno o più beacon BLE (Bluetooth Low Energy, protocollo iBeacon/Eddystone). Il tablet scansiona in background le trasmissioni BLE. Ogni beacon ha un UUID univoco associato al POI nel database. Il flusso è:
- Il tablet rileva il beacon BLE del POI e invia l’UUID al server via HTTPS
- Il server verifica: questo UUID corrisponde al POI richiesto? Il biglietto è valido e autorizza questo POI?
- Solo se entrambe le verifiche passano, la pagina multimediale viene servita
- Il server registra l’accesso (timestamp + POI + biglietto) per audit
Entità e relazioni — Modello Concettuale (ER)
Modello logico relazionale
password_verify($input, $hash) per validare senza mai ricostruire la password originale. La validità giornaliera viene controllata confrontando data_emissione con la data corrente.Flusso di navigazione — tariffa base
- Login: visitatore inserisce la password del biglietto → server verifica hash + validità data → crea sessione PHP
- Elenco POI: lista di tutti i POI disponibili (pagina base garantita a tutti)
- Selezione POI: il tablet invia UUID beacon rilevato + id_poi richiesto
- Verifica prossimità: server controlla che beacon_uuid del tablet corrisponda al beacon_uuid del POI nel DB
- Erogazione contenuto: serve pagina base con video (1 min, IT) + fino a 3 immagini
Pagina login (login.php)
Pagina contenuto POI — tariffa base (poi_base.php)
htmlspecialchars() per prevenire XSS. Le query al DB usano prepared statements per prevenire SQL injection. L’UUID beacon viene fornito dal tablet tramite JS (Web Bluetooth API) e validato server-side: il server è l’unica fonte di autorità.Logica server-side per le tre tariffe
La tariffa è memorizzata nella sessione al momento del login ($_SESSION['tipo_tariffa']). Ad ogni richiesta di pagina POI, il server esegue la funzione di autorizzazione:
Scelta dei 3 POI (tariffa intermedia)
Al primo accesso con tariffa intermedia, il visitatore vede un form di selezione. Il server verifica che non abbia già esaurito le 3 scelte disponibili prima di registrarne una nuova:
Scelta della lingua (tariffe intermedia e piena)
La lingua è selezionabile al momento dell’accesso al POI avanzato. Viene salvata in SCELTA_POI.lingua per la tariffa intermedia (legata alla scelta specifica del POI), oppure in $_SESSION['lingua'] per la tariffa piena (impostazione globale modificabile in qualsiasi momento dal menu).
| Tariffa | Lingua per POI base | Lingua per POI avanzato | Dove si salva |
|---|---|---|---|
| Base | IT (fisso, no scelta) | — (non disponibile) | — |
| Intermedia | IT (fisso) | 1 delle 7, scelta al 1° accesso a quel POI | SCELTA_POI.lingua per POI scelto |
| Piena | IT (fisso) | 1 delle 7, modificabile da menu globale | $_SESSION[‘lingua’] |
SCELTA_POI per la tariffa intermedia — e non solo in sessione — garantisce che il visitatore non possa cambiare lingua su un POI avanzato già “consumato”: la scelta linguistica è legata alla scelta del POI, non alla sessione corrente.Estensione del database
Si aggiunge la tabella RECENSIONE. Il vincolo di chiave esterna su id_biglietto garantisce che solo visitatori con biglietto valido possano recensire.
Pagina web — media voti per POI
NULLS LAST ordina correttamente i POI senza recensioni in fondo (MySQL usa ORDER BY media_voto IS NULL, media_voto DESC). LEFT JOIN garantisce che compaiano anche i POI senza nessuna recensione.Ipotesi A — Solo minitablet dell’InfoPoint
Per impedire l’accesso da dispositivi non autorizzati si combinano più livelli:
| # | Meccanismo | Come funziona | Limitazioni |
|---|---|---|---|
| 1 | Certificato client TLS | Ogni minitablet ha un certificato X.509 univoco emesso dall’InfoPoint. Il server HTTPS richiede client certificate authentication (mutual TLS). Senza certificato, la connessione è rifiutata a livello TLS. | Necessita CA interna; complessità di gestione certificati |
| 2 | WiFi WPA2-Enterprise (802.1X) | Ogni tablet ha identità RADIUS univoca. Solo i tablet registrati si connettono alla rete del servizio. Smartphone personali non ottengono IP. | Il visitatore non può usare la propria rete dati (4G) |
| 3 | Device fingerprint + UUID dispositivo | Al momento della consegna, l’InfoPoint registra nel DB l’identificativo hardware del tablet (Android ID / numero seriale). Il server verifica ad ogni richiesta che il device ID in sessione corrisponda a quello registrato. | Il device ID potrebbe essere falsificato su dispositivi rooted |
| 4 | MAC address whitelist (a livello AP) | Il controller WiFi ammette solo i MAC dei tablet pre-registrati. Efficace a livello di rete locale, ma non sostituisce la verifica applicativa. | MAC spoofing possibile |
Ipotesi B — Estensione a dispositivi personali (smartphone)
Per aprire il servizio ai dispositivi personali mantenendo i vincoli di tariffa:
- App mobile dedicata (iOS/Android): scaricabile dall’app store, distribuita dall’Assessorato. L’app gestisce il Bluetooth per rilevare i beacon BLE e la comunicazione con il server.
- Autenticazione con password biglietto: stessa logica dell’ipotesi A — la password valida per 24h crea un JWT (JSON Web Token) con scadenza giornaliera.
- JWT per sessione stateless: il server emette un JWT firmato con la tariffa e i POI scelti embedded. L’app invia il JWT ad ogni richiesta. Il server verifica firma e scadenza senza accedere al DB.
- Vincolo geolocalizzazione: l’app usa Web Bluetooth (o nativo Bluetooth LE) per rilevare il beacon del POI. Il UUID del beacon viene incluso nel payload della richiesta e verificato server-side — identico all’ipotesi con minitablet.
- Anti-abuso: un biglietto è legato a un solo device_id per sessione (al primo login, il server associa il JWT al device_id dello smartphone). Tentativi di login da device_id diversi entro la stessa giornata richiedono ri-autenticazione all’InfoPoint.
Modello di controllo accessi nei DBMS — RBAC
I sistemi DBMS (MySQL, PostgreSQL, Oracle) implementano il controllo degli accessi tramite DAC (Discretionary Access Control) con il modello RBAC (Role-Based Access Control). Si assegnano privilegi a ruoli, poi i ruoli agli utenti: modificare le autorizzazioni di un ruolo si propaga automaticamente a tutti gli utenti che lo ricoprono.
I privilegi elementari nei DBMS SQL sono: SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, EXECUTE (per stored procedure), GRANT OPTION (per delegare).
Esempio: database scolastico
Schema ipotetico: tabelle ALUNNI, DOCENTI, FORNITORI, VOTI, STIPENDI.
V_STIPENDI_AGGREGATI mostra solo medie per tipo contratto — non i singoli importi nominali. Concedere accesso a una VIEW anziché alla tabella è il pattern standard per esporre dati aggregati a ruoli che non devono vedere i dettagli individuali (privacy). Questo pattern si chiama column-level security tramite VIEW.Tipologie di accesso remoto
| Tipo | Protocollo | Caso d’uso | Autenticazione |
|---|---|---|---|
| Accesso diretto (RDP/SSH) | RDP (3389), SSH (22) | Gestione singolo server remoto | Username + password / chiave pubblica |
| VPN client-to-site (roadwarrior) | OpenVPN, IPSec IKEv2, WireGuard, SSL/TLS | Utente mobile → rete aziendale | Certificato + password / MFA |
| VPN site-to-site | IPSec tunnel mode, GRE+IPSec, SD-WAN | Due sedi fisse sempre connesse | PSK o certificati tra gateway |
| SSL VPN (browser-based) | HTTPS (443) | Accesso applicazioni specifiche senza client VPN | LDAP/SAML/MFA |
Scenario: azienda con 2 sedi + agenti commerciali
VPN site-to-site (2 sedi)
Le due sedi rimangono sempre connesse tramite un tunnel IPSec in modalità tunnel. I router/firewall di entrambe le sedi stabiliscono il tunnel automaticamente all’avvio:
- IKE Phase 1 (ISAKMP SA): negoziazione algoritmi (AES-256, SHA-256, DH group 14), autenticazione tramite certificati X.509
- IKE Phase 2 (IPSec SA): definizione del traffico da cifrare (tutto tra 192.168.1.0/24 e 192.168.2.0/24), cifratura ESP-AES-256-HMAC-SHA256
- I PC della sede Roma vedono i server di Milano come se fossero sulla stessa LAN
VPN Remote Access (agenti commerciali)
Gli agenti si connettono da qualsiasi rete (4G, WiFi hotel) alla VPN gateway della sede principale: