SPAM z formularza kontaktowego PrestaShop 1.6

Spamerzy non stop kombinują jak tu wykorzystać do swoich niecnych celów formularze dostępne na stronach internetowych. Czyli jak zasypać innych wirtualnymi śmieciami.

Tak tak, śmieciami, ponieważ z reguły oferty spamerów tak mi pasują jak te w stylu „kup pan cegłę”. Kto nie wie skąd ten cytat polecam stare polskie kino „Ewa chce spać”. Niesamowite dialogi i warszawski slang.

Jest tam scenka z opryszkiem, który szkolony był jak odpowiednio podejść osobę na ulicy i niekoniecznie chodziło o podejście siłowe, czyli cegła nie stanowiła jedynego atutu. Liczyło się odpowiednie, kulturalne podejście do „klienta”. Opryszek bardzo elokwentnie przedstawił propozycję nie do odrzucenia: „Panie szanowny! Kup pan te cegłę! Odpalasz pan stówkę ocalasz pan główkę!”. Czyli dobijając do brzegu, chodzi mi o to, że oferta spamerów jest mi całkiem zbyteczna, tylko tracę czas na odgruzowanie poczty ze śmieci.

Tym razem spamerzy wykorzystali brak zabezpieczeń w domyślnym formularzu kontaktowym sklepu internetowego opartego o silnik PrestaShop 1.6. Poskutkowało to masowym otrzymywaniem syfu pisanego głównie w cyrylicy.
Rozwiązanie, znalezione na oficjalnym anglojęzycznym forum wsparcia PrestaShop jest proste do zaimplementowania.

1. Wchodzimy do usługi Google reCaptcha. Aby z niej za darmo skorzystać należy posiadać konto w usługach Google.

2. Dodajemy tam naszą domenę i generujemy dwa klucze, czyli ciągi znaków.

3. Do nagłówka strony, czyli do pliku header.tpl w naszym szablonie, dodajemy tuż przed </head> następujący kod:

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

4. W szablonie contact-form.tpl przed </form> wstawiamy:

<div class="g-recaptcha" data-sitekey="[public Google key]"></div>

Uwaga! Należy wpisać klucz publiczny wygenerowany w usłudze reCaptcha w miejscu: [public Google key]

5. Na końcu otwieramy plik:
/controllers/front/ContactController.php

po linii:

$this->errors[] = Tools::displayError('Bad file extension');

wklejamy kod:

else if (!($gcaptcha = (int)(Tools::getValue('g-recaptcha-response')))) $this->errors[] = Tools::displayError('Captcha not verified');

Dla pewności jak on powinien wyglądać po wklejeniu podaję większy fragment kodu z pogrubieniem nowego:

else if (!empty($fileAttachment['name']) && !in_array( Tools::strtolower(substr($fileAttachment['name'], -4)), $extension) && !in_array( Tools::strtolower(substr($fileAttachment['name'], -5)), $extension)) $this->errors[] = Tools::displayError('Bad file extension'); else if (!($gcaptcha = (int)(Tools::getValue('g-recaptcha-response'))))  $this->errors[] = Tools::displayError('Zaznacz ptaka, że nie jesteś spamerem :-)'); else {

To wszystko, formularz jest zabezpieczony, a ruskije partizanty muszą kombinować gdzie indziej. Mogą na przykład zająć się szkoleniem gołębi na pucybuty.
No co? Jakoś trzeba było wytłumaczyć dołączone zdjęcie ;-)

3 marca 2018, Tomasz Bartosiewicz, komentarze 4

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

4 myśli nt. „SPAM z formularza kontaktowego PrestaShop 1.6”

  1. Dobry artykuł. Podobno roboty potrafią już ominąć reCaptcha, jednak nie jest to jeszcze tak powszechne i w większości przypadków spełnia oczekiwania.

  2. Kurza burza! A to niespodzianka,
    nie zauważyłem, że WordPress zmienia apostrofy oraz cudzysłowia na inne jakieś znaki.
    Już poprawiłem, przepraszam za niedopatrzenie i dzięki Ewelino za odzew.
    Teraz powinno działać, jeśli kod wkleisz dokładnie tak jak jest podany.
    Dorzuciłem jeszcze większy kawałek kodu do podglądu, jak to dokładnie ma wyglądać.

  3. Strona /kontakt działa jak usunę kod

    else if (!($gcaptcha = (int)(Tools::getValue(‚g-recaptcha-response’))))
    $this->errors[] = Tools::displayError(‚Captcha not verified’);

  4. hej, wszystko zrobione tak jak napisane w artykule, a po wejściu na podstronę /kontakt mam komunikat

    Ta strona nie działa
    Serwer xxxx nie może teraz obsłużyć tego żądania.

    Presta 1.6.1.8

    gdzie mogę mieć problem ?
    Pozdrawiam