Jump to content

Ataki mailowe na Prestę - poradnik re-captcha


magisterson

Recommended Posts

W związku z nasilającymi się atakami na sklepy prestashop w Polskim internecie (głównie zaobserowaliśmy te ataki na serwerach nazwa.pl) chcę napisać mini poradnik dla wszystkich których ten problem dotyczy. Boty korzystają z formularza kontaktowego w sklepie. Rozwiązaniem może być instalacja darmowej re-captcha od Google. Jest kilka pluginów do tego, ale po co płacić 50 zł jak można to zrobić w kilka sekund samemu. A więc:

1. wchodzimy na: KLIK i klikamy GET recaptcha u góry po prawej

2. w oknie "register new site" wpisujemy w LABEL: co chcecie np. nazwe waszej strony, ponizej wybieramy "RECAPTCHA V2" w "domains" wpisujemy adres sklepu czyli np. mojsklep.pl (bez prefiksów www, http itp.)

3. klikamy REGISTER

4. Przechodzimy do FTP naszego sklepu a konkretniej do pliku /themes/nazwa-szablonu/header.tpl

5. odnajdujemy zamykający </head> i tuż nad nim wklejamy:

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

6. zapisujemy i podmieniamy plik na serwerze (czyścimy cache - lub nie - zależnie od ustawień sklepu)

7. Przechodzimy do pliku contact-form.tpl (który jest w tym samym folderze co header.tpl)

odnajdujemy fragment kodu: 

<div class="submit">
				<button type="submit" name="submitMessage" id="submitMessage" class="button btn btn-default button-medium"><span>{l s='Send'}<i class="icon-chevron-right right"></i></span></button>
			</div>

i tuż nad nim wklejamy: 

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

Gdzie KOD-CAPTCHA to wasz unikatowy numer (czyli jest to w skrócie kod z punktu 1 na stronie re-captcha)

8. zapisujemy, nadpisujemy na serwerze i czyścimy cache (tak jak powyżej przy pliku header)

9. Przechodzimy do /controllers/front/ContactController.php - otwieramy plik i szukamy:

$this->errors[] = Tools::displayError('Invalid email address.');

Tuż za wklejamy:

// start kodu
} elseif (!($gcaptcha = (int)(Tools::getValue('g-recaptcha-response')))) {
$this->errors[] = Tools::displayError('Captcha error');
// koniec kodu

10. zapisujemy, wrzucamy na serwer aby podmienić

 

Teraz recaptacha powinna działać, a boty nie powinny wam zagrażać.
Dodatkowo możecie prześledzić logi serwera i zablokować w pliku .htaccess podejrzane adresy IP

  • Like 2
Link to comment
Share on other sites

Fajnie, że ktoś zrobił poradnik, chciałbym jednak dodać, że to sprawdzenie:

// start kodu
} elseif (!($gcaptcha = (int)(Tools::getValue('g-recaptcha-response')))) {
$this->errors[] = Tools::displayError('Captcha error');
// koniec kodu

musi być odrobinę dokładniejsze, potrzebujemy sprawdzenia po stronie Google czy odpowiedź od modułu captcha jest prawidłowa bo inaczej atakujący mogą dodać jakąkolwiek wartość liczbową dla g-recaptcha-response i w zasadzie rozwiązanie leży.

Tutaj krótki snippet sprawdzania poprawności odpowiedzi:

$url = 'https://www.google.com/recaptcha/api/siteverify';
$data = array(
    'secret' => 'xxxx_SECRET_KEY_Xxxx',
    'response' => $_POST["g-recaptcha-response"]
);
$query = http_build_query($data);
$options = array(
    'http' => array (
        'header' => "Content-Type: application/x-www-form-urlencoded\r\n"."Content-Length: ".strlen($query)."\r\n"."User-Agent:RecaptchaTimetrend/1.0\r\n",
        'method' => 'POST',
        'content' => $query
    )
);
$context  = stream_context_create($options);
$verify = file_get_contents($url, false, $context);
$captcha_success = json_decode($verify, true);

if (!$captcha_success['success']) {
    $this->context->controller->errors[] = 'Prosimy o zaznaczenie zabezpieczenia Captcha';
}

 

  • Like 1
Link to comment
Share on other sites

Dzięki za szybką odpowiedź. Czym prędzej sobie z tym poradzimy tym lepiej. Czyli kod który podałeś:

$url = 'https://www.google.com/recaptcha/api/siteverify';
$data = array(
    'secret' => 'xxxx_SECRET_KEY_Xxxx',
    'response' => $_POST["g-recaptcha-response"]
);
$query = http_build_query($data);
$options = array(
    'http' => array (
        'header' => "Content-Type: application/x-www-form-urlencoded\r\n"."Content-Length: ".strlen($query)."\r\n"."User-Agent:RecaptchaTimetrend/1.0\r\n",
        'method' => 'POST',
        'content' => $query
    )
);
$context  = stream_context_create($options);
$verify = file_get_contents($url, false, $context);
$captcha_success = json_decode($verify, true);

if (!$captcha_success['success']) {
    $this->context->controller->errors[] = 'Prosimy o zaznaczenie zabezpieczenia Captcha';
}

dodajemy zamiast tego z mojego posta? W którym miejscu?

Link to comment
Share on other sites

W tym momencie nie mogę ale zaktualizuje temat o odpowiedni plik zarówno dla PrestaShop 1.6 jak i PrestaShop 1.7 z naniesionymi zmianami i wstawie screenshoty jaki kod doszedł. Zrobię to za kilka godzin.

Generalnie kod, który wkleiłeś też powinien zostać bo gdy captchy nie ma to powinniśmy zwrócić błąd, ten ode mnie powinien być dalej gdzie zweryfikujemy czy jest poprawny jeżeli istnieje :)

Link to comment
Share on other sites

Dzieki wielkie za przesłanie rozwiązania. Ostatnio dostałem 1500 wiadomości.

Chciałem dylko dopytać czy caly kod ma wygladac dokladnie w ten sposob.

} elseif (!($gcaptcha = (int)(Tools::getValue('g-recaptcha-response')))) {
$this->errors[] = Tools::displayError('Captcha error');
$url = 'https://www.google.com/recaptcha/api/siteverify';
$data = array(
    'secret' => 'xxxx_SECRET_KEY_Xxxx',
    'response' => $_POST["g-recaptcha-response"]
);
$query = http_build_query($data);
$options = array(
    'http' => array (
        'header' => "Content-Type: application/x-www-form-urlencoded\r\n"."Content-Length: ".strlen($query)."\r\n"."User-Agent:RecaptchaTimetrend/1.0\r\n",
        'method' => 'POST',
        'content' => $query
    )
);
$context  = stream_context_create($options);
$verify = file_get_contents($url, false, $context);
$captcha_success = json_decode($verify, true);

if (!$captcha_success['success']) {
    $this->context->controller->errors[] = 'Prosimy o zaznaczenie zabezpieczenia Captcha';
}
Link to comment
Share on other sites

No tak, ale to nadal jest to co opisałem w pierwszym poscie, a Krystian zaproponował jeszcze:

 

$url = 'https://www.google.com/recaptcha/api/siteverify';
$data = array(
    'secret' => 'xxxx_SECRET_KEY_Xxxx',
    'response' => $_POST["g-recaptcha-response"]
);
$query = http_build_query($data);
$options = array(
    'http' => array (
        'header' => "Content-Type: application/x-www-form-urlencoded\r\n"."Content-Length: ".strlen($query)."\r\n"."User-Agent:RecaptchaTimetrend/1.0\r\n",
        'method' => 'POST',
        'content' => $query
    )
);
$context  = stream_context_create($options);
$verify = file_get_contents($url, false, $context);
$captcha_success = json_decode($verify, true);

if (!$captcha_success['success']) {
    $this->context->controller->errors[] = 'Prosimy o zaznaczenie zabezpieczenia Captcha';
}

 

Link to comment
Share on other sites

  • 2 weeks later...
  • 1 month later...

Tak wygląda połączenie obu kodów, które należy wkleić. U mnie w PS 1.6.1.4 działa, podłożenie jakiejkolwiek wartości w odpowiedzi również wywala błąd Captcha - plik, na którym pracowałem (ContactController.php) znajdował się w root/controllers/front/ContactController.php

Pozostałe kroki zgodnie z intrukcją zamieszczoną i spolszczoną przez kolegę magisterson.

 

				// add the 2 lines from here
 } elseif (!($gcaptcha = (int)(Tools::getValue('g-recaptcha-response')))) {
 $this->errors[] = Tools::displayError('Captcha error');
 $url = 'https://www.google.com/recaptcha/api/siteverify';
$data = array(
    'secret' => 'KOD Z REJESTRACJI GOOGLE RECAPTCHA',
    'response' => $_POST["g-recaptcha-response"]
);
$query = http_build_query($data);
$options = array(
    'http' => array (
        'header' => "Content-Type: application/x-www-form-urlencoded\r\n"."Content-Length: ".strlen($query)."\r\n"."User-Agent:RecaptchaTimetrend/1.0\r\n",
        'method' => 'POST',
        'content' => $query
    )
);
$context  = stream_context_create($options);
$verify = file_get_contents($url, false, $context);
$captcha_success = json_decode($verify, true);

if (!$captcha_success['success']) {
    $this->context->controller->errors[] = 'Prosimy o zaznaczenie zabezpieczenia Captcha';
}
						// to here

 

Link to comment
Share on other sites

Kurowski - czy przedstawiony przez Ciebie powyższy kod nie wyświetla czasem podwójnego komunikatu o braku zaznaczenia captcha?
Mam na myśli konkretnie te linijki kodu:

$this->context->controller->errors[] = 'Prosimy o zaznaczenie zabezpieczenia Captcha';
$this->errors[] = Tools::displayError('Captcha error');
Edited by Slizeer (see edit history)
Link to comment
Share on other sites

Zastanawiam się, czy twórcy presty w głównych ustawieniach nie powinni dodać pola do wartości PS_RECAPTCHA_SECRET_KEY oraz PS_RECAPTCHA_SITE_KEY w których można by było wpisać te wartości i łatwiej integrać recaptchę w modułach. 

Link to comment
Share on other sites

W załączniku udostępniam łatkę która robi prostą integracje recaptcha z formularzem kontaktowym.

Zawartość paczki należy skopiować na serwer. Nadpisywania w sklepie muszą być włączone, trzeba wyczyścić cache/usunąc plik class_index.php z folderu cache.

Klucze recaptcha wpisujemy w panelu admina w Klienci->Biuro Obsługi Klienta, w sekcji Opcje Kontaktu.

Łatka była robiona dla wersji 1.6.1.18,  w starszych wersjach chyba też powinna działać

recaptcha-integracja.zip

 

  • Like 1
Link to comment
Share on other sites

On 22.03.2018 at 12:36 PM, atomek said:

W załączniku udostępniam łatkę która robi prostą integracje recaptcha z formularzem kontaktowym.

Zawartość paczki należy skopiować na serwer. Nadpisywania w sklepie muszą być włączone, trzeba wyczyścić cache/usunąc plik class_index.php z folderu cache.

Klucze recaptcha wpisujemy w panelu admina w Klienci->Biuro Obsługi Klienta, w sekcji Opcje Kontaktu.

Łatka była robiona dla wersji 1.6.1.18,  w starszych wersjach chyba też powinna działać

recaptcha-integracja.zip

 

 

Czy mam wejść w to miejsce aby wpisać teraz kody re captcha? (secret key? czy Site key ?) 

Ponieważ po usunięciu pliku z folderu cache, po wejściu w wiele zakładek w panelu admina nie moge wyswietlić strony

presta.png

Edited by IGD (see edit history)
Link to comment
Share on other sites

11 godzin temu, IGD napisał:

 

Czy mam wejść w to miejsce aby wpisać teraz kody re captcha? (secret key? czy Site key ?) 

Ponieważ po usunięciu pliku z folderu cache, po wejściu w wiele zakładek w panelu admina nie moge wyswietlić strony

presta.png

 

Pola do wpisania kluczy powinny się pojawić w "Klienci -> Biuro obsługi klienta", tak jak na obrazku poniżej.

5ab89a6534d50_BiuroObsugiKlienta-Testowy.thumb.png.2b108d5c8b85e46ef3ae6af5df3dc3ea.png


Zobacz czy w Parametry zaawansowane -> Wydajność masz włączone nadpisywania. Opcje "Wyłącz wszystkie nadpisywania" ustaw na "Nie".
Na górze strony jest guzik "Wyczyść pamięć podręczna" - możesz też to zrobić.

 

Link to comment
Share on other sites

6 minutes ago, atomek said:

 

Pola do wpisania kluczy powinny się pojawić w "Klienci -> Biuro obsługi klienta", tak jak na obrazku poniżej.

5ab89a6534d50_BiuroObsugiKlienta-Testowy.thumb.png.2b108d5c8b85e46ef3ae6af5df3dc3ea.png


Zobacz czy w Parametry zaawansowane -> Wydajność masz włączone nadpisywania. Opcje "Wyłącz wszystkie nadpisywania" ustaw na "Nie".
Na górze strony jest guzik "Wyczyść pamięć podręczna" - możesz też to zrobić.

 

 

 

 

Sprawdzałem, miałem ustawione na 'nie' i usunąłem pamieć podręczna. Wciąż nie mam w zakładce klienta 'Biuro Obsługi Klienta' 

prrr.png

Link to comment
Share on other sites

Just now, atomek said:

Jak wygląda u Ciebie teraz strona "Biuro obsługi klienta"? Podeślij zrzut ekranu.

Gdzie skopiowałeś zawartość paczki? Do jakich folderów?

 

Pliki nadpisywałem za kazdym razem idąc po folderach ktore byly w archiwum

Sęk w tym że nie mam w liscie 'Biuro obsługi klienta' tylko stare 'Obsluga klienta'

podczas próby otwarcia 'Obsluga klienta' pokazuje mi sie strona :

Ta strona nie działa

Serwer jkbygg.webd.pl nie może teraz obsłużyć tego żądania.

HTTP ERROR 500
Link to comment
Share on other sites

A konkretnie do jakich folderow?

Plik z paczki: override\controllers\admin\AdminCustomerThreadsController.php powinien trafić do /override/controllers/admin/AdminCustomerThreadsController.php

Plik z paczki: override\controllers\front\ContactController.php powinien trafić do override/controllers/front/ContactController.php


Po prostu skopiuj cały folder override do głównego folderu Twojego sklepu na serwerze.


Jeżeli nadpisałeś te pliki w folderze /controllers, to musisz przywrócić ich oryginalne wersje.

Link to comment
Share on other sites

15 minutes ago, atomek said:


Jeżeli nadpisałeś te pliki w folderze /controllers, to musisz przywrócić ich oryginalne wersje.

 

Ok wiec tak, napewno pliki trafiły do odpowiednich folderów, tylko teraz nie rozumiem dlaczego zalecasz przywrócić oryginalne pliki skoro wyżej polecasz je nadpisać plikami  z archiwum ?

Link to comment
Share on other sites

5 minut temu, IGD napisał:

 

Ok wiec tak, napewno pliki trafiły do odpowiednich folderów, tylko teraz nie rozumiem dlaczego zalecasz przywrócić oryginalne pliki skoro wyżej polecasz je nadpisać plikami  z archiwum ?

Napisałem Jeżeli...
Nie wiem gdzie te pliki skopiowałeś, nie podałeś lokalizacji.

Zwróć uwagę na ścieżki.

Link to comment
Share on other sites

19 minutes ago, atomek said:

Napisałem Jeżeli...
Nie wiem gdzie te pliki skopiowałeś, nie podałeś lokalizacji.

Zwróć uwagę na ścieżki.

 

 

Ok rozumiem, więc pliki skopiowane są do odpowiednich folderów i mimo to nie mogę wejść do zakładki 'Biuro obsługi klienta'

 

Link to comment
Share on other sites

  • 2 weeks later...
Dnia 22.03.2018 o 12:36 PM, atomek napisał:

W załączniku udostępniam łatkę która robi prostą integracje recaptcha z formularzem kontaktowym.

Zawartość paczki należy skopiować na serwer. Nadpisywania w sklepie muszą być włączone, trzeba wyczyścić cache/usunąc plik class_index.php z folderu cache.

Klucze recaptcha wpisujemy w panelu admina w Klienci->Biuro Obsługi Klienta, w sekcji Opcje Kontaktu.

Łatka była robiona dla wersji 1.6.1.18,  w starszych wersjach chyba też powinna działać

recaptcha-integracja.zip

 

Cześć,

mam wersje 1.7.2.4, skopiowałem Twoje pliki, nadpisywania ustawiłem jak napisałeś, w menu "Obsługa klienta" wypełniłem oba pola z kluczami recaptcha, niestety w formularzu kontaktowym captcha się nie pojawiła ale przy próbie wysłania wiadomości przez niego wyrzuca mi

  • Captcha error!!!
  • Captcha error

co zrobiłem źle ?

przez święta miałem kilkadziesiąt wiadomości wszystkie z domen *.ru, musze szybko coś z tym zrobić :/

 

Link to comment
Share on other sites

30 minut temu, Tra napisał:

Cześć,

mam wersje 1.7.2.4, skopiowałem Twoje pliki, nadpisywania ustawiłem jak napisałeś, w menu "Obsługa klienta" wypełniłem oba pola z kluczami recaptcha, niestety w formularzu kontaktowym captcha się nie pojawiła ale przy próbie wysłania wiadomości przez niego wyrzuca mi

  • Captcha error!!!
  • Captcha error

co zrobiłem źle ?

przez święta miałem kilkadziesiąt wiadomości wszystkie z domen *.ru, musze szybko coś z tym zrobić :/

 

Zakładam że wszystko zrobiłeś dobrze. Łatka była robiona dla wersji 1.6, w Prescie 1.7 działać chyba nie będzie (bez przeróbek).

Link to comment
Share on other sites

  • 1 month later...
Dnia 3.04.2018 o 1:44 PM, atomek napisał:

Zakładam że wszystko zrobiłeś dobrze. Łatka była robiona dla wersji 1.6, w Prescie 1.7 działać chyba nie będzie (bez przeróbek).

Posiadam wersję 1.6.1.18 i u mnie jest analogiczny problem.

Captcha error!!!
Captcha error

 

Przy zapisywaniu kluczy pojawia się komunikat 

IMAP configuration is not correct

Link to comment
Share on other sites

1 godzinę temu, Jacek napisał:

Posiadam wersję 1.6.1.18 i u mnie jest analogiczny problem.

Captcha error!!!
Captcha error

 

Przy zapisywaniu kluczy pojawia się komunikat 

IMAP configuration is not correct

Spróbuj podmienić plik /override/controllers/front/ContactController.php na ten z załącznika.

Komunikat "IMAP configuration is not correct" to chyba taki urok presty, na czystej wersji też to występuje.

ContactController.zip

 

  • Like 1
Link to comment
Share on other sites

5 godzin temu, atomek napisał:

Spróbuj podmienić plik /override/controllers/front/ContactController.php na ten z załącznika.

Komunikat "IMAP configuration is not correct" to chyba taki urok presty, na czystej wersji też to występuje.

ContactController.zip

 

Po zamianie pojawia się jeden błąd - Captcha error

Nadal nie wyświetla się re-captcha.

Link to comment
Share on other sites

1 godzinę temu, Jacek napisał:

Po zamianie pojawia się jeden błąd - Captcha error

Nadal nie wyświetla się re-captcha.

W paczce recaptcha-integracja.zip jest folder __TWOJ_SZABLON__, w nim jest plik contact-form.tpl. Co z tym plikiem zrobiłeś?

Plik należy przekopiować do folderu gdzie znajduje się Twój szablon (zostanie nadpisany) - dla standardowej skórki presty 1.6 to /themes/default-bootstrap. Nie wiem z jakiego szablonu korzystasz, u Ciebie może być inaczej.

Nie musisz nadpisywać swojego pliku, wystarczy że wprowadzisz zmiany tak jak w pliku z załącznika - są w nim opisane.

Wymuś kompilacje szablonu.

W razie problemów włącz tryb debugowania.

 

  • Like 1
Link to comment
Share on other sites

  • 7 months later...

Witam, u mnie jest problem w wersji: 1.6.0.9 gdy edytuję plik ContactController.php w każdej opcji lokalizacji, a nawet jak go podmienię na ten z załączników waszych. Błąd na screenie. Wypluwa zakładkę kontakt. W wersji wyższej na innym sklepie działa poprawnie. Błąd chyba wywala to: 

 

// add the 2 lines from here
 } elseif (!($gcaptcha = (int)(Tools::getValue('g-recaptcha-response')))) {
 $this->errors[] = Tools::displayError('Captcha error');
// to here

// add the 2 lines from here
 } elseif (!($gcaptcha = (int)(Tools::getValue('g-recaptcha-response')))) {
 $this->errors[] = Tools::displayError('Captcha error');
// to here

Pomocy ;) 

Bez tytułu.png

Edited by luka89waw1 (see edit history)
Link to comment
Share on other sites

  • 1 month later...
On 3/22/2018 at 12:36 PM, atomek said:

W załączniku udostępniam łatkę która robi prostą integracje recaptcha z formularzem kontaktowym.

Zawartość paczki należy skopiować na serwer. Nadpisywania w sklepie muszą być włączone, trzeba wyczyścić cache/usunąc plik class_index.php z folderu cache.

Klucze recaptcha wpisujemy w panelu admina w Klienci->Biuro Obsługi Klienta, w sekcji Opcje Kontaktu.

Łatka była robiona dla wersji 1.6.1.18,  w starszych wersjach chyba też powinna działać

recaptcha-integracja.zip

 

Dzięki. Pięknie śmiga

Link to comment
Share on other sites

  • 1 month later...

Wszystko ładnie pięknie formularz zabezpieczony maile przestały przychodzić ale ... teraz jakieś boty zaczęły zakładać nowe konta w przez funkcję rejestracji. Próbowałem dodać jedynie linijkę kodu:

<div class="g-recaptcha" data-sitekey="TWÓJ KOD"></div>

do pliku authentication.tpl, coś nie działa moduł wyświetla się jedynie po dodaniu kodu na końcu pliku a wyświetla się na stronie jedynie jeżeli źle wypełnię formularz ale i tak nie jest konieczny do rejestracji konta

Link to comment
Share on other sites

34 minutes ago, bartek666m said:

Wszystko ładnie pięknie formularz zabezpieczony maile przestały przychodzić ale ... teraz jakieś boty zaczęły zakładać nowe konta w przez funkcję rejestracji. Próbowałem dodać jedynie linijkę kodu:


<div class="g-recaptcha" data-sitekey="TWÓJ KOD"></div>

do pliku authentication.tpl, coś nie działa moduł wyświetla się jedynie po dodaniu kodu na końcu pliku a wyświetla się na stronie jedynie jeżeli źle wypełnię formularz ale i tak nie jest konieczny do rejestracji konta

Tutaj rozwiązanie - nie jest to powiązane ze spamem przez formularz kontaktowy.

 https://www.podemski.info/porady/boty-rejestrujace-konta-klientow-w-prestashop-jak-sie-obronic

Edited by hakeryk2 (see edit history)
  • Thanks 2
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...