Ενότητα 3 · 3.3
Ψηφιακά και εικονικά προϊόντα
Ενότητα 3: Προϊόντα · Χρόνος ανάγνωσης: 11 λεπτά
Στόχος μαθήματος: Μετά από αυτό το μάθημα μπορείτε να πουλάτε ψηφιακά και εικονικά προϊόντα με ασφάλεια: επιλέγετε μια ασφαλή μέθοδο λήψης, προστατεύετε τον φάκελο λήψεων, ορίζετε όρια και ρυθμίζετε σωστά το δικαίωμα υπαναχώρησης για ψηφιακό περιεχόμενο.
Βασικές έννοιες: εικονικό προϊόν, μεταφορτώσιμο προϊόν, σύνδεσμος λήψης, όριο λήψεων, ημερομηνία λήξης, μέθοδος λήψης (Επιβολή μεταφορτώσεων, X-Accel-Redirect/X-Sendfile, Μόνο ανακατεύθυνση), woocommerce_uploads, .htaccess, nginx, εγκεκριμένοι φάκελοι λήψεων (Approved download directories), πρόσβαση μετά την πληρωμή, ψηφιακό περιεχόμενο, ρητή συγκατάθεση, παραίτηση από το δικαίωμα υπαναχώρησης
Εικονικό και μεταφορτώσιμο: δύο διαφορετικά πλαίσια επιλογής
Σε ένα απλό προϊόν ή σε μια παραλλαγή βλέπετε δύο πλαίσια επιλογής. Μοιάζουν μεταξύ τους, αλλά κάνουν κάτι διαφορετικό:
- Εικονικό (Virtual) σημαίνει: δεν αποστέλλεται τίποτα. Το WooCommerce δεν χρεώνει έξοδα αποστολής και δεν ζητά διεύθυνση αποστολής κατά την ολοκλήρωση της αγοράς (όταν όλα τα προϊόντα στο καλάθι είναι εικονικά). Σκεφτείτε μια γευσιγνωσία τσαγιού στο κατάστημα, μια δωροκάρτα που στέλνετε με email ή ένα online εργαστήριο.
- Μεταφορτώσιμο (Downloadable) σημαίνει: μετά την πληρωμή ο πελάτης λαμβάνει ένα ή περισσότερα αρχεία. Το WooCommerce δημιουργεί έναν σύνδεσμο λήψης για κάθε πελάτη και τον εμφανίζει στο email επιβεβαίωσης και στο Ο λογαριασμός μου > Μεταφορτώσεις.
Ένα ψηφιακό βιβλίο συνταγών σε pdf είναι συνήθως και τα δύο: δεν αποστέλλεται τίποτα ταχυδρομικά και υπάρχει ένα αρχείο. Ένα έντυπο βιβλίο συνταγών με ένα δωρεάν pdf είναι μεταφορτώσιμο αλλά όχι εικονικό: το βιβλίο αποστέλλεται ταχυδρομικά.
Το Theehuis Example πουλά το «Receptenboek Thee en Taart» (βιβλίο συνταγών Τσάι και Κέικ) σε pdf για € 9,95. Πλαίσια επιλογής: εικονικό και μεταφορτώσιμο.
Πώς λειτουργεί μια λήψη και γιατί μετράει η μέθοδος
Όταν ανεβάζετε ένα αρχείο σε ένα μεταφορτώσιμο προϊόν, το WooCommerce το αποθηκεύει στον φάκελο wp-content/uploads/woocommerce_uploads/. Από προεπιλογή προσθέτει μια τυχαία σειρά χαρακτήρων στο όνομα του αρχείου (ρύθμιση «Append a unique string to filename for security», ενεργή από προεπιλογή). Ο πελάτης δεν λαμβάνει ποτέ αυτή τη διεύθυνση, αλλά έναν σύνδεσμο προς το κατάστημά σας με ένα κλειδί παραγγελίας και έναν κωδικό λήψης. Σε κάθε κλικ το WooCommerce ελέγχει: ανήκει αυτή η λήψη σε πληρωμένη παραγγελία, δεν έχει εξαντληθεί το όριο, δεν έχει λήξει; Μόνο τότε ο πελάτης λαμβάνει το αρχείο.
Πώς φτάνει στη συνέχεια το αρχείο στον πελάτη το επιλέγετε στο WooCommerce > Ρυθμίσεις > Προϊόντα > Μεταφορτώσιμα προϊόντα, στη μέθοδο λήψης (File download method):
| Μέθοδος | Πώς λειτουργεί | Ασφάλεια |
|---|---|---|
| Επιβολή μεταφορτώσεων (Force downloads, προεπιλογή) | Η PHP διαβάζει το αρχείο και το στέλνει η ίδια | Η πραγματική διεύθυνση παραμένει κρυφή. Μεγάλα αρχεία μπορεί σε ορισμένους servers να κολλήσουν ή να ξεπεράσουν το χρονικό όριο της PHP |
| X-Accel-Redirect/X-Sendfile | Η PHP ελέγχει, ο web server στέλνει το αρχείο | Εξίσου ασφαλής και καλύτερη για μεγάλα αρχεία· ο web server πρέπει να την υποστηρίζει (στον Apache χρειάζεται η μονάδα mod_xsendfile, ο nginx γνωρίζει το X-Accel-Redirect). Ρωτήστε τον πάροχο hosting σας |
| Μόνο ανακατεύθυνση (Redirect only) | Το WooCommerce ανακατευθύνει τον πελάτη στην πραγματική διεύθυνση του αρχείου | Μη ασφαλής: όποιος έχει τη διεύθυνση μπορεί να τη μοιραστεί και το αρχείο μπορεί να ληφθεί χωρίς αγορά. Το ίδιο το WooCommerce τη χαρακτηρίζει «Insecure» |
Επιλέξτε λοιπόν Επιβολή μεταφορτώσεων ή X-Sendfile. Η ανακατεύθυνση είναι μόνο λύση ανάγκης. Η ρύθμιση «Allow using redirect mode (insecure) as a last resort» κάνει το WooCommerce να επιστρέφει στην ανακατεύθυνση όταν η άλλη μέθοδος αποτυγχάνει· αφήστε την ανενεργή, εκτός αν γνωρίζετε γιατί τη χρειάζεστε.
Προστασία του φακέλου
Με την Επιβολή μεταφορτώσεων ή το X-Sendfile ο φάκελος woocommerce_uploads πρέπει να είναι κλειστός για τους απλούς επισκέπτες. Διαφορετικά, όποιος μαντέψει το όνομα του αρχείου ή το βρει σε έναν σύνδεσμο που διέρρευσε, μπορεί να κατεβάσει το αρχείο απευθείας. Γι' αυτό το WooCommerce τοποθετεί κατά την εγκατάσταση δύο αρχεία σε αυτόν τον φάκελο:
- ένα κενό
index.html, ώστε ο φάκελος να μην εμφανίζει λίστα αρχείων· - ένα
.htaccessμεdeny from all(με τη μέθοδο Μόνο ανακατεύθυνση:Options -Indexes).
Αυτό το αρχείο .htaccess λειτουργεί σε Apache και LiteSpeed (όπως στο WebOké και σε πολλά άλλα κοινόχρηστα hosting). Στον nginx ο web server δεν διαβάζει αρχεία .htaccess. Εκεί πρέπει να υπάρχει στη διαμόρφωση του server ένας κανόνας που μπλοκάρει τον φάκελο. Σε ένα διαχειριζόμενο hosting με nginx ο πάροχος το φροντίζει μερικές φορές· σε δικό σας VPS πρέπει να το κάνετε εσείς. Το WooCommerce το ελέγχει μόνο του και εμφανίζει ειδοποίηση στη διαχείριση (και στην Υγεία ιστότοπου) όταν ο φάκελος δεν φαίνεται προστατευμένος.
Μερικά σημεία προσοχής:
- Μια κενή απάντηση 200 δεν είναι απόδειξη. Αν ζητήσετε τον φάκελο και δείτε μια κενή σελίδα, μπορεί να είναι το κενό
index.html, ενώ τα ίδια τα αρχεία είναι ανοιχτά. Γι' αυτό δοκιμάστε και ένα αρχείο (η άσκηση το κάνει). - Αρχεία από αλλού. Σε ένα προϊόν μπορείτε να ορίσετε και σύνδεσμο προς ένα αρχείο που βρίσκεται αλλού. Για αυτό το WooCommerce διαθέτει τη λίστα εγκεκριμένων φακέλων λήψεων (Approved download directories): μόνο αρχεία από αυτούς τους φακέλους ή από αυτές τις διευθύνσεις μπορούν να χρησιμοποιηθούν ως λήψη. Έτσι κανείς με δικαιώματα διαχείρισης προϊόντων δεν μπορεί, κατά λάθος ή σκόπιμα, να προσφέρει ένα οποιοδήποτε αρχείο του server ως λήψη. Κρατήστε αυτή τη λίστα σύντομη.
- Αντίγραφα ασφαλείας και staging. Ο φάκελος περιλαμβάνεται στο αντίγραφο ασφαλείας σας. Σε ένα περιβάλλον staging υπάρχουν επομένως και τα πληρωμένα αρχεία σας: προστατέψτε το staging (μάθημα 7.3).
Όρια και πρόσβαση
Για κάθε μεταφορτώσιμο προϊόν ή παραλλαγή ορίζετε:
- Όριο λήψεων (Download limit): πόσες φορές μπορεί ο πελάτης να κατεβάσει το αρχείο. Κενό σημαίνει απεριόριστα. Ένα όριο για παράδειγμα 5 περιορίζει την κοινοποίηση, αλλά προκαλεί παράπονα όταν κάποιος αγοράζει νέο laptop. Επιλέξτε κάτι λογικό και βοηθήστε τους πελάτες που το ζητούν.
- Ημερομηνία λήξης (Download expiry): μετά από πόσες ημέρες ο σύνδεσμος παύει να λειτουργεί.
Γενικές ρυθμίσεις στα Μεταφορτώσιμα προϊόντα:
- Οι λήψεις απαιτούν σύνδεση (Downloads require login), ανενεργό από προεπιλογή. Ενεργό σημαίνει ότι οι επισκέπτες χωρίς λογαριασμό δεν μπορούν να κατεβάσουν τίποτα· ενεργοποιήστε το μόνο αν απαιτείτε και λογαριασμούς.
- Πρόσβαση μετά την πληρωμή (Grant access to downloadable products after payment), ενεργό από προεπιλογή: ο πελάτης μπορεί να κατεβάσει μόλις η παραγγελία έχει την κατάσταση Σε επεξεργασία, δηλαδή αμέσως μετά από μια επιτυχημένη πληρωμή. Αν είναι ανενεργό, μόνο μετά την κατάσταση Ολοκληρωμένη.
Υπαναχώρηση για ψηφιακό περιεχόμενο
Για μια κανονική τσαγιέρα ο πελάτης έχει προθεσμία 14 ημερών για να το σκεφτεί (μάθημα 5.2). Σε μια λήψη αυτό είναι δύσκολο: όποιος έχει το pdf, το κρατά, ακόμη και μετά την υπαναχώρηση. Γι' αυτό υπάρχει εξαίρεση, αλλά μόνο υπό προϋποθέσεις. Στην ΕΕ προβλέπεται στο άρθρο 16 της οδηγίας 2011/83/ΕΕ· στην Ολλανδία στο άρθρο 6:230p στοιχείο g του Ολλανδικού Αστικού Κώδικα (BW). Δεν υπάρχει δικαίωμα υπαναχώρησης για ψηφιακό περιεχόμενο που δεν παρέχεται σε υλικό μέσο, όταν:
- η παροχή έχει αρχίσει με τη ρητή προηγούμενη συγκατάθεση του καταναλωτή·
- ο καταναλωτής έχει δηλώσει ότι έτσι παραιτείται από το δικαίωμα υπαναχώρησης· και
- εσείς έχετε δώσει επιβεβαίωση γι' αυτό (στην επιβεβαίωση της σύμβασης, σε σταθερό μέσο όπως το email της παραγγελίας).
Αν λείπει έστω και μία από τις τρεις προϋποθέσεις, ο πελάτης διατηρεί το δικαίωμα υπαναχώρησης, ακόμη κι αν έχει ήδη κατεβάσει το αρχείο. Στο Βέλγιο και στη Γερμανία ισχύει ο ίδιος κανόνας της ΕΕ μέσω της εθνικής τους νομοθεσίας (βλ. μάθημα 5.2). Στην Ελλάδα ο κανόνας ισχύει μέσω του Ν. 2251/1994 για την προστασία των καταναλωτών, που προβλέπει δικαίωμα υπαναχώρησης 14 ημερών.
Το WooCommerce δεν το ρυθμίζει αυτό αυτόματα. Χρειάζεστε:
- ένα υποχρεωτικό πλαίσιο επιλογής κατά την ολοκλήρωση της αγοράς, μόνο όταν υπάρχει ψηφιακό περιεχόμενο στο καλάθι, με ένα κείμενο όπως «Συμφωνώ να ξεκινήσει αμέσως η παροχή και γνωρίζω ότι έτσι χάνω το δικαίωμα υπαναχώρησης»·
- το ίδιο κείμενο ως επιβεβαίωση στο email της παραγγελίας για αυτά τα προϊόντα·
- τη σωστή πρόταση στις πληροφορίες υπαναχώρησης ότι αυτό ισχύει για τις λήψεις.
Υπάρχουν επεκτάσεις που προσθέτουν ένα τέτοιο πλαίσιο επιλογής· το μπλοκ ολοκλήρωσης αγοράς διαθέτει επίσης δυνατότητες για επιπλέον πεδία. Αξιολογήστε τες όπως κάθε plugin. Ένα πλαίσιο επιλογής που είναι ήδη επιλεγμένο δεν μετράει ως ρητή συγκατάθεση (μάθημα 5.4).
Προσέξτε τη διαφορά με τις εικονικές υπηρεσίες, όπως ένα εργαστήριο σε συγκεκριμένη ημερομηνία. Εκεί ισχύουν οι κανόνες για τις υπηρεσίες, με άλλες εξαιρέσεις. Διαβάστε το μάθημα 5.2.
Σύνοψη
- Εικονικό = δεν αποστέλλεται τίποτα· μεταφορτώσιμο = αρχεία μετά την πληρωμή. Ένα pdf είναι συνήθως και τα δύο.
- Επιλέξτε Επιβολή μεταφορτώσεων ή X-Accel-Redirect/X-Sendfile· η Μόνο ανακατεύθυνση δεν είναι ασφαλής.
- Ο φάκελος
woocommerce_uploadsπρέπει να είναι κλειστός:.htaccessσε Apache και LiteSpeed, κανόνας του server σε nginx. Δοκιμάστε ένα πραγματικό αρχείο, όχι μόνο τον φάκελο. - Κρατήστε σύντομη τη λίστα εγκεκριμένων φακέλων λήψεων και ορίστε λογικά όρια.
- Χωρίς δικαίωμα υπαναχώρησης στις λήψεις μόνο με ρητή συγκατάθεση, παραίτηση από το δικαίωμα και επιβεβαίωση· το WooCommerce δεν το κάνει αυτόματα. Στην Ελλάδα ο κανόνας της ΕΕ ισχύει μέσω του Ν. 2251/1994.
Κουίζ
Άσκηση
Άσκηση A3.3: Είναι προστατευμένες οι λήψεις σας; Αυτή η άσκηση ζητά διαδρομές που δεν είναι συνδεδεμένες από πουθενά και γι' αυτό λειτουργεί μόνο για το δικό σας κατάστημα. Πρώτα αποδεικνύετε ότι το domain είναι δικό σας: ορίζετε ένα TXT record _weboke-cursus.<το domain σας> με τον κωδικό που λαμβάνετε ή τοποθετείτε ένα αρχείο /.well-known/weboke-cursus-<code>.txt με αυτόν τον κωδικό μέσα. Στη συνέχεια συμπληρώστε τη διεύθυνση του καταστήματός σας και, αν θέλετε, τη διαδρομή ενός αρχείου λήψης όπως την εμφανίζει το WooCommerce στο προϊόν (ξεκινά με /wp-content/uploads/woocommerce_uploads/). Το πρόγραμμα ζητά τον φάκελο (χωρίς να ακολουθεί ανακατευθύνσεις, μόνο την αρχή) και, αν συμπληρώσατε διαδρομή, μία φορά τις κεφαλίδες αυτού του αρχείου. Πράσινο όταν ο φάκελος επιστρέφει 401, 403 ή 404 ή μια σελίδα χωρίς λίστα αρχείων, και το αρχείο επιστρέφει 401, 403 ή 404. Πορτοκαλί όταν δεν συμπληρώσατε αρχείο: τότε ελέγχθηκε μόνο ο φάκελος, και μια κενή σελίδα δεν αρκεί ως απόδειξη. Κόκκινο όταν ο φάκελος εμφανίζει λίστα αρχείων ή όταν το αρχείο κατεβαίνει κανονικά (200): τότε όποιος έχει τη διεύθυνση μπορεί να το πάρει χωρίς αγορά. Το πρόγραμμα αποθηκεύει μόνο τους κωδικούς κατάστασης, ποτέ το αρχείο.
Ερώτηση για εσάς (δεν ελέγχεται): ποια μέθοδος λήψης είναι ρυθμισμένη στο κατάστημά σας και πώς έχετε ρυθμίσει την υπαναχώρηση για τα ψηφιακά σας προϊόντα;
Περαιτέρω ανάγνωση
- Digital and downloadable product handling (woocommerce.com, Αγγλικά): https://woocommerce.com/document/digital-downloadable-product-handling/
- Δωρεάν μάθημα WordPress 7.4: Ενίσχυση ασφάλειας του ιστοτόπου: δικαιώματα, κεφαλίδες και πρόσθετα ασφαλείας @@ΟΜΣΧΡΙΨΗ@@
- Απαγορευμένη πρόσβαση (403): Δεν έχετε δικαίωμα πρόσβασης στο / σε αυτόν τον διακομιστή
- Ολλανδικός Αστικός Κώδικας (Burgerlijk Wetboek) Βιβλίο 6, άρθρο 6:230p (wetten.overheid.nl, Ολλανδικά): https://wetten.overheid.nl/BWBR0005289/
Η βάση γνώσεων περιγράφει την κατάσταση στο WebOké (LiteSpeed, το .htaccess λειτουργεί)· σε άλλους παρόχους λειτουργεί παρόμοια, εκτός από τον nginx.
