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 😉
Haniu, trudno cokolwiek powiedzieć bez zajrzenia do kodu, ale wygląda na to, że gdzieś zrobiłaś błąd. To rozwiązanie przetestowałem na kilku wersjach Prestashop 1.6.x
Witam, fajnie prosto napisane poradziłam sobie spokojnie z tym że gdy wysyłam wiadomość wcale nie trzeba zaznaczyć kwadracika tylko wysyła nawet bez zaznaczenia 🙁
Jakiś błąd z mojej strony?
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.
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ć.
Strona /kontakt działa jak usunę kod
else if (!($gcaptcha = (int)(Tools::getValue(‚g-recaptcha-response’))))
$this->errors[] = Tools::displayError(‚Captcha not verified’);
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