Modulo 3 · 3.3
Prodotti digitali e virtuali
Modulo 3: Prodotti · Tempo di lettura: 11 minuti
Obiettivo della lezione: Al termine di questa lezione sarà in grado di vendere prodotti digitali e virtuali in modo sicuro: sceglierà un metodo di download sicuro, proteggerà la cartella dei download, imposterà dei limiti e gestirà correttamente il diritto di recesso per i contenuti digitali.
Concetti chiave: prodotto virtuale, prodotto scaricabile, link di download, limite di download, data di scadenza, metodo di download (Forza Download, X-Accel-Redirect/X-Sendfile, Solo reindirizzamento), woocommerce_uploads, .htaccess, nginx, directory di download approvate (Approved download directories), accesso dopo il pagamento, contenuto digitale, consenso espresso, rinuncia al diritto di recesso
Virtuale e scaricabile: due caselle diverse
In un prodotto semplice o in una variazione vede due caselle di spunta. Si assomigliano, ma hanno funzioni diverse:
- Virtuale (Virtual) significa: non viene spedito nulla. WooCommerce non calcola costi di spedizione e al pagamento non chiede un indirizzo di spedizione (se tutto ciò che è nel carrello è virtuale). Pensi a una degustazione di tè in sede, a un buono regalo inviato per email o a un workshop online.
- Scaricabile (Downloadable) significa: dopo il pagamento il cliente riceve uno o più file. WooCommerce crea un link di download per ogni cliente e lo mostra nell'email di conferma e in Il mio account > Download.
Un ricettario digitale in pdf di solito è entrambe le cose: non viene spedito nulla per posta ed è presente un file. Un ricettario stampato con un pdf gratuito in omaggio è scaricabile ma non virtuale: il libro viene comunque spedito per posta.
Theehuis Example vende il "Receptenboek Thee en Taart" (ricettario Tè e Torte) in pdf a € 9,95. Caselle: virtuale e scaricabile.
Come funziona un download e perché il metodo è importante
Quando carica un file in un prodotto scaricabile, WooCommerce lo salva nella cartella wp-content/uploads/woocommerce_uploads/. Per impostazione predefinita aggiunge una sequenza casuale di caratteri al nome del file (impostazione "Append a unique string to filename for security", attiva per impostazione predefinita). Il cliente non riceve mai quell'indirizzo, ma un link al Suo negozio con una chiave d'ordine e un codice di download. A ogni clic WooCommerce verifica: questo download appartiene a un ordine pagato, il limite non è esaurito, il link non è scaduto? Solo allora il cliente riceve il file.
Il modo in cui il file arriva poi al cliente si sceglie in WooCommerce > Impostazioni > Prodotti > Prodotti scaricabili, alla voce metodo di download (File download method):
| Metodo | Come funziona | Sicurezza |
|---|---|---|
| Forza Download (Force downloads, predefinito) | PHP legge il file e lo invia direttamente | L'indirizzo reale resta nascosto. Su alcuni server i file di grandi dimensioni possono bloccarsi o superare il limite di tempo di PHP |
| X-Accel-Redirect/X-Sendfile | PHP esegue il controllo, il server web invia il file | Altrettanto sicuro e migliore per i file grandi; il server web deve supportarlo (con Apache serve il modulo mod_xsendfile, nginx conosce X-Accel-Redirect). Chieda al Suo provider di hosting |
| Solo reindirizzamento (Redirect only) | WooCommerce reindirizza il cliente all'indirizzo reale del file | Non sicuro: chi ha l'indirizzo può condividerlo e il file si può scaricare senza acquistarlo. WooCommerce stesso lo definisce "Insecure" |
Scelga quindi Forza Download oppure X-Sendfile. Il reindirizzamento è solo una soluzione di emergenza, e l'impostazione "Allow using redirect mode (insecure) as a last resort" fa sì che WooCommerce ripieghi sul reindirizzamento se l'altro metodo non funziona; la lasci disattivata a meno che non sappia esattamente perché attivarla.
Proteggere la cartella
Con Forza Download o X-Sendfile la cartella woocommerce_uploads deve essere chiusa ai normali visitatori. Altrimenti chi indovina il nome del file o lo ricava da un link trapelato può scaricare il file direttamente. Per questo WooCommerce, al momento dell'installazione, inserisce due file in quella cartella:
- un
index.htmlvuoto, in modo che la cartella non mostri un elenco di file; - un
.htaccesscondeny from all(con il metodo Solo reindirizzamento:Options -Indexes).
Quel file .htaccess funziona su Apache e LiteSpeed (come presso WebOké e molti altri hosting condivisi). Su nginx il server web non legge i file .htaccess. Lì deve esserci una regola nella configurazione del server che blocca la cartella. Su un hosting nginx gestito a volte se ne occupa il provider; su un proprio VPS deve farlo Lei. WooCommerce lo verifica da sé e mostra un avviso nell'amministrazione (e in Salute del sito) se la cartella non sembra protetta.
Alcuni aspetti a cui prestare attenzione:
- Un 200 vuoto non è una prova. Se richiede la cartella e vede una pagina vuota, può trattarsi dell'
index.htmlvuoto mentre i file stessi sono accessibili. Per questo verifichi anche un singolo file (l'esercizio lo fa). - File esterni. In un prodotto può anche indicare un link a un file che si trova altrove. Per questo WooCommerce dispone dell'elenco delle directory di download approvate (Approved download directories): solo i file provenienti da quelle cartelle o da quegli indirizzi possono essere usati come download. Così nessuno con diritti di amministrazione su un prodotto può offrire come download, per errore o di proposito, un file qualsiasi del server. Mantenga quell'elenco breve.
- Backup e staging. La cartella viene inclusa nel Suo backup. In un ambiente di staging si trovano quindi anche i Suoi file a pagamento: protegga lo staging (lezione 7.3).
Limiti e accesso
Per ogni prodotto scaricabile o per ogni variazione può impostare:
- Limite di download (Download limit): quante volte il cliente può scaricare il file. Se il campo è vuoto, i download sono illimitati. Un limite di, ad esempio, 5 riduce la condivisione, ma genera reclami se qualcuno acquista un nuovo portatile. Scelga un valore ragionevole e aiuti i clienti che lo richiedono.
- Scadenza (Download expiry): dopo quanti giorni il link smette di funzionare.
Impostazioni generali in Prodotti scaricabili:
- Accesso obbligatorio per i download (Downloads require login), disattivata per impostazione predefinita. Se attiva, gli ospiti non possono scaricare nulla; la attivi solo se rende obbligatori anche gli account.
- Accesso dopo il pagamento (Grant access to downloadable products after payment), attiva per impostazione predefinita: il cliente può scaricare non appena l'ordine ha lo stato In lavorazione, quindi subito dopo un pagamento riuscito. Se è disattivata, solo dopo Completato.
Recesso per i contenuti digitali
Per una normale teiera il cliente ha 14 giorni di tempo per ripensarci (lezione 5.2). Con un download è più complicato: chi ha il pdf lo possiede, anche dopo il recesso. Per questo esiste un'eccezione, ma solo a determinate condizioni. Nell'UE è prevista dall'articolo 16 della direttiva 2011/83/UE; nei Paesi Bassi dall'articolo 6:230p, lettera g, del Codice civile olandese (BW). Non esiste diritto di recesso per i contenuti digitali non forniti su un supporto materiale se:
- la fornitura è iniziata con il consenso espresso e preventivo del consumatore;
- il consumatore ha dichiarato di rinunciare così al proprio diritto di recesso; e
- Lei ha fornito una conferma di ciò (nella conferma del contratto, su un supporto durevole come l'email dell'ordine).
Se manca una di queste tre condizioni, il cliente conserva il diritto di recesso, anche se ha già scaricato il file. In Belgio e in Germania vale la stessa regola UE nella rispettiva legge nazionale (vedere la lezione 5.2). In Italia la regola è recepita nel Codice del consumo (D.Lgs. 206/2005).
WooCommerce non gestisce tutto questo automaticamente. Le serve:
- una casella obbligatoria al pagamento, solo quando nel carrello sono presenti contenuti digitali, con un testo come "Acconsento che la fornitura inizi immediatamente e so che in questo modo perdo il mio diritto di recesso";
- lo stesso testo come conferma nell'email dell'ordine per quei prodotti;
- la frase corretta nelle Sue informazioni sul recesso che indichi che ciò vale per i download.
Esistono estensioni che aggiungono una casella di questo tipo; anche il blocco di pagamento offre possibilità per campi aggiuntivi. Le valuti come qualsiasi altro plugin. Una casella già spuntata in anticipo non vale come consenso espresso (lezione 5.4).
Faccia attenzione alla differenza con i servizi virtuali, come un workshop in una data precisa. Lì valgono le regole per i servizi, con altre eccezioni. Legga la lezione 5.2.
Riepilogo
- Virtuale = nessuna spedizione; scaricabile = file dopo il pagamento. Un pdf di solito è entrambe le cose.
- Scelga Forza Download oppure X-Accel-Redirect/X-Sendfile; Solo reindirizzamento non è sicuro.
- La cartella
woocommerce_uploadsdeve essere chiusa:.htaccesssu Apache e LiteSpeed, una regola del server su nginx. Verifichi un file reale, non solo la cartella. - Mantenga breve l'elenco delle directory di download approvate e imposti limiti ragionevoli.
- Nessun diritto di recesso per i download solo con consenso espresso, rinuncia al diritto e una conferma; WooCommerce non lo fa automaticamente. In Italia vale il Codice del consumo (D.Lgs. 206/2005).
Quiz
Esercizio
Esercizio A3.3: I Suoi download sono protetti? Questo esercizio richiede percorsi che non sono collegati da link e funziona quindi solo per il Suo negozio. Prima dimostri che il dominio è Suo: crei un record TXT _weboke-cursus.<il Suo dominio> con il codice che riceve, oppure pubblichi un file /.well-known/weboke-cursus-<codice>.txt che contenga quel codice. Poi inserisca l'indirizzo del Suo negozio e, se lo desidera, il percorso di un file di download così come WooCommerce lo mostra nel prodotto (inizia con /wp-content/uploads/woocommerce_uploads/). Il programma richiede la cartella (senza seguire reindirizzamenti, solo l'inizio) e, se ha inserito un percorso, una sola volta le intestazioni HTTP di quel file. Verde se la cartella restituisce 401, 403 o 404, oppure una pagina senza elenco di file, e il file restituisce 401, 403 o 404. Arancione se non ha inserito alcun file: in tal caso è stata verificata solo la cartella, e una pagina vuota non è sufficiente. Rosso se la cartella mostra un elenco di file, oppure se il file si può semplicemente scaricare (200): in tal caso chiunque abbia l'indirizzo può scaricarlo senza acquistarlo. Il programma conserva solo i codici di stato, mai il file.
Domanda per Lei (non verificata): quale metodo di download è impostato nel Suo negozio e come ha gestito il recesso per i Suoi prodotti digitali?
Per saperne di più
- Digital and downloadable product handling (woocommerce.com, in inglese): https://woocommerce.com/document/digital-downloadable-product-handling/
- Corso gratuito WordPress 7.4: Irrobustire il sito: permessi, header e plugin di sicurezza
- Vietato (403): Non dispone dell'autorizzazione per accedere a / su questo server
- Codice civile olandese (Burgerlijk Wetboek), Libro 6, articolo 6:230p (wetten.overheid.nl, in olandese): https://wetten.overheid.nl/BWBR0005289/
La knowledge base descrive la situazione presso WebOké (LiteSpeed, .htaccess funziona); presso altri provider il funzionamento è simile, tranne che su nginx.
