Modul 2 · 2.4
Mit mutat meg nyilvánosan a webáruháza
Modul 2: Telepítés és beállítás · Olvasási idő: 10 perc
Tanulási cél: A lecke végére el tudja magyarázni, mi a WooCommerce Store API-ja és REST API-ja, mely adatoknak kell nyilvánosnak lenniük és melyeknek nem, valamint hogyan használja biztonságosan az API-kulcsokat és a webkapcsokat.
Kulcsfogalmak: API, a WordPress REST API-ja, Store API (wc/store/v1), a WooCommerce REST API-ja (wc/v3), JSON, nyilvános és védett, API-kulcs, olvasási és írási jogok, legkisebb jogosultság elve, webkapocs (webhook), a webkapocs titkos kulcsa, X-WP-Total
Egy bolt két ajtóval
A látogató weboldalakként látja az Ön webáruházát. Az áruháznak azonban programok számára is vannak „ajtói”: olyan címek, ahol egy program adatokat kérhet le vagy küldhet el, az oldal formázása nélkül. Az ilyen ajtót API-nak (application programming interface, alkalmazásprogramozási felület) nevezzük. A WordPressnek is van egy ilyen a /wp-json/ alatt: ez a REST API. A WordPress-tanfolyam 7.3. leckéje megmutatta, hogy ott például felhasználóneveket lehet lekérdezni, ha semmit sem véd le.
A WooCommerce két saját API-t ad hozzá, egészen eltérő céllal:
| Store API | A WooCommerce REST API-ja | |
|---|---|---|
| Cím | /wp-json/wc/store/v1/... | /wp-json/wc/v3/... |
| Kinek szól | A látogató böngészőjének (a kosár és a pénztár blokkjai, 2.2. lecke) | Más programoknak: könyvelés, készletkezelés, egy alkalmazás, egy piactér-összekapcsolás |
| Kell hozzá kulcs | Nem, nyilvános | Igen, egy adminisztrátor API-kulcsa (vagy egy bejelentkezett, megfelelő jogokkal rendelkező felhasználó) |
| Mit tartalmaz | Termékek, árak, készletállapot, kategóriák, értékelések; maga a látogató kosara és rendelése | Mindent: mindenki rendeléseit, a vásárlókat, kuponokat, beállításokat, jelentéseket |
A Store API tehát a kirakat bejárata: ami az Ön boltjában egy termékoldalon szerepel, az benne is van, csak adatként. A WooCommerce REST API-ja viszont a raktár hátsó ajtaja: annak zárva kell lennie.
A Store API: amit egy látogató (és bárki) lekérdezhet
Nyissa meg a böngészőjében:
https://shop.example.com/wp-json/wc/store/v1/productsEgy JSON formátumú listát kap; a JSON adatok tárolására szolgáló szöveges formátum. Minden terméknél többek között látja a nevet, a slugot, a típust (egyszerű, variálható), a termékoldal címét (permalink), a cikkszámot (SKU), az árakat, a képeket, a kategóriákat, azt, hogy raktáron van-e, és hogy megvásárolható-e. A válasz fejléceiben szerepel az X-WP-Total: azoknak a termékeknek a száma, amelyeket a bolt a látogatóknak megmutat.
Néhány tudnivaló:
- Az árak centben szerepelnek. Egy € 34,95 (≈ 12 687 Ft)-ös teáskanna így jelenik meg:
"price": "3495", mellette"currency_minor_unit": 2. Az értéket el kell osztani 100-zal. Hogy ez áfával vagy áfa nélkül értendő ár, az az „Árak megjelenítése a boltban” beállítástól függ (4.1. lecke). Ezt a tulajdonságot a 4.1. lecke feladatában használjuk. - Csak az, ami látható. A vázlat állapotú, privát vagy a katalógusban elrejtett termékeket a Store API nem számolja bele. Ezért lehet az
X-WP-Totalértéke kisebb, mint az adminisztrációs felületen látható szám. - Olvasni bárki tud, írni nem csak úgy. A Store API-n keresztül kosárba tenni vagy fizetni csak az oldalból származó egyszer használatos kóddal (nonce) lehet, és akkor is csak az adott látogató saját kosarára vonatkozóan.
Baj, hogy ez nyilvános? Nem: ugyanazok az adatok, amelyek a termékoldalain is szerepelnek. Egy versenytárs, aki figyelni akarja az árait, ezt a szokásos oldalakon is megteheti. Azt viszont érdemes tudatosítani, hogy bármi, amit egy termékmezőbe ír, megjelenhet a Store API-ban. Soha ne írjon beszerzési árakat, beszállítói neveket vagy belső megjegyzéseket a rövid vagy a hosszú leírásba azzal, hogy „a téma úgysem jeleníti meg ezt a mezőt”.
A Store API-t se zárja le. A kosár és a pénztár blokkjainak szükségük van rá (2.2. lecke). Azok a biztonsági bővítmények, amelyek „kikapcsolják a REST API-t a látogatók számára”, ezért néha tönkreteszik a fizetést. Ha korlátozni szeretné a REST API-t, a Store API-t vegye ki a korlátozás alól.
A Store API-val való visszaélés létezik, de az írási oldalon: támadók lopott kártyaszámokkal több ezer apró rendelést próbálnak leadni. Ezt card testingnek (kártyatesztelésnek) nevezik; erről a 6.3. lecke szól.
A WooCommerce REST API-ja: mindig kulcs mögött
Most nyissa meg, bejelentkezés nélkül:
https://shop.example.com/wp-json/wc/v3/ordersA helyes válasz egy hibaüzenet 401-es állapotkóddal (nincs bejelentkezve) és egy olyan kóddal, mint a woocommerce_rest_cannot_view. Az áruháza ezt mondja: „ezt Ön nem láthatja”. Így van ez rendjén. Ha itt rendelések listáját kapja, akkor valami súlyosan hibás: egy bővítmény, amely jogosultságokat nyit meg, egyedi kód a témában, vagy egy kulcs, amely nyilvános címben szerepel. Ilyenkor lehetséges adatvédelmi incidensről van szó (WordPress-tanfolyam, 7.5. lecke, és a tudásbázis 6749. cikke).
Azok a programok, amelyeknek hozzá kell férniük a rendeléseihez, API-kulcsot kapnak. Ezt a WooCommerce > Beállítások > Haladó > REST API menüpontban hozhatja létre (Advanced > REST API). Egy kulcs két részből áll (consumer key és consumer secret), és egy WordPress-felhasználóhoz tartozik. A jogosultságokat Ön választja ki:
- Olvasás: a program adatokat kérhet le;
- Írás: a program adatokat hozhat létre és módosíthat;
- Olvasás/Írás: mindkettő.
Szabályok, amelyeket mindig tartson be:
- Legkisebb jogosultság. Egy könyvelési összekapcsolás, amely csak lekéri a rendeléseket, csak olvasási jogot kap. Egy készletösszekapcsolásnak, amely frissíti a készletet, írási jog kell, egy jelentéskészítő eszköznek viszont nem.
- Összekapcsolásonként egy kulcs, egyértelmű leírással („Könyvelés, csak olvasás, 2026”). Ha egy összekapcsolás megszűnik, csak azt az egy kulcsot kell visszavonnia.
- A kulcsot megfelelő jogokkal rendelkező felhasználóhoz rendelje. Egy adminisztrátor kulcsa mindenre képes, amire egy adminisztrátor. Inkább hozzon létre egy külön felhasználót Bolt kezelő szerepkörrel (6.2. lecke).
- A titkos részt tárolja biztonságosan. Csak egyszer látja, a létrehozáskor. A program beállításaiba vagy egy jelszókezelőbe való, nem e-mailbe, megosztott dokumentumba vagy nyilvános kódtárba.
- Takarítson. A REST API oldalon kulcsonként látja, mikor használták utoljára. Azt a kulcsot, amelyet hónapok óta nem használtak, vonja vissza.
Webkapcsok: az áruháza felhív egy másik programot
Egy API megvárja, amíg valaki kérdez. A webkapocs (webhook) fordítva működik: ha az áruházban történik valami (új rendelés, módosított termék), a WooCommerce maga küld üzenetet egy Ön által megadott címre. Így a szállítási programja azonnal értesül egy rendelésről, anélkül hogy percenként rá kellene kérdeznie. Ezeket a WooCommerce > Beállítások > Haladó > Webkapcsok menüpontban állíthatja be.
Három dologra figyeljen:
- Az üzenet személyes adatokat tartalmaz. Egy új rendeléshez tartozó webkapocs elküldi a nevet, a címet és a megrendelt termékeket. Ezt csak https-en keresztül elérhető címre küldje, és csak olyan félnek, amely szerepel az adatkezelési tájékoztatójában és az adatkezelési nyilvántartásában (5.5. lecke).
- A titkos kulcs. Egy webkapocsnál titkos kulcsot ad meg. Ezzel a fogadó program ellenőrizheti, hogy az üzenet valóban az Ön áruházától érkezik, és nem valakitől, aki kitalálta a címet. Ne hagyja üresen, és csak a címzettel ossza meg.
- Sikertelen kézbesítés. Ha a fogadó cím egy ideig nem érhető el, a WooCommerce ismételt hibák után kikapcsolhatja a webkapcsot. Egy üzemzavar után ellenőrizze a Webkapcsok oldalon, hogy még aktívak-e.
Ne keverje ezt össze a fizetési szolgáltatója webkapcsával (4.4. lecke). Az fordítva működik: a szolgáltató jelzi az Ön áruházának, hogy egy fizetés sikeres volt.
A gyakorlatban: így néz ki a WooCommerce-ben
Más tárhelyszolgáltatóknál is ugyanígy működik; ezek a WooCommerce saját részei.
- Nyissa meg egy privát ablakban a
/wp-json/wc/store/v1/productscímet a (teszt)áruházán. Keressen meg egy terméket, és számolja át az árát. - Ugyanabban a privát ablakban nyissa meg a
/wp-json/wc/v3/orderscímet. 401-es állapotkódot kell látnia. - Lépjen a WooCommerce > Beállítások > Haladó > REST API oldalra. Nézze meg, milyen kulcsok vannak, melyik felhasználóhoz tartoznak és milyen jogokkal. Vonja vissza azokat a kulcsokat, amelyeket nem ismer (vagy már nem használ).
- A Webkapcsok oldalon nézze meg, milyen webkapcsok vannak, és milyen címre küldenek.
- Ha olyan biztonsági bővítményt használ, amely korlátozza a REST API-t, ellenőrizze, hogy a Store API ki van-e véve a korlátozás alól.
Összefoglalás
- A Store API (
wc/store/v1) nyilvános, és azt tartalmazza, ami a termékoldalain is szerepel; a kosár és a pénztár blokkjainak szükségük van rá. - Ne írjon belső adatokat termékmezőkbe: a Store API-n keresztül láthatóvá válhatnak.
- A WooCommerce REST API-jának (
wc/v3) kulcs nélkül 401-et kell adnia; a kulcs nélkül elérhető rendelési lista lehetséges adatvédelmi incidens. - API-kulcsok: legkisebb jogosultság, összekapcsolásonként egy, megfelelő felhasználóhoz rendelve, titokban tartva, a nem használtakat visszavonva.
- A webkapcsok személyes adatokat küldenek egy másik programnak: csak https-en keresztül, titkos kulccsal, az adatkezelési nyilvántartásában szereplő félnek.
Kvíz
Feladat
A2.4. feladat: Mit mutat meg nyilvánosan az Ön webáruháza? Adja meg a (teszt)áruháza címét és a boltban látható termékek számát. A program három lekérdezést végez, sütik és kulcs nélkül, csak olvasva:
/wp-json/wc/store/v1/products?per_page=1(a Store API, azon a REST-címen keresztül, amelyet a webhelye maga ad meg);/wp-json/wc/v3/orders?per_page=1;/wp-json/wc/v3/customers?per_page=1.
Rendben van, ha: a Store API 200-as állapotkóddal és JSON-listával válaszol; az X-WP-Total fejléc megegyezik az Ön által megadott számmal; az orders és a customers 401-et, 403-at vagy 404-et ad.
Narancssárga: az X-WP-Total eltér (a vázlat állapotú, privát vagy rejtett termékek nem számítanak bele); a Store API 401-et vagy 403-at ad, többnyire egy biztonsági bővítmény miatt, ami miatt a pénztár blokkjai nem működnek.
Piros: a Store API nem érhető el, pedig a webhelyen WooCommerce fut; vagy az orders, illetve a customers listát ad vissza. Ez utóbbi súlyos: azonnal zárja le, ellenőrizze az API-kulcsait és a bővítményeit, és mérlegelje, hogy be kell-e jelentenie adatvédelmi incidenst. A program ilyenkor csak az állapotkódot tárolja, a tartalmat soha.
Ezután nézze meg saját maga a REST API és a Webkapcsok oldalt: milyen kulcsok és webkapcsok vannak ott, és mindegyikről tudja-e, mire szolgál?
Bővebben olvasva
- Ingyenes WordPress-tanfolyam 7.3: Bejelentkezés: jelszavak, kétlépcsős azonosítás és brute force
- Ingyenes WordPress-tanfolyam 7.5: Feltörve: felismerés, helyreállítás és megelőzés
- WordPress: az xmlrpc.php nem érhető el
- Ez adatszivárgásnak minősül, és be kell jelentenem?
- A Store API (developer.woocommerce.com, angol nyelven): https://developer.woocommerce.com/docs/apis/store-api/
- A Store API kéréskorlátozása (rate limiting) (developer.woocommerce.com, angol nyelven): https://developer.woocommerce.com/docs/apis/store-api/rate-limiting/
