Data

12.06.2018

Autor wpisu

Tomasz Jeziorski

Tomasz Jeziorski

Uciążliwy spam to wróg numer jeden każdego użytkownika. Ostatnio z tym problemem zmagały się zwłaszcza sklepy internetowe oparte na systemach PrestaShop – ich panele pełne były wiadomości pochodzących z tajemniczych domen. Ten kłopot dotknął także Ciebie? Spokojnie! W tym artykule zdradzimy metody, jakie podjęliśmy w celu skutecznego rozprawienia się z problemem. Oto nasze rezultaty – podzieliliśmy je na te, które nie zadziałały oraz te, które w mig rozprawiły się ze spamem. Zaczynamy!

PrestaShop a spam

Na sam początek wyjaśnijmy wszystkie tajemnice. Pod określeniem PrestaShop kryje się rodzaj oprogramowania typu OpenSource, na którym w głównej mierze stawiamy sklepy internetowe dla naszych Klientów. Od stycznia tego roku zauważyliśmy wzmożone spamerskie maile, najczęściej z domeny mail.ru. Praktycznie co 1h w panelu pojawiał się kolejny mail – i to na każdym sklepie, niezależnie od branży, stopnia widoczności w Google, czy stażu w internecie. Dochodziły nas nawet słuchy, że ma to związek z nachodzącym RODO 🙂

SPAM w PrestaShop 1.6

Przykład spamerskiego maila – PrestaShop 1.6

W efekcie maile napływały, a spam się szerzył. Z czasem stało się jasne – trzeba temu położyć kres, i to jak najszybciej.

Gdzie leżał problem?

Na początek ustalmy, gdzie była luka i skąd owe maile były wysyłane. Po szybkiej ocenie sytuacji, stało się jasne, że problemem jest wbudowany, domyślny formularz kontaktowy, najczęściej używany na podstronie kontakt – to właśnie on zawierał niedociągnięcia. Postanowiliśmy się więc rozprawić z tym problemem.
Oto sposoby, których próbowaliśmy – a które nie przyniosły zamierzonego efektu.

1. Pierwsza myśl – skoro maile spływały z Rosji, na co wskazywały końcówki maili jak .ru, to po prostu wyłączmy sklep dla wszystkich geolokalizacji poza Polską. Nic prostszego, prawda? Cała operacja nie wpłynęłaby oczywiście negatywnie na obroty sklepów, gdyż wszystkie one sprzedawały tylko i wyłącznie w Polsce. W panelu admina Presty (Lokalizacja- Kraje) odznaczyliśmy więc wszystkie pola, zostawiliśmy tylko opcję PL i czekaliśmy na efekty… które zwyczajnie nie nadeszły. No nic, walczmy dalej!
2. adencja kontra SPAM podejście drugie polegało na dopisaniu w pliku httaccess blokady na rosyjskie IP. Niestety, jak łatwo się domyślić, efekty nadal były mizerne, a raczej – nie było ich wcale.
3. Bam! Za trzecim razem postanowiliśmy dodać recaptcha – trochę utrudni (dodatkowe pole do wpisania) to normalnym użytkownikom wysłanie formularza, ale przynajmniej zabezpieczy przed spamem. Zainstalowaliśmy zatem zgodnie z instrukcją (link) wtyczkę do recaptcha oraz dodaliśmy wymagane kody z Google. Pięknie – pojawiło się pole w formularzu, tyle, że spam napływał dalej!

Jak to możliwe? Zaczęliśmy przeszukiwać fora, blogi i…

Skuteczny sposób – dla PrestaShop 1.6

W końcu udało nam się znaleźć metodę, która skutecznie zablokowała spam. Natrafiliśmy na nią pod tym linkiem. Jesteś ciekaw, jak udało nam się to osiągnąć?
Do rzeczy – oto nasz przepis na spamowy problem:

  • Łączymy się z serwerem ftp, gdzie mamy podstawiony nasz sklep,
  • Przechodzimy do folderu controllers/front/ i pobieramy plik ContactController.php
  • W powyższym pliku dopisujemy w podanych niżej liniach adekwatne kody:
    linia 39 - $saveContactKey = $this->context->cookie->contactFormKey;
    linia 43 - $url = Tools::getValue('url');
    linia 56 - } elseif ($url === false || !empty($url) || $saveContactKey != (Tools::getValue('contactKey'))) {
    linia 57 - $this->errors[] = Tools::displayError('An error occurred while sending the message.');
    linia 254 - $contactKey = md5(uniqid(microtime(), true));
    linia 255 - $this->context->cookie->__set('contactFormKey', $contactKey);
    linia 259 - kasujemy aktualny kod: 'message' => html_entity_decode(Tools::getValue('message'))
    linia 259 - a zamiast tego dopisujemy: 'message' => html_entity_decode(Tools::getValue('message')),
    linia 260 - 'contactKey' => $contactKey,

    Adekwatnie jak w instrukcji pod linkiem – https://github.com/PrestaShop/PrestaShop/pull/8168/commits/1482acec6e91a6e694b9638d42ac69be391dd7fc#diff-9f74ddb2868069458f5a9537e3b05431R59M
    SPAM w PrestaShop 1.6

  • Następnie zapisujemy plik i nadpisujemy go na serwerze ftp (warto zrobić kopię pierwotnego pliku w razie W). Pierwszy etap za nami. Przechodzimy do drugiego.
  • Wchodzimy do folderu themes/nazwa-szablonu/contact-form.tpl – gdzie nazwa-szablonu to używany aktualnie szablon Presta. Edytujemy plik i tak:
    pod linią kodu

    <div class="submit"> (linia około 148)

    dopisujemy:

    <input class="hidden" name="url" type="text" value="" />
    <input name="contactKey" type="hidden" value="{$contactKey}" />
    
  • Zapisujemy i adekwatnie jak z pierwszym plikiem, nadpisujemy go na serwerze ftp (warto zrobić kopię pierwotnego pliku w razie W).

I… gotowe! Ta metoda skutecznie zablokowała spamerskie maile we wszystkich naszych sklepach na PrestaShop (wersja 1.6). Jak to mówi klasyk – no more drama. And Spam, można rzec.

W adencji nie lubimy dobrych wiadomości zostawiać tylko i wyłącznie dla siebie. Z tego powodu dzielimy się zdobytą wiedzą oraz doświadczeniem i mamy nadzieje, że artykuł pomoże Wam pozbyć się niechcianych wiadomości z panelu Presta!

W razie dodatkowych pytań, piszcie śmiało na biuro@adencja.pl

#No more spam!