2 napon belül több megkeresést is kaptunk azzal, hogy a Prestashop-beli contact-form-on keresztül tömeges SPAM áradat vette kezdetét finom orosz nyelven. Személyes véleményem az, hogy ez ismét olyan globális Prestashop-problémává fogja kinőni magát, mint anno a mailalerts modul sebezhetősége, így aztán kiemelten szeretnék ezzel az üggyel is foglalkozni. Nem lepne meg, ha 1 héten belül exponenciálisan nőne az ezzel kapcsolatos ügyletek száma – így hát nézzünk rá valamilyen megoldást!
Amit én gondolok
Szerintem – eltérően a mailalerts-től – itt most a robotok nem egy kis biztonsági rést találtak a contact-form (kapcsolati űrlap, üzenetküldő) pajzsán, hanem egyszerűen csak ezzel a form-al kompatibilis, úgymond Prestashop-speciális hívásokat kezdeményeznek amit aztán SPAM-elésre használnak fel. Ha ez tényleg sokakat fog érinteni (ahogy vélem jelenleg) akkor biztosan érkezik (ha eddig esetleg nem érkezett volna meg) egy patch, egy fix, egy gyorskötözős megoldás – javítás ami befoltozza a lyukat; valószínűleg captcha formájában. Hogy ez mikor nyeri aktualitását és hogyan azt most még nem tudom, de nem is várom meg.
Mi az a captcha?
“A CAPTCHA a számítástechnikában olyan automatikus teszt, ami képes megkülönböztetni az emberi felhasználót a számítógéptől. A szó az angol Completely Automated Public Turing test to tell Computers and Humans Apart (am. teljesen automatizált nyilvános Turing-teszt a számítógép és az ember megkülönböztetésére) kifejezés rövidítése. A teszt során a számítógép generál egy feladványt, amit csak egy ember tud helyesen megválaszolni, de a válasz helyességét a gép is könnyedén el tudja dönteni.” – írja a WIKI.
Google-féle reCaptcha megoldás
A fenti képen is látható eltorzult-áthúzott betűk, számok, karakterek egyvelegére igen hamar érkeztek robot-megoldások, így aztán a Google elkészítette a reCaptcha névre hallgató “Nem vagyok robot” programját, mely ma az egyik legbiztonságosabb védelemnek számít a digitális világban.
Védjünk reCaptchával!
Alapvetően két megoldás létezik a fenti prevenció telepítésére: Prestashop modul vagy kézi beépítés. Legjobb tudomásom szerint egy ingyenes modul van erre, fizetősök között EZT és EZT tudnám ajánlani. Mivel ezeket a pluginokat könnyű konfigurálni (bár kipróbáláskor nekem nem jól vagy egyáltalán nem működtek) ezért ebben a cikkben ezt nem tárgyalom; inkább építsük be kézzel!
Lépések
- Google fiókunkkal bejelentkezve nyissuk meg az alábbi weboldalt: https://www.google.com/recaptcha/admin#list
Itt láthatod felsorolva azokat a weboldalakat amikhez már tettél reCaptchát (ha volt ilyen). Újat felvenni a lenti “Register a new site” alatt tudsz: írd be a weboldalat nevét, dobj egy kiválasztást a “reCAPTCHA V2“-höz, majd lejjebb add meg a Prestashop-od domain nevét (például: peldaprestashop.hu – tehát http(s) tag nélkül). Alatta fogadd el a Google ÁSZF-ét és mehetünk tovább.
- A következő lépésben megkapjuk az oldalunk kulcsát (Site key) és a hozzá tartozó titkos kulcsot (Secret key) (modulos beállítás esetén fontosak). Alatta 1-1 sor kódot látunk: az első scriptet az oldalunk záró head tag-je elé kell tenni, a másodikat pedig abba a form-ba ahol a reCaptchát használni kívánjuk:
- Első kód: a script beültetése Prestashop 1.1.x.x – 1.6.x.x esetén: keresd meg FTP-n (vagy tárhelycommanderen/fájlkezelőn keresztül) a témád/templated/sablonod mappáját (/themes/tetémádneve/) azon belül pedig a header.tpl fájlt (példa:
/themes/default-bootstrap/header.tpl
) és keressünk rá a záró head tag-re (mondjuk a 71-es sor körül default-bootstrap téma esetén 1.6.x-ben): “</head>
“:
Majd itt a megtalált </head>
elé szúrjuk be a Google által adott első scriptet (Mentés/backup legyen a header.tpl
fájlról, ez minden módosításnál fontos!).
- Második kód: a reCaptcha beépítése az üzenetküldő form-ba Prestashop 1.1.x.x – 1.6.x.x esetén: keresd ki szintén a témád könyvtárában a
contact-form.tpl
fájlt, majd keress rá a “</form>
” szóra: a fenti “div”-el kezdődő kódsorodat pedig az elé illeszd be:
Természetesen a form-on belül ennek helye opcionális, illetve bármikor alakíthatod ennek kinézetét/helyzetét CSS-el. Tehát ha sikerült, akkor az alábbihoz hasonló eredményt kell kapj:
Fontos, hogy teszteld!
Ennyi volt a beépítés, nem volt nehéz, ugye? 🙂 Ezáltal megszűnnek a SPAM-ek és mindenki boldog. Sok sikert kívánok!
Kiegészítés (2018.02.16.):
A megfelelő hibaüzenet visszajelzése érdekében az alábbi útvonalon lévő controllert is módosítani kell (itt meg kell jegyeznem, hogy a spam-elést okozó robotok már akkor visszafordulnak az oldalról, ha érzékelik a recaptcha jelenlétét; ez a magyarázata annak, hogy ilyen aspektusból a fentiek is elegek lehetnek): /controllers/front/ContactController.php
A “postProcess()” function-ben a “$this->errors[] = Tools::displayError('Invalid email address.');
” sor után szúrjuk be az alábbi ellenőrzést:
} elseif (!($gcaptcha = (int)(Tools::getValue('g-recaptcha-response')))) {
$this->errors[] = Tools::displayError('Jelöld be alul, hogy nem vagy robot!');
Ahogy az alábbi képen is látszik (45-46. sor):
A kiegészítést nagyon köszönjük Kövesi Zoltánnak a Facebook csoportunkból!
Kiegészítés (2018.04.12): Prestashop 1.7 esetén
Javarészt ugyanúgy működik minden, csupán a fájlok helye változik illetve a recaptcha bejelölését ellenőrző kód hibajelzésének sora. Lássuk!
Header rész: /themes/témádneve/templates/_partials/header.tpl
Itt most nem fogunk találni lezáró head-et, egyszerűen csak dobd be a scriptet két block közé (tehát mondjuk az első “{/block}” utáni sorba).
Contact-form rész: itt ez már modulként funkcionál, tehát először a téma könyvtárán belül keressük a tpl-jét => /themes/témádneve/modules/contactform/views/templates/widget/contactform.tpl
Ha nincs, akkor a helyén: /modules/contactform/views/templates/widget/contactform.tpl
Ellenőrző rész: ez szintén a modul php-jének a feladata most már, nem a class-é, tehát itt keressük: /modules/contactform/contactform.php
Itt azonban érdemes egy picit módosított kódot beszúrni (hely ugyanaz: “Invalid email address” után):
} elseif (!($gcaptcha = (int)(Tools::getValue('g-recaptcha-response')))) {
$this->context->controller->errors[] = $this->trans('Jelöld be alul, hogy nem vagy robot!', array(), 'Shop.Notifications.Error');
A második sor változik: igazodik az 1.7 hiba visszajelző szintaktikájához illetve a fent látható módon bele lehet tenni a fordításokba is.
Frissítés 2021.08.19-én:
Pár nappal ezelőtt észleltük, hogy az 1.6-os, illetve korai 1.7-es verziókban visszatértek a contact-form-on keresztül érkező spam-ek. A változás annyi mindösszesen, hogy a feladó mind gmail-es, egyelőre csak pár óránként küldenek egyet (ez később nyilván szaporodni fog).
Tehát pár nappal ezelőtt bevetettek egy olyan spam-elő robotot, mely gmail-es küldővel átcsúszik a kettes verziójú (V2) Google ReCaptcha-n:
Küldési gyakoriság jelenleg V2-es ReCaptcha-val:
Kipróbáltuk a V3-as, azaz hármas verziójú ReCaptcha-t, de nem volt benne köszönet:
Most így visszaálltunk V2-re és keressük a megoldást.
Sajnos tudomásunk van olyan Prestashop-ról is, ahol pár nap alatt több ezer spam ment ki, ezért a Google lerontotta a domain reputációját:
Ami azt jelenti, hogy most minden egyes levél, melyet az adott domain-ről küldenek SPAM-be megy a GMAIL-ben:
És még csak nem is tudjuk, mi a következő lépés, a keresőóriás nem tud érdemben segíteni. Próbáljuk a domain reputációját legalább “medium”-ra visszaküzdeni, de egyelőre csak várni és reménykedni tudunk.
Köszi a segítséget! Jól jött a leírás, mert mostanában elég sok spam kontaktom van.
Remélem, hogy már csak múlt időben! 🙂
1.5, 1.6, 1.7 -hez is tökéletes, egyszerű és ingyenes! :
https://presta.site/prestashop-modules/24-contact-form-anti-spam-recaptcha-and-blacklist.html