Digitale en virtuele producten
Module 3: Producten · Leestijd: 11 minuten
Leerdoel: Na deze les kun je digitale en virtuele producten veilig verkopen: je kiest een veilige downloadmethode, schermt de downloadmap af, stelt limieten in en regelt het herroepingsrecht bij digitale inhoud goed.
Kernbegrippen: virtueel product, downloadbaar product, downloadlink, downloadlimiet, vervaldatum, downloadmethode (Forceer downloads, X-Accel-Redirect/X-Sendfile, Alleen doorsturen), woocommerce_uploads, .htaccess, nginx, goedgekeurde downloadmappen (Approved download directories), toegang na betaling, digitale inhoud, uitdrukkelijke toestemming, afstand van herroepingsrecht
Virtueel en downloadbaar: twee verschillende vinkjes
Bij een enkelvoudig product of een variatie zie je twee vinkjes. Ze lijken op elkaar, maar doen iets anders:
- Virtueel (Virtual) betekent: er wordt niets verzonden. WooCommerce rekent geen verzendkosten en vraagt bij het afrekenen geen verzendadres (als alles in de winkelwagen virtueel is). Denk aan een theeproeverij op locatie, een cadeaubon die je per mail stuurt, of een online workshop.
- Downloadbaar (Downloadable) betekent: na de betaling krijgt de klant een of meer bestanden. WooCommerce maakt per klant een downloadlink en toont die in de bevestigingsmail en bij Mijn account > Downloads.
Een digitaal receptenboek als pdf is meestal allebei: er gaat niets met de post, en er is een bestand. Een gedrukt receptenboek met een gratis pdf erbij is downloadbaar maar niet virtueel: het boek gaat wel met de post.
Theehuis Example verkoopt het "Receptenboek Thee en Taart" als pdf voor € 9,95. Vinkjes: virtueel en downloadbaar.
Hoe een download werkt, en waarom de methode ertoe doet
Upload je een bestand bij een downloadbaar product, dan zet WooCommerce het in de map wp-content/uploads/woocommerce_uploads/. Standaard plakt het er een willekeurige reeks tekens achter de bestandsnaam bij (instelling "Append a unique string to filename for security", staat standaard aan). De klant krijgt nooit dat adres, maar een link naar je shop met een bestelsleutel en een downloadcode. WooCommerce controleert bij elke klik: hoort deze download bij een betaalde bestelling, is de limiet niet op, is hij niet verlopen? Pas dan krijgt de klant het bestand.
Hoe het bestand daarna naar de klant gaat, kies je bij WooCommerce > Instellingen > Producten > Downloadbare producten, bij de downloadmethode (File download method):
| Methode | Hoe het werkt | Veiligheid |
|---|---|---|
| Forceer downloads (Force downloads, standaard) | PHP leest het bestand en stuurt het zelf door | Het echte adres blijft verborgen. Grote bestanden kunnen op sommige servers haperen of tegen de tijdgrens van PHP lopen |
| X-Accel-Redirect/X-Sendfile | PHP controleert, de webserver stuurt het bestand | Even veilig en beter voor grote bestanden; de webserver moet het ondersteunen (bij Apache is daarvoor de module mod_xsendfile nodig, nginx kent X-Accel-Redirect). Vraag het je hoster |
| Alleen doorsturen (Redirect only) | WooCommerce stuurt de klant door naar het echte bestandsadres | Onveilig: wie het adres heeft, kan het delen en het bestand is zonder te kopen op te halen. WooCommerce noemt het zelf "Insecure" |
Kies dus Forceer downloads of X-Sendfile. Doorsturen is alleen een noodoplossing, en de instelling "Allow using redirect mode (insecure) as a last resort" laat WooCommerce terugvallen op doorsturen als de andere methode faalt; laat die uit tenzij je weet waarom.
De map afschermen
Met Forceer downloads of X-Sendfile moet de map woocommerce_uploads dicht zijn voor gewone bezoekers. Anders kan iemand die de bestandsnaam raadt of uit een gelekte link haalt, het bestand rechtstreeks ophalen. WooCommerce zet daarom bij de installatie twee bestanden in die map:
- een leeg
index.html, zodat de map geen lijst met bestanden toont; - een
.htaccessmetdeny from all(bij de methode Alleen doorsturen:Options -Indexes).
Dat .htaccess-bestand werkt op Apache en LiteSpeed (zoals bij WebOké en veel andere gedeelde hosting). Op nginx leest de webserver geen .htaccess. Daar moet er in de serverconfiguratie een regel staan die de map blokkeert. Op een beheerde nginx-hosting regelt de hoster dat soms; op een eigen VPS moet je het zelf doen. WooCommerce controleert dit zelf en toont een melding in het beheer (en in Sitediagnose) als de map niet beschermd lijkt.
Een paar dingen om op te letten:
- Een lege 200 is geen bewijs. Vraag je de map op en zie je een lege pagina, dan kan dat het lege
index.htmlzijn terwijl de bestanden zelf wel open staan. Test daarom ook één bestand (de opdracht doet dat). - Bestanden van buiten. Je kunt bij een product ook een link naar een bestand elders opgeven. Daarvoor heeft WooCommerce de lijst goedgekeurde downloadmappen (Approved download directories): alleen bestanden uit die mappen of van die adressen mogen als download worden gebruikt. Zo kan niemand met beheerrechten op een product per ongeluk of met opzet een willekeurig bestand van de server als download aanbieden. Houd die lijst kort.
- Back-ups en staging. De map gaat mee in je back-up. Op een staging-omgeving staan dus ook je betaalde bestanden: scherm de staging af (les 7.3).
Limieten en toegang
Per downloadbaar product of per variatie stel je in:
- Downloadlimiet (Download limit): hoe vaak de klant mag downloaden. Leeg is onbeperkt. Een limiet van bijvoorbeeld 5 beperkt delen, maar geeft klachten als iemand een nieuwe laptop koopt. Kies iets redelijks en help klanten die erom vragen.
- Vervaldatum (Download expiry): na hoeveel dagen de link stopt.
Algemene instellingen bij Downloadbare producten:
- Downloads vereisen inloggen (Downloads require login), standaard uit. Aan betekent dat gasten niets kunnen downloaden; zet het alleen aan als je ook accounts verplicht.
- Toegang na betaling (Grant access to downloadable products after payment), standaard aan: de klant kan downloaden zodra de bestelling de status In behandeling heeft, dus direct na een gelukte betaling. Staat het uit, dan pas na Afgerond.
Herroepen bij digitale inhoud
Bij een gewone theepot heeft de klant 14 dagen bedenktijd (les 5.2). Bij een download is dat lastig: wie de pdf heeft, heeft hem, ook na een herroeping. Daarom is er een uitzondering, maar alleen onder voorwaarden. In de EU staat die in artikel 16 van richtlijn 2011/83/EU; in Nederland in artikel 6:230p onder g BW. Er is geen herroepingsrecht bij digitale inhoud die niet op een materiële drager is geleverd, als:
- de levering is begonnen met uitdrukkelijke voorafgaande toestemming van de consument;
- de consument heeft verklaard dat hij daarmee afstand doet van zijn herroepingsrecht; en
- jij een bevestiging daarvan hebt gegeven (in de bevestiging van de overeenkomst, op een duurzame drager zoals de bestelmail).
Ontbreekt een van die drie, dan houdt de klant zijn herroepingsrecht, ook als hij al gedownload heeft. In België en Duitsland geldt dezelfde EU-regel in de eigen wet (zie les 5.2).
WooCommerce regelt dit niet vanzelf. Je hebt nodig:
- een verplicht vinkje bij het afrekenen, alleen als er digitale inhoud in de winkelwagen zit, met een tekst als "Ik ga ermee akkoord dat de levering direct begint, en ik weet dat ik daarmee mijn herroepingsrecht verlies";
- dezelfde tekst als bevestiging in de bestelmail voor die producten;
- de juiste zin in je herroepingsinformatie dat dit voor downloads geldt.
Er zijn uitbreidingen die zo'n vinkje toevoegen; het afrekenblok heeft ook mogelijkheden voor extra velden. Beoordeel ze zoals elke plugin. Een vinkje dat vooraf is aangevinkt telt niet als uitdrukkelijke toestemming (les 5.4).
Let op het verschil met virtuele diensten, zoals een workshop op een datum. Daar gelden de regels voor diensten, met andere uitzonderingen. Lees les 5.2.
Samenvatting
- Virtueel = niets verzenden; downloadbaar = bestanden na betaling. Een pdf is meestal beide.
- Kies Forceer downloads of X-Accel-Redirect/X-Sendfile; Alleen doorsturen is onveilig.
- De map
woocommerce_uploadsmoet dicht:.htaccessop Apache en LiteSpeed, een serverregel op nginx. Test een echt bestand, niet alleen de map. - Houd de lijst met goedgekeurde downloadmappen kort en stel redelijke limieten in.
- Geen herroepingsrecht bij downloads alleen met uitdrukkelijke toestemming, afstand van het recht en een bevestiging; WooCommerce doet dat niet vanzelf.
Quiz
Opdracht
Opdracht A3.3: Zijn je downloads afgeschermd? Deze opdracht vraagt paden op die niet gelinkt zijn, en werkt daarom alleen voor je eigen shop. Eerst toon je aan dat het domein van jou is: je zet een TXT-record _weboke-cursus.<jouw domein> met de code die je krijgt, of je plaatst een bestand /.well-known/weboke-cursus-<code>.txt met die code erin. Vul daarna het adres van je shop in en, als je wilt, het pad van één downloadbestand zoals WooCommerce het bij het product toont (het begint met /wp-content/uploads/woocommerce_uploads/). Het programma vraagt de map op (zonder door te sturen, alleen het begin) en, als je een pad invulde, één keer de kopregels van dat bestand. Groen als de map 401, 403 of 404 geeft, of een pagina zonder lijst met bestanden, en het bestand 401, 403 of 404 geeft. Oranje als je geen bestand invulde: dan is alleen de map gecontroleerd, en een lege pagina zegt niet genoeg. Rood als de map een lijst met bestanden toont, of als het bestand gewoon te downloaden is (200): dan kan iedereen met het adres het zonder te kopen ophalen. Het programma bewaart alleen de statuscodes, nooit het bestand.
Vraag voor jezelf (niet nagekeken): welke downloadmethode staat in je shop ingesteld, en hoe heb je de herroeping bij je digitale producten geregeld?
Verder lezen
- Digital and downloadable product handling (woocommerce.com, Engels): https://woocommerce.com/document/digital-downloadable-product-handling/
- Gratis WordPress-cursus 7.4: De site verharden: rechten, headers en beveiligingsplugins
- Forbidden (403): You don't have permission to access / on this server
- Burgerlijk Wetboek Boek 6, artikel 6:230p (wetten.overheid.nl): https://wetten.overheid.nl/BWBR0005289/
De kennisbank beschrijft de situatie bij WebOké (LiteSpeed, .htaccess werkt); bij andere aanbieders werkt het vergelijkbaar, behalve op nginx.
