Spam z formularza kontaktowego PrestaShop: dlaczego antyspam oparty na zabronionych słowach nie działa

autor: Luca Cavallini Poradniki techniczne
Spam z formularza kontaktowego PrestaShop: dlaczego antyspam oparty na zabronionych słowach nie działa

Dwa sposoby na stratę czasu, a drugi jest gorszy

Do skrzynki, która odbiera wiadomości z formularza kontaktowego, trafiają dwie rzeczy: zapytania klientów i niezamówione propozycje, czyli pozycjonowanie, netlinking, programiści płatni od godziny, zaproszenia do inwestowania w kryptowaluty i od czasu do czasu próba wyłudzenia danych logowania do panelu administracyjnego.

Pierwszy sposób na stratę czasu to czytanie wszystkiego. Drugi, gorszy, to przestać czytać: gdy prawie wszystko jest śmieciem, właściwa wiadomość jest oglądana już tylko mimochodem. Utracony kontakt nie zostawia błędu w logach, zostawia klienta, który odchodzi, nie mówiąc dlaczego.

Dlaczego lista zabronionych słów nie działa

Najpopularniejsza obrona to lista słów: jeśli wiadomość zawiera „SEO”, „darmowa”, „oferta”, zostaje odrzucona. Działa to przez tydzień, a potem przychodzi rachunek, ponieważ słowa pojawiające się w spamie są tymi samymi, których używają klienci. „Widziałem, że mają Państwo promocję na zestaw wkrętaków. Czy dostawa jest darmowa powyżej 49 euro także na wyspy?”, to klient tuż przed zakupem.

Wada nie leży w liście, lecz w metodzie: słowo nie niesie ze sobą intencji osoby, która je napisała. Dotyczy to także drugiej strony, ponieważ dobrze napisany spam nie zawiera żadnego podejrzanego słowa. Zwiększając rygor, blokuje się więcej prawdziwych klientów; zmniejszając go, przepuszcza się więcej spamu: żadne ustawienie nie rozwiązuje problemu, ponieważ to nie jest właściwy sygnał.

Lista zabronionych słów (SEO, darmowa, oferta) blokuje wiadomość klienta pytającego o promocję i darmową wysyłkę, a dobrze napisany spam bez tych słów przechodzi
Błąd nie tkwi w liście, tylko w metodzie: słowo nie niesie ze sobą intencji osoby, która je napisała.

Dlaczego captcha nie wystarcza

Captcha rozwiązuje inny problem i robi to dobrze: uniemożliwia programowi wypełnienie formularza tysiące razy. Nie uniemożliwia jednak osobie wysłania oferty handlowej ani programowi, który potrafi je rozwiązać, zrobienia tego samego. Captcha, honeypot i limit wysyłek na adres IP sprawdzają, jak wiadomość dotarła; tutaj problemem jest to, co w niej napisano.

Porównanie: captcha, honeypot i limit na IP zatrzymują programy wypełniające formularz, ale osoba z ofertą handlową przechodzi; do treści potrzeba czegoś, co czyta tekst
Captcha dobrze rozwiązuje swój problem; niechciane wiadomości pisane przez ludzi to inny problem.

Model, który podejmuje decyzję zamiast pisać

Modną odpowiedzią na pytanie „czy ta wiadomość to spam?” jest zapytanie modelu językowego: pisze się prompt i ma nadzieję, że zwrócony tekst da się zinterpretować. Działa to do dnia, w którym model odpowiada „Powiedziałbym, że tak, choć to zależy”, a kod, który czekał na TAK albo NIE, decyduje losowo.

Istnieje typ modelu pomyślany na przypadek odwrotny: nie generuje tekstu, odpowiada na pytania z określonym typem odpowiedzi. Dla każdego zwraca liczbę: przy pytaniu tak/nie prawdopodobieństwo, że odpowiedź brzmi tak; przy pytaniu wielokrotnego wyboru wybraną opcję, prawdopodobieństwo każdej z nich i wskaźnik pewności, czyli to, jak wyraźny jest ten wybór w porównaniu z pozostałymi. Funkcja Antispam Jev naszego modułu formularzy kontaktowych jest zbudowana na jednym z takich modeli, Jev firmy TypeSafe AI.

Praktyczna różnica polega na tym, że decyzja zostaje w kodzie: model mówi, jak bardzo jest pewny, a to, co się z tym zrobi, rozstrzyga próg, który sprzedawca może zmienić. Dla każdej wiadomości w jednym wywołaniu wysyłanych jest sześć pytań, ocenianych równolegle: czy to niezamówiona reklama, czy zawiera podejrzane linki, czy to phishing, czy to szablon wysyłany masowo, który dział powinien odpowiedzieć, czy sprawa jest pilna.

Schemat: wiadomość z formularza trafia do Jev z sześcioma pytaniami ocenianymi równolegle, reklama, podejrzane linki, phishing, masowy szablon, dział, pilność, a na każde wraca liczba
Żadnego tekstu do interpretacji: sześć odpowiedzi liczbowych, a decyzja zostaje w kodzie modułu.

Najważniejszy jest trzeci stan. Powyżej progu górnego podejmuje się działanie i wiadomość trafia do kolejki wiadomości podejrzanych; poniżej nie robi się nic, wiadomość przechodzi, a ocena zostaje w rejestrze; pomiędzy, tam gdzie model się waha, potrzebne jest potwierdzenie drugiego sygnału. „Nie wiem” jest użyteczną odpowiedzią, jeśli kod jest napisany tak, aby jej słuchać.

Skala prawdopodobieństwa z dwoma progami: poniżej wiadomość przechodzi, a ocena zostaje w rejestrze, pośrodku potrzebny drugi sygnał, powyżej górnego progu trafia do kolejki podejrzanych
Progi wybiera sprzedawca; model mówi tylko, na ile jest pewny.

Co zmierzyliśmy

Te liczby pochodzą z testu, który przeprowadziliśmy na instalacji deweloperskiej PrestaShop 9, a nie z niezależnego badania: dziesięć wiadomości napisanych przez nas po włosku, sześć prawidłowych i cztery niechciane.

Sześć prawidłowych wiadomości wybrano tak, aby były trudne: rozgniewany klient, który żąda zwrotu pieniędzy i grozi zakwestionowaniem płatności w swoim banku, wiadomość napisana w całości wielkimi literami, wiadomość z linkiem do strony firmy nadawcy, bardzo długa i niejasna, dwuwyrazowa po włosku („Wysyłacie na Sycylię?”) oraz ta pełna słów „darmowa”, „oferta” i „promocja”. Wszystkie sześć przeszło, a prawdopodobieństwo niezamówionej reklamy pozostało na poziomie 2% lub niższym. Cztery niechciane (propozycja SEO, phishing ze skróconym linkiem, zaproszenie do inwestowania, ogólny szablon wysyłany masowo) trafiły wszystkie do kolejki podejrzanych, z wynikiem od 98% do 99%.

Dziesięć wywołań zajęło od 535 do 663 milisekund, średnio 596 ms, przy zużyciu około 900 do 1 240 tokenów na wiadomość. Przy wyłączonej funkcji ta sama wysyłka zajęła 95 ms: dodatkowe pół sekundy to cena oceny, a płaci się ją tylko wtedy, gdy funkcja jest włączona.

Najbardziej interesował nas inny test: skierowaliśmy moduł na adres, który nie odpowiada. Po 4 057 milisekundach, czyli po skonfigurowanym czasie oczekiwania, wiadomość została dostarczona normalnie, a błąd zapisano w rejestrze. Tak samo przy braku klucza API i przy kluczu błędnym.

Wyniki testu: 6 z 6 prawidłowych wiadomości przeszło, 4 z 4 niechcianych w kolejce, średnio 596 ms od 535 do 663 ms, 900-1 240 tokenów na wiadomość, limit czasu 4 057 ms z dostarczoną wiadomością
Dziesięć wiadomości mówi, że filtr nie pomylił się przy tych dziesięciu, a nie że nigdy się nie pomyli: dlatego jest kolejka.

Czego celowo nie robi

Niczego nie usuwa. Rozpoznany spam trafia do kolejki, którą sprzedawca otwiera, czyta i z której może odzyskać wiadomość jednym kliknięciem, po czym wysyłane jest zatrzymane wcześniej powiadomienie. Odwiedzający i tak widzi ekran potwierdzenia: osobie wysyłającej spam nie tłumaczy się, jak została odfiltrowana, a klient, który znalazłby się tam przez pomyłkę, nie zostaje odrzucony.

Nie narusza decyzji sprzedawcy: kierowanie wybiera spośród działów faktycznie skonfigurowanych w module i interweniuje tylko tam, gdzie wcześniej zostałby użyty adres ogólny. Poniżej progu pewności pozostaje odbiorca domyślny.

Ograniczenia, powiedziane z góry

Treść wiadomości jest wysyłana do zewnętrznego dostawcy w Stanach Zjednoczonych: jest to przekazanie danych osobowych poza Unię Europejską, które musi zostać ujęte w polityce prywatności sklepu. Dlatego funkcja jest domyślnie wyłączona, panel wprost wskazuje, co wychodzi i do kogo, wysyłanie adresu e-mail nadawcy jest wyłączone, chyba że zostanie wyraźnie wybrane, a moduł dostarcza gotowe zdanie do wklejenia w politykę prywatności w pięciu językach: tekst do dostosowania i sprawdzenia, a nie opinia prawna.

Usługa jest nowa i rozliczana według zużycia: gdy kredyt się wyczerpie, przestaje odpowiadać, a wiadomości przechodzą tak jak przy każdym innym błędzie. A dziesięć wiadomości mówi, że przy tych dziesięciu filtr się nie pomylił, a nie że nigdy się nie pomyli: dlatego istnieje kolejka i dlatego każda ocena jest zapisywana wraz z prawdopodobieństwem, pewnością, czasem i tokenami.

Gdzie ją znaleźć

Antispam Jev to funkcja naszego modułu formularzy kontaktowych dla PrestaShop, a nie osobny moduł: ci, którzy już go używają, znajdą ją w konfiguracji, wyłączoną. Jeśli problem, który Państwo rozpoznają, to ten drugi z tego artykułu, czyli prawdziwa wiadomość gubiąca się wśród pozostałych, to właśnie do niego została stworzona.

Zrzut ekranu funkcji Antispam Jev modułu formularzy kontaktowych w wersji demo PrestaShop 9: przy braku klucza API funkcja jest nieaktywna, dalej co oceniać i progi kolejki, potwierdzenia, działu i pilności
Antispam Jev w module cll_contactform w naszej wersji demo PrestaShop 9: wyłączony, dopóki nie wpisze się klucza, z progami decydującymi o dalszym działaniu (panel w języku włoskim).

Zaawansowane formularze kontaktoweTworzenie wielu zaawansowanych formularzy kontaktowych z kreatorem pól, kierowaniem do działów, załącznikami…49,99 €Zobacz produkt

Dodaj komentarz

Komentarze są moderowane przed publikacją.

← Blog

Ładowanie...
Powrót do góry