Produkty cyfrowe i wirtualne
Moduł 3: Produkty · Czas czytania: 11 min
Cel lekcji: Po tej lekcji będą Państwo potrafili bezpiecznie sprzedawać produkty cyfrowe i wirtualne: wybiorą Państwo bezpieczną metodę pobierania, zabezpieczą folder z plikami do pobrania, ustawią limity i prawidłowo uregulują prawo odstąpienia od umowy w przypadku treści cyfrowych.
Kluczowe pojęcia: produkt wirtualny, produkt do pobrania, link do pobrania, limit pobrań, data wygaśnięcia, metoda pobierania (Wymuszaj pobieranie, X-Accel-Redirect/X-Sendfile, Tylko przekierowanie), woocommerce_uploads, .htaccess, nginx, zatwierdzone katalogi pobierania (Approved download directories), dostęp po płatności, treści cyfrowe, wyraźna zgoda, rezygnacja z prawa odstąpienia od umowy
Wirtualny i do pobrania: dwa różne pola wyboru
Przy produkcie prostym lub wariancie widzą Państwo dwa pola wyboru. Wyglądają podobnie, ale mają inne działanie:
- Wirtualny (Virtual) oznacza: nic nie jest wysyłane. WooCommerce nie nalicza kosztów wysyłki i podczas składania zamówienia nie pyta o adres dostawy (jeśli wszystko w koszyku jest wirtualne). Przykłady to degustacja herbaty na miejscu, bon podarunkowy wysyłany e-mailem albo warsztat online.
- Do pobrania (Downloadable) oznacza: po płatności klient otrzymuje jeden lub więcej plików. WooCommerce tworzy dla każdego klienta link do pobrania i pokazuje go w e-mailu z potwierdzeniem oraz w Moje konto > Pobrania.
Cyfrowa książka z przepisami w formacie pdf jest zwykle jednym i drugim: nic nie jest wysyłane pocztą, a jest plik. Drukowana książka z przepisami z darmowym plikiem pdf jest do pobrania, ale nie jest wirtualna: książka jest wysyłana pocztą.
Theehuis Example sprzedaje „Receptenboek Thee en Taart” (książkę z przepisami „Herbata i ciasto”) jako pdf za € 9,95 (≈ 43,71 zł). Pola wyboru: wirtualny i do pobrania.
Jak działa pobieranie i dlaczego metoda ma znaczenie
Gdy prześlą Państwo plik do produktu do pobrania, WooCommerce umieszcza go w folderze wp-content/uploads/woocommerce_uploads/. Domyślnie dokleja do nazwy pliku losowy ciąg znaków (ustawienie „Append a unique string to filename for security”, domyślnie włączone). Klient nigdy nie otrzymuje tego adresu, tylko link do Państwa sklepu z kluczem zamówienia i kodem pobrania. Przy każdym kliknięciu WooCommerce sprawdza: czy to pobranie należy do opłaconego zamówienia, czy limit nie został wyczerpany, czy link nie wygasł? Dopiero wtedy klient otrzymuje plik.
Sposób, w jaki plik trafia następnie do klienta, wybierają Państwo w WooCommerce > Ustawienia > Produkty > Produkty do pobrania, w polu metoda pobierania (File download method):
| Metoda | Jak działa | Bezpieczeństwo |
|---|---|---|
| Wymuszaj pobieranie (Force downloads, domyślnie) | PHP odczytuje plik i sam go przesyła | Prawdziwy adres pozostaje ukryty. Duże pliki mogą na niektórych serwerach się zacinać lub przekraczać limit czasu PHP |
| X-Accel-Redirect/X-Sendfile | PHP sprawdza, serwer WWW wysyła plik | Równie bezpieczna i lepsza dla dużych plików; serwer WWW musi ją obsługiwać (w Apache potrzebny jest moduł mod_xsendfile, nginx obsługuje X-Accel-Redirect). Prosimy zapytać o to swojego dostawcę hostingu |
| Tylko przekierowanie (Redirect only) | WooCommerce przekierowuje klienta na prawdziwy adres pliku | Niebezpieczna: kto zna adres, może go udostępnić, a plik można pobrać bez zakupu. WooCommerce sam określa ją jako „Insecure” |
Prosimy więc wybrać Wymuszaj pobieranie lub X-Sendfile. Przekierowanie to wyłącznie rozwiązanie awaryjne, a ustawienie „Allow using redirect mode (insecure) as a last resort” sprawia, że WooCommerce przechodzi na przekierowanie, gdy inna metoda zawiedzie; prosimy pozostawić je wyłączone, chyba że wiedzą Państwo, po co je włączać.
Zabezpieczenie folderu
Przy metodzie Wymuszaj pobieranie lub X-Sendfile folder woocommerce_uploads musi być zamknięty dla zwykłych odwiedzających. W przeciwnym razie ktoś, kto odgadnie nazwę pliku lub wydobędzie ją z wycieku linku, może pobrać plik bezpośrednio. Dlatego WooCommerce podczas instalacji umieszcza w tym folderze dwa pliki:
- pusty
index.html, aby folder nie wyświetlał listy plików; - plik
.htaccesszdeny from all(przy metodzie Tylko przekierowanie:Options -Indexes).
Plik .htaccess działa w Apache i LiteSpeed (tak jak w WebOké i w wielu innych usługach hostingu współdzielonego). W nginx serwer WWW nie odczytuje plików .htaccess. Tam w konfiguracji serwera musi znaleźć się reguła blokująca folder. Na zarządzanym hostingu nginx dostawca czasem robi to za Państwa; na własnym serwerze VPS muszą Państwo zrobić to sami. WooCommerce sam to sprawdza i wyświetla komunikat w panelu administracyjnym (oraz w Stan witryny), jeśli folder nie wydaje się chroniony.
Na kilka rzeczy warto zwrócić uwagę:
- Pusta odpowiedź 200 nie jest dowodem. Jeśli po otwarciu folderu widzą Państwo pustą stronę, może to być pusty
index.html, podczas gdy same pliki są dostępne. Dlatego prosimy przetestować również jeden plik (zadanie to robi). - Pliki z zewnątrz. Przy produkcie można też podać link do pliku znajdującego się gdzie indziej. Do tego WooCommerce ma listę zatwierdzonych katalogów pobierania (Approved download directories): jako plik do pobrania można użyć tylko plików z tych katalogów lub spod tych adresów. Dzięki temu nikt z uprawnieniami administracyjnymi nie może przypadkiem ani celowo udostępnić w produkcie dowolnego pliku z serwera jako pliku do pobrania. Prosimy utrzymywać tę listę krótką.
- Kopie zapasowe i staging. Folder trafia do Państwa kopii zapasowej. W środowisku testowym (staging) znajdują się więc również Państwa płatne pliki: prosimy zabezpieczyć staging (lekcja 7.3).
Limity i dostęp
Dla każdego produktu do pobrania lub wariantu ustawiają Państwo:
- Limit pobrań (Download limit): ile razy klient może pobrać plik. Puste pole oznacza brak limitu. Limit wynoszący na przykład 5 ogranicza udostępnianie, ale prowadzi do reklamacji, gdy ktoś kupi nowy laptop. Prosimy wybrać rozsądną wartość i pomagać klientom, którzy o to poproszą.
- Data wygaśnięcia (Download expiry): po ilu dniach link przestaje działać.
Ustawienia ogólne w Produkty do pobrania:
- Pobieranie wymaga zalogowania (Downloads require login), domyślnie wyłączone. Włączenie oznacza, że goście nie mogą niczego pobrać; prosimy włączać je tylko wtedy, gdy konta są również obowiązkowe.
- Dostęp po płatności (Grant access to downloadable products after payment), domyślnie włączone: klient może pobierać, gdy zamówienie ma status W trakcie realizacji, czyli od razu po udanej płatności. Jeśli jest wyłączone, dopiero po statusie Zrealizowane.
Odstąpienie od umowy przy treściach cyfrowych
Przy zwykłym dzbanku do herbaty klient ma 14 dni na namysł (lekcja 5.2). Przy pliku do pobrania jest to trudne: kto ma plik pdf, ten go ma, także po odstąpieniu od umowy. Dlatego istnieje wyjątek, ale tylko pod pewnymi warunkami. W UE jest on zapisany w art. 16 dyrektywy 2011/83/UE; w Holandii w art. 6:230p lit. g holenderskiego kodeksu cywilnego (BW). Prawo odstąpienia od umowy nie przysługuje w przypadku treści cyfrowych, które nie są dostarczane na nośniku materialnym, jeżeli:
- dostarczanie rozpoczęło się za wyraźną i uprzednią zgodą konsumenta;
- konsument oświadczył, że tym samym rezygnuje z prawa odstąpienia od umowy; oraz
- Państwo przekazali potwierdzenie tego faktu (w potwierdzeniu zawarcia umowy, na trwałym nośniku, takim jak e-mail z zamówieniem).
Jeśli brakuje któregokolwiek z tych trzech elementów, klient zachowuje prawo odstąpienia od umowy, nawet jeśli już pobrał plik. W Belgii i Niemczech ta sama reguła UE obowiązuje we własnym prawie krajowym (zob. lekcja 5.2). W Polsce prawo odstąpienia od umowy reguluje ustawa z dnia 30 maja 2014 r. o prawach konsumenta.
WooCommerce nie załatwia tego automatycznie. Potrzebują Państwo:
- obowiązkowego pola wyboru przy składaniu zamówienia, wyświetlanego tylko wtedy, gdy w koszyku są treści cyfrowe, z tekstem w rodzaju „Wyrażam zgodę na natychmiastowe rozpoczęcie dostarczania i przyjmuję do wiadomości, że tym samym tracę prawo odstąpienia od umowy”;
- tego samego tekstu jako potwierdzenia w e-mailu z zamówieniem dla tych produktów;
- odpowiedniego zdania w informacji o prawie odstąpienia od umowy, że dotyczy to plików do pobrania.
Istnieją rozszerzenia, które dodają takie pole wyboru; blok zamówienia również umożliwia dodawanie dodatkowych pól. Prosimy oceniać je tak jak każdą wtyczkę. Pole wyboru, które jest zaznaczone z góry, nie stanowi wyraźnej zgody (lekcja 5.4).
Prosimy zwrócić uwagę na różnicę w stosunku do usług wirtualnych, takich jak warsztat w określonym terminie. Tam obowiązują przepisy dotyczące usług, z innymi wyjątkami. Prosimy przeczytać lekcję 5.2.
Podsumowanie
- Wirtualny = nic nie jest wysyłane; do pobrania = pliki po płatności. Plik pdf jest zwykle jednym i drugim.
- Prosimy wybrać Wymuszaj pobieranie lub X-Accel-Redirect/X-Sendfile; Tylko przekierowanie jest niebezpieczne.
- Folder
woocommerce_uploadsmusi być zamknięty:.htaccessw Apache i LiteSpeed, reguła serwera w nginx. Prosimy przetestować prawdziwy plik, a nie tylko folder. - Prosimy utrzymywać krótką listę zatwierdzonych katalogów pobierania i ustawić rozsądne limity.
- Brak prawa odstąpienia od umowy przy plikach do pobrania tylko przy wyraźnej zgodzie, rezygnacji z prawa i potwierdzeniu; WooCommerce nie robi tego automatycznie. W Polsce podstawą jest ustawa z dnia 30 maja 2014 r. o prawach konsumenta.
Quiz
Zadanie
Zadanie A3.3: Czy Państwa pliki do pobrania są zabezpieczone? To zadanie sprawdza ścieżki, do których nie prowadzą żadne linki, dlatego działa tylko dla Państwa własnego sklepu. Najpierw wykazują Państwo, że domena należy do Państwa: dodają Państwo rekord TXT _weboke-cursus.<Państwa domena> z otrzymanym kodem albo umieszczają plik /.well-known/weboke-cursus-<kod>.txt zawierający ten kod. Następnie wpisują Państwo adres swojego sklepu oraz, jeśli Państwo chcą, ścieżkę jednego pliku do pobrania w takiej postaci, w jakiej WooCommerce pokazuje ją przy produkcie (zaczyna się od /wp-content/uploads/woocommerce_uploads/). Program odpytuje folder (bez podążania za przekierowaniami, tylko początek odpowiedzi) oraz, jeśli podali Państwo ścieżkę, jednorazowo nagłówki tego pliku. Zielony, jeśli folder zwraca 401, 403 lub 404 albo stronę bez listy plików, a plik zwraca 401, 403 lub 404. Pomarańczowy, jeśli nie podali Państwo pliku: wtedy sprawdzony został tylko folder, a pusta strona to za mało. Czerwony, jeśli folder pokazuje listę plików albo jeśli plik można po prostu pobrać (200): wtedy każdy, kto zna adres, może go pobrać bez zakupu. Program zapisuje tylko kody statusu, nigdy sam plik.
Pytanie do samodzielnego przemyślenia (niesprawdzane): jaka metoda pobierania jest ustawiona w Państwa sklepie i jak uregulowali Państwo odstąpienie od umowy przy swoich produktach cyfrowych?
Dalsza lektura
- Digital and downloadable product handling (woocommerce.com, po angielsku): https://woocommerce.com/document/digital-downloadable-product-handling/
- Darmowy kurs WordPress 7.4: Zabezpieczanie strony: uprawnienia, nagłówki i wtyczki bezpieczeństwa
- Zabronione (403): Nie mają Państwo uprawnień dostępu do / na tym serwerze
- Holenderski kodeks cywilny (Burgerlijk Wetboek), księga 6, art. 6:230p (wetten.overheid.nl, po niderlandzku): https://wetten.overheid.nl/BWBR0005289/
Baza wiedzy opisuje sytuację w WebOké (LiteSpeed, .htaccess działa); u innych dostawców działa to podobnie, z wyjątkiem nginx.
