Biztonság

SPAM regisztrációk Prestashop-ban

A cikk eredeti megjelenése: 2019. április 23. – a PrestaShop azóta sokat változott. Az elvek ma is hasznosak lehetnek, de a lépések a mai (8.x, 9.x) verzióknál eltérhetnek. Kérdezz bátran!

Ma virradóra megjelentek az alábbi nevekkel leadott regisztrációk több Prestashop-ban is:

  • Rita and Carmen waiting
  • Aria and Lisa waiting
  • Evelyn and Katie waiting
  • Cathy and Regina waiting

És még sokan mások is várnak:

Mire is várnak?

Másodlagos névnek (keresztnév) viszont már nem nevet ad meg a robot hanem egy linket, melyre kattintva vírusos, pornós-viagrás oldalra vezetnek bennünket. Rita és Carmen csak arra várnak, hogy felvedd velük a kapcsolatot a megadott url-en keresztül. 😀

Megoldás

Az „Orosz szerelmes levelek – recaptcha!” cikkem alapján kell ebben az esetben is eljárni. Ha még nem olvastad el, akkor pótold kérlek. Ha pedig túl vagy a Google ReCaptcha kódjának beépítésén, akkor nézzük meg hogyan tudod implementálni ezt a regisztrációs form-ba.

Prestashop 1.6

Nyissuk meg a témán belüli authentication.tpl-t, majd a fenti cikkből már megismert

<div class="g-recaptcha" data-sitekey="IDE_A_TE_EGYEDI_AZONOSITOD_JON"></div>

Recaptcha sort tegyük be a submit (a regisztrációs elküldő gomb) fölé vagy alá. A lényeg, hogy a form-on belül maradjunk. Példa itt látható (648. sor körül):

Persze ha többnyelvű shopot használsz akkor a g-recaptcha div-es sor fölé általunk elhelyezett magyarázó szöveget megírhatod l s -ben is:

<p style="font-weight: 900;color: #333;padding-bottom: 5px;">{l s='Please confirm you are not a robot!'}</p>

Fontos megjegyezni, hogy a regisztráció esetében nem, vagy nem mindig olvassa be a Prestashop a header.tpl-be tett javascript-et, így kivételesen ennek az authentication.tpl-nek az elejébe is tedd be a header.tpl-ben már bent lévő ReCaptcha-hívó scriptet:

<script src='https://www.google.com/recaptcha/api.js'></script>

Jön az ellenőrzés: nyisd meg a /controllers/front/AuthController.php-t (nézd meg, hogy override-olva van-e már esetleg), majd a 409. sor körüli „Preparing customer” után lévő ellenőrzéshez tegyük be az alábbi kódot:

} elseif (!($gcaptcha = (int)(Tools::getValue('g-recaptcha-response')))) {
$this->errors[] = Tools::displayError('Kérlek jelöld be alul, hogy nem vagy robot!');
}

Valahogy ekképp:

Ha kész, mindent mentsünk el és próbáljuk ki működik-e:

Kiegészítés

Ha az 1.6-osodban aktív az egyoldalas rendelés, illetve azon belül a vendégként való rendelés akkor még szükség van 2 fájl módosítására. Az egyik a vendégrendelés tpl-je: /themes/TÉMÁDNEVE/order-opc-new-account.tpl. Nyisd meg, és a {$HOOK_CREATE_ACCOUNT_FORM} után (valahol a 324-es sor környékén) szúrd be az authentication.tpl-nél már megismert sort:

<div class="g-recaptcha" data-sitekey="IDE_A_TE_EGYEDI_AZONOSITOD_JON"></div>

A másik fájl az egyoldalas rendelés során adatokat küldő-fogadó javascript: /themes/TÉMÁDNEVE/js/order-opc.js. Itt találni fogsz a 174. sor körül paramétereket. Ide tegyük be a miénket!

params += 'g-recaptcha-response='+encodeURIComponent($('#g-recaptcha-response').val())+'&';

Modul megoldás

Persze vannak olyan modulok melyek ezt a feladatot ellátják helyettünk. Ilyenek például:

https://addons.prestashop.com/en/website-security-access/18478-re-captcha-anti-spam-recaptcha.html

https://addons.prestashop.com/en/secure-payment-prestashop-modules/26997-captcha.html

https://addons.prestashop.com/en/website-security-access/26035-knowband-google-recaptcha.html

Prestashop 1.7

EgyPontHetes esetében az alábbi fájlt nyisd meg ahhoz, hogy a g-recaptcha-s linket be tudd tenni:

/themes/TÉMÁDNEVE/templates/customer/_partials/customer-form.tpl

Ezen belül pedig meghatározhatod, hogy a form-on belül hová teszed. Mi így oldottuk meg:

<div class="g-recaptcha" data-sitekey="IDE_A_TE_EGYEDI_AZONOSITOD_JON"></div>

Jön az ellenőrzés:

/classes/form/CustomerForm.php

A validate function-ön belül (~105. sortól kezdődik) az e-mail és a birthday ellenőrzése után szúrjuk be ezt:

$gcaptcha = (int)(Tools::getValue('g-recaptcha-response'));
$gcaptchaField = $this->getField('email');
if ($gcaptcha == 0) {
$gcaptchaField->addError($this->translator->trans(
'Kérlek jelöld be alul, hogy nem vagy robot!', array(), 'Shop.Notifications.Error'
));
}

Képen:

Majd próba 🙂

Puizl Attila

PrestaShop fejlesztő · Hivatalos PrestaShop Nagykövet

17 éve készítek, fejlesztek és tartok karban PrestaShop webáruházakat. Több száz hazai és külföldi webshop viseli a kézjegyem, és 2010 óta segítek a magyar PrestaShop közösségben.

Bemutatkozás és ügyfélvélemények →

Szólj hozzá!

Az e-mail címed nem jelenik meg. A hozzászólások jóváhagyás után válnak láthatóvá. Részletek: Adatkezelési tájékoztató.