# Analisi Completa - Sito Web Benza Water Storage SRL

**Data Analisi:** 26 Marzo 2026
**Versione:** 1.0 - Situazione Iniziale

---

## Executive Summary

Il progetto riguarda il **refactoring completo** del sito web Benza, che comprende tre aree: sito pubblico, e-commerce e pannello di amministrazione. Il sito attuale e' stato sviluppato con tecnologie ormai obsolete (Bootstrap 3, jQuery 1.11, PHP datato) e presenta vulnerabilita' di sicurezza critiche.

Il nuovo sito manterra' il database esistente (con ottimizzazioni), cambiera' il tema grafico da verde/marrone (giardinaggio) ad **azzurro/acqua** (vasche e piscine) e adottera' le stesse tecnologie e pattern del gestionale clienti gia' completato.

### Numeri Chiave

| Metrica | Valore |
|---------|--------|
| File PHP totali | ~147 |
| Tabelle DB | 17 |
| Utenti registrati | 1.669 |
| Ordini storici | 1.533 |
| Modelli/prodotti | 1.661 modelli / 58 prodotti |
| Categorie | 18 |
| Immagini gallery | 798 |
| Vulnerabilita' critiche | 10+ |

---

## 1. Mappatura Database (`Benza_sito`)

### 1.1 Catalogo Tabelle

| Tabella | Record | Funzione | Area |
|---------|-------:|----------|------|
| `utenti` | 1.669 | Utenti registrati e-commerce | E-commerce |
| `carrello` | 2.145 | Carrelli attivi (PK composita utente+modello) | E-commerce |
| `ordini` | 1.533 | Ordini completati | E-commerce |
| `ordini_articoli` | 2.572 | Articoli negli ordini | E-commerce |
| `offerte` | 137 | Offerte personalizzate | E-commerce |
| `offerte_articoli` | 249 | Articoli nelle offerte | E-commerce |
| `modelli` | 1.661 | Varianti prodotto (prezzo, dimensioni, disponibilita') | Catalogo |
| `prodotti` | 58 | Prodotti generici | Catalogo |
| `categorie` | 18 | Categorie prodotti | Catalogo |
| `regioni` | 20 | Regioni con incremento spedizione | Spedizioni |
| `trasporti` | 1 | Configurazione costi spedizione | Spedizioni |
| `web_gallery` | 19 | Gallery fotografiche | Contenuti |
| `web_immagini` | 798 | Immagini nelle gallery | Contenuti |
| `web_video` | 42 | Video | Contenuti |
| `bacheca` | 513 | Messaggi utenti | Comunicazione |
| `messaggi` | 1 | Messaggi chiusura/vacanze | Admin |
| `web_admins` | 1 | Credenziali admin | Admin |

### 1.2 Relazioni tra Tabelle (dedotte dal codice)

```
categorie (1) ---> (N) prodotti          [id_categoria]
prodotti  (1) ---> (N) modelli           [id_prodotto]
utenti    (1) ---> (N) carrello          [id_utente]
modelli   (1) ---> (N) carrello          [id_modello]
utenti    (1) ---> (N) ordini            [id_utente]
ordini    (1) ---> (N) ordini_articoli   [id_ordine]
modelli   (1) ---> (N) ordini_articoli   [id_modello]
offerte   (1) ---> (N) offerte_articoli  [id_offerta]
modelli   (1) ---> (N) offerte_articoli  [id_modello]
web_gallery (1) -> (N) web_immagini      [id_gallery]
utenti    (1) ---> (N) bacheca           [id_utente]
```

### 1.3 Problemi Trovati

#### Indici Mancanti (CRITICO per performance)

| Tabella | Colonna | Motivo |
|---------|---------|--------|
| `modelli` | `id_prodotto` | FK logica — ogni query catalogo fa JOIN su questa colonna |
| `ordini` | `id_utente` | FK logica — ricerca ordini per utente |
| `ordini_articoli` | `id_modello` | FK logica — JOIN frequente |
| `offerte_articoli` | `id_modello` | FK logica |
| `web_immagini` | `id_gallery` | FK logica — caricamento gallery |
| `prodotti` | `id_categoria` | FK logica — filtro per categoria |

#### Foreign Keys

**ZERO FK dichiarate.** Tutte le relazioni sono gestite solo a livello applicativo. Rischio integrita' referenziale.

#### Charset

Tutte le tabelle in `latin1`. Da valutare migrazione a `utf8mb4` per supporto caratteri speciali e compatibilita' con il gestionale clienti (`Benza_sit_clienti` che e' in `utf8`).

#### Colonne Notevoli

| Tabella | Colonna | Note |
|---------|---------|------|
| `utenti` | `password` | VARCHAR(32) — hash MD5 (insicuro) |
| `utenti` | `id_cliente` | Collegamento al gestionale clienti (`or_clienti`) |
| `utenti` | `rivenditore` | Flag per prezzi differenziati |
| `modelli` | `prezzo/prezzo2/prezzo_r` | 3 fasce prezzo (pubblico/rivenditore/?) |
| `modelli` | `telo_master` | Flag per teli master nel preventivatore |
| `modelli` | `sottotelo` | Flag per suggerimento sottotelo |
| `modelli` | `lato1/lato2` | Dimensioni per calcolo preventivatore |
| `web_admins` | `password` | VARCHAR(36) — password in chiaro |

---

## 2. Mappa Funzionale del Sito

### 2.1 Sito Pubblico (~20 pagine statiche)

| Pagina | Tipo | Contenuto |
|--------|------|-----------|
| `index.php` | Dinamica | Homepage con slider, SEO keywords |
| `info_storia.php` | Statica | Storia aziendale dal 1932 |
| `info_staff.php` | Statica | Staff/team |
| `info_orari.php` | Statica | Orari apertura |
| `info_contatti.php` | Statica | Contatti |
| `info_dovesiamo.php` | Statica | Mappa e indirizzo |
| `info_consegne.php` | Statica | Info consegne |
| `info_newsletter.php` | Statica | Archivio newsletter (link PDF) |
| `laghi.php` | Statica | Laghi artificiali |
| `laghi_piscine.php` | Statica | Piscine/laghi |
| `laghi_coperture.php` | Statica | Coperture laghi |
| `piscine.php` | Statica | Piscine e manutenzione |
| `vasche.php` | Statica | Serbatoi acciaio Genap |
| `fontane.php` | Statica | Fontane |
| `gazebi.php` | Statica | Gazebi |
| `irrigazione.php` | Statica | Irrigazione |
| `arredamenti.php` | Statica | Arredamenti giardino |
| `ristrutturazioni.php` | Statica | Ristrutturazioni |
| `progettazioni.php` | Statica | Progettazioni |
| `doc_*.php` (6 file) | Statica | Documentazioni e certificazioni |
| `gallery*.php` (4 file) | Dinamica | Gallery fotografiche |

### 2.2 E-Commerce

#### Catalogo
- `shop.php` — Lista categorie attive
- `categoria.php` — Prodotti per categoria (JOIN modelli+prodotti)
- `modello.php` — Scheda singolo prodotto (foto, prezzo, disponibilita')
- `ricerca.php` — Google Custom Search

#### Carrello (10 file)
- `carrello.php` — Visualizzazione carrello (utenti loggati)
- `carrello_temp.php` — Carrello temporaneo (cookie `benza-temp-user`)
- `carrello-add.php` — Aggiunta articoli (controlla `disp_web`)
- `carrello-del.php` — Rimozione articolo
- `carrello-empty.php` — Svuota carrello
- `carrello-preview.php` — Anteprima carrello
- `carrello-rel.php` — Articoli correlati
- `carrello-share.php` — Condivisione carrello (formato `share-cart-ID:QTA,ID:QTA`)
- `carrello-share-db.php` — Salvataggio condivisione
- `carrello-share-mail.php` — Invio carrello per email

#### Checkout e Pagamenti
- `ordine-carrello.php` — Crea ordine da carrello
- `ordine_riepilogo.php` — Riepilogo ordine
- `ordine_conferma.php` — Conferma ricezione
- `ordine_anteprima.php` — Anteprima finale

**Metodi di pagamento:**
- `ordine_bonifico.php` — Bonifico bancario (IBAN statico)
- `ordine_contrassegno.php` — Contrassegno
- `ordine_banca.php` — PagOnline Unicredit (credenziali esposte nel codice)
- `ordine_postepay.php` — Postepay
- `ipn.php` + `ipnlistener.php` — PayPal IPN (vecchia integrazione, OBSOLETA)

#### Offerte
- `offerta.php` — Visualizza offerta (hash MD5)
- `offerta_anteprima.php` — Anteprima
- `ordine-offerta.php` — Crea ordine da offerta

### 2.3 Preventivatore Laghi (4 step)

**Flusso:**
1. `prev_misure.php` — Input lunghezza/larghezza telo
2. `prev_calc_misure.php` — Alternativa: calcola da misure dello scavo
3. `prev_risultati.php` — Risultati con logica complessa:
   - Calcola mq (lunghezza x larghezza)
   - Applica margine superiore (2.3) e inferiore (1)
   - Filtra modelli disponibili per zona misure
   - Suggerisce sottotelo e protezione
   - Limita a 4 risultati
4. `preventivo_form.php` — Questionario 18 domande per preventivo personalizzato

**NOTA:** La logica di calcolo in `prev_risultati.php` e' complessa e collaudata — da NON modificare, solo refactoring grafico.

### 2.4 Autenticazione Utente

- `login.php` / `login-db.php` — Login con MD5 password, cookie "ricordami"
- `form_registrazione.php` — Registrazione con Google Recaptcha v3
- `form_registrazione-db.php` — Handler (crea utente `status=0`, invia email attivazione)
- `form_registrazione-check.php` — Attivazione account
- `login_password.php` — Recupero password

### 2.5 Area Utente

- `utente.php` — Profilo + lista ordini
- `utente_dati.php` — Modifica dati personali
- `utente_password.php` — Cambio password
- `bacheca.php` — Messaggi ricevuti
- `messaggio.php` — Invio messaggio al supporto

### 2.6 Form Contatti

- `contatti_form.php` — Form contatti con Recaptcha, allegato file
- `contatti_form-db2.php` — Handler (email a `contatti@benza.it`)

### 2.7 Pannello Admin

| Funzionalita' | File principali | Tabelle DB |
|---------------|-----------------|------------|
| Login | `login.php`, `login-db.php` | `web_admins` |
| Categorie | `categorie.php`, `categoria.php`, `categoria-db.php` | `categorie` |
| Prodotti | `prodotti.php`, `prodotto.php`, `prodotto-db.php` | `prodotti` |
| Modelli | `modelli.php`, `modello.php`, `modello-db.php`, `modello-del.php` | `modelli` |
| Disponibilita' | `modello_disp-db.php`, `modello_disp2-db.php`, `modello_dim-db.php` | `modelli` |
| Gallery | `galleries.php`, `gallery.php`, `gallery-db.php` | `web_gallery` |
| Immagini | `immagini.php`, `immagine.php`, `immagine-db.php`, `immagine-del.php` | `web_immagini` |
| Video | `videos.php`, `video.php`, `video-db.php`, `video-del.php` | `web_video` |
| Clienti | `clienti.php`, `clienti-riv.php`, `clienti-mex.php` | `utenti` |
| Carrelli | `carrelli.php`, `cronjob-carrelli.php` | `carrello`, `modelli` |
| Offerte | `offerte.php`, `offerta.php`, `offerta-db.php`, `offerta-add.php`, `offerta_condividi.php` | `offerte`, `offerte_articoli` |
| Trasporti | `trasporti.php`, `trasporti-db.php` | `trasporti` |
| Vacanze | `vacanze.php`, `vacanze-db.php` | `messaggi` |
| Giacenze | `giacenze.php` | `modelli` (report) |

---

## 3. Vulnerabilita' di Sicurezza

### 3.1 CRITICHE

| # | Vulnerabilita' | File | Dettaglio |
|---|---------------|------|-----------|
| 1 | Credenziali DB esposte | `admin/datalog.php` | User/pass produzione in chiaro |
| 2 | Credenziali email esposte | `admin/funzioni.php` | 3 account SMTP con password |
| 3 | Credenziali banca esposte | `ordine_banca.php` | Merchant ID, password, chiave segreta PagOnline |
| 4 | Recaptcha secret esposta | `form_registrazione-db.php`, `contatti_form-db2.php`, `preventivo_form-db2.php` | Chiave segreta Google |
| 5 | MD5 per password | `login-db.php`, `utente_password-db.php` | Algoritmo crittograficamente rotto |
| 6 | SQL Injection | `admin/login-db.php` | Query concatenata senza prepared statement |
| 7 | Password admin in chiaro | `web_admins` | VARCHAR(36) senza hashing |

### 3.2 IMPORTANTI

| # | Vulnerabilita' | File | Dettaglio |
|---|---------------|------|-----------|
| 8 | No CSRF token | Tutti i form | Nessuna protezione CSRF |
| 9 | Cookie auth insicuro | `admin/funzioni.php` | MD5(password) nel cookie per 365 giorni |
| 10 | No rate limiting | Login | Nessun limite tentativi login |
| 11 | Upload senza validazione MIME | UploadHandler*.php | Rischio upload file malevoli |
| 12 | XSS potenziale | Vari | Output senza `htmlspecialchars()` |
| 13 | Session fixation | `login-db.php` | Nessuna rigenerazione session ID |

---

## 4. Tecnologie Attuali vs Nuove

| Componente | Attuale | Nuovo |
|------------|---------|-------|
| PHP | ~7.x | 8.4 |
| Bootstrap | 3.3.6 (2016) | 5.x |
| jQuery | 1.11.3 (2015) | 3.7 |
| Font Awesome | 4.6.0 (2016) | 6.x |
| TinyMCE | Non presente nel sito | 6.x (per admin) |
| Auth | Cookie + MD5 + sessioni | JWT (2 ruoli) |
| Password | MD5 | `password_hash()` bcrypt |
| API | Nessuna (form POST tradizionale) | REST API con JWT |
| PayPal | IPN (deprecato) | REST API v2 + rate |
| Recaptcha | v3 (mantenere) | v3 |
| Email | mail() / SMTP diretto | PHPMailer (dal gestionale) |

---

## 5. Decisioni Architetturali per il Nuovo Sito

### Da mantenere tal quale
- Logica di calcolo del preventivatore laghi
- Database esistente (solo ottimizzazione)
- Struttura categorie > prodotti > modelli
- Sistema di calcolo spedizioni per regione/peso
- Google Recaptcha v3 sui form

### Da rifare completamente
- Tema grafico (verde/marrone -> azzurro/acqua)
- Sistema di autenticazione (JWT con 2 ruoli)
- Integrazione PayPal (REST API v2 con rate)
- Pannello admin (stessa UI del gestionale clienti)
- Tutte le pagine responsive con Bootstrap 5
- Gestione credenziali (file config esterni)
- Sicurezza (prepared statements ovunque, CSRF, hashing)

### Da valutare
- Rendere dinamiche le pagine statiche (CMS da admin)
- Pagina GDPR/privacy policy aggiornata
- SEO per crawler AI (llms.txt, structured data)
- Eliminazione metodi pagamento obsoleti (PagOnline, Postepay)
