Formularz kontaktowy jako furtka: jak go zabezpieczyć
Formularze kontaktowe i zamówień przyjmują tekst od każdego, także od botów. Spam, wstrzykiwanie kodu, przesyłane pliki, captcha i to, kto czyta zgłoszenia.
Formularz to jedyne miejsce na Twojej stronie, w którym każdy może wpisać, co chce, a strona musi to przyjąć. Zwykle robi to klient z pytaniem o termin albo cenę. Czasem bot, który bez przerwy wypełnia formularze na kolejnych stronach. A czasem ktoś, kto sprawdza, co formularz przełknie bez protestu.
Dlatego formularz kontaktowy, formularz zamówienia czy rejestracji na wizytę to jedno z pierwszych miejsc, które sprawdza włamywacz. Poniżej opisuję, jakie są zagrożenia, jak je rozpoznać i o co poprosić osobę, która opiekuje się stroną.
Zalew spamu to coś więcej niż bałagan w skrzynce
Najczęstszy problem jest też najmniej groźny, przynajmniej na pierwszy rzut oka. Boty wysyłają przez formularz setki wiadomości z reklamami i linkami. Skrzynka się zapycha, a prawdziwe zapytanie od klienta ginie gdzieś między nimi.
Gorzej, gdy formularz wysyła potwierdzenie albo kopię wiadomości na adres, który ktoś wpisał. Bot wpisuje wtedy adresy obcych ludzi, a Twój serwer wysyła im maile z Twojej domeny. Taka wysyłka szybko psuje reputację domeny: skrzynki pocztowe zaczynają traktować ją jak źródło spamu, a Twoje prawdziwe maile, łącznie z fakturami, lądują w folderze ze spamem u klientów. Hosting może też zablokować wysyłkę z całego konta.
Jeśli Twój formularz ma opcję „wyślij mi kopię”, zapytaj, czy jest potrzebna.
Trzy ataki, każdy w jednym zdaniu
Nazwy brzmią groźnie, ale zasada jest prosta. Każdy z tych ataków działa, bo formularz ufa temu, co ktoś wpisał.
Wstrzykiwanie nagłówków e-mail: ktoś wpisuje w pole adresu albo tematu znaki nowej linii i dodatkowe adresy, a źle napisany formularz rozsyła wtedy z Twojego serwera wiadomości pod dowolne obce adresy.
SQL injection: ktoś wpisuje w pole fragment polecenia dla bazy danych, a formularz, który przekazuje treść prosto do bazy, wykonuje je i może ujawnić albo zmienić zapisane tam dane.
Cross-site scripting (XSS): ktoś wpisuje zamiast imienia kawałek skryptu, a gdy otworzysz to zgłoszenie w panelu, skrypt uruchamia się w Twojej przeglądarce, z Twoimi uprawnieniami administratora.
Przed wszystkimi trzema chroni programista: sprawdza i filtruje dane, zanim trafią do maila lub bazy, i wyświetla je w panelu tak, żeby nie dało się ich uruchomić. Popularne, aktualne wtyczki robią to domyślnie. Większe ryzyko niesie formularz napisany ręcznie kilka lat temu, którego od tamtej pory nikt nie oglądał. Zapytaj więc wprost, czy Twój formularz pochodzi z wtyczki, czy był pisany od zera, a jeśli od zera, kto i kiedy go ostatnio sprawdzał.
Pliki od klientów
Wiele formularzy pozwala dołączyć plik: CV, zdjęcie uszkodzenia, skan dokumentu, projekt do wyceny. To wygodne i zarazem najbardziej ryzykowna część formularza.
Największe zagrożenie to plik, który udaje zdjęcie, a w rzeczywistości jest programem, na przykład o nazwie faktura.jpg.php. Jeśli serwer go przyjmie i pozwoli uruchomić, włamywacz dostaje kontrolę nad stroną. Dlatego poproś programistę o potwierdzenie, że:
- formularz przyjmuje tylko konkretne typy plików, na przykład PDF, JPG i PNG, i sprawdza ich zawartość, a nie samą końcówkę nazwy,
- jest limit wielkości pliku,
- pliki trafiają do folderu, w którym serwer niczego nie uruchamia, najlepiej poza publiczną częścią strony,
- zapisane pliki dostają nowe, losowe nazwy.
Po Twojej stronie zostaje ostrożność przy otwieraniu. Dokument Worda, który po otwarciu prosi o włączenie makr, to klasyczny sposób na zainfekowanie komputera. Pamiętaj też, że CV czy zdjęcia z gabinetu to dane osobowe, czasem wrażliwe, więc nie trzymaj ich dłużej, niż musisz.
Captcha, honeypot i limit prób
Są trzy sposoby na boty i najlepiej działają razem.
Honeypot, czyli pułapka, to dodatkowe pole w formularzu, którego człowiek nie widzi. Bot wypełnia wszystkie pola, więc jeśli to jedno jest wypełnione, formularz po cichu odrzuca wiadomość. Klient niczego nie zauważa, a najprostsze boty odpadają.
Captcha odróżnia ludzi od botów. Nowsze wersje, takie jak Google reCAPTCHA v3, Cloudflare Turnstile czy hCaptcha, w większości przypadków działają w tle, bez przepisywania liter i klikania w obrazki. Pamiętaj, że przekazują one dane o odwiedzającym zewnętrznej firmie, więc informacja o tym powinna znaleźć się w polityce prywatności.
Limit prób ogranicza liczbę wiadomości, które można wysłać z jednego adresu w krótkim czasie. Nie przeszkadza klientom, a zatrzymuje zalew spamu i automatyczne testowanie formularza. Ustawia się go na serwerze albo w zaporze, na przykład w Cloudflare.
Na początek zwykle wystarczy honeypot i limit prób. Captchę warto dołożyć, gdy spam i tak się przebija.
Gdzie lądują zgłoszenia i kto je czyta
Wiadomość z formularza może trafić w dwa miejsca: na skrzynkę mailową i do bazy danych strony. Część wtyczek tylko wysyła maila. Inne zapisują też każde zgłoszenie w panelu strony, zwykle w menu z nazwą w rodzaju „Wpisy”, „Zgłoszenia” albo „Entries”. Zajrzyj do panelu i sprawdź, jak jest u Ciebie.
Potem odpowiedz sobie na kilka pytań:
- Kto ma dostęp do skrzynki, na którą przychodzą wiadomości? Czy ktoś nie przekierował jej na prywatnego Gmaila, zanim odszedł z firmy?
- Kto ma konto administratora w panelu? Każda z tych osób może przeczytać wszystkie zapisane zgłoszenia.
- Jak długo zgłoszenia są przechowywane? Część wtyczek pozwala ustawić automatyczne usuwanie starszych wpisów.
- Czy strona z formularzem działa po HTTPS i czy kłódka jest na swoim miejscu?
Każde zgłoszenie z imieniem, mailem i telefonem to dane osobowe, za które odpowiadasz. Więcej o tym, co wynika z tego według RODO, przeczytasz w artykule o RODO i bezpieczeństwie strony.
Aktualna wtyczka i jedna zamiast trzech
Wtyczki do formularzy należą do najpopularniejszych w ogóle, więc włamywacze przyglądają im się szczególnie uważnie. Luki są w nich regularnie znajdowane i łatane, dlatego aktualizacja wtyczki formularza nie powinna czekać w kolejce tygodniami.
Przy okazji sprawdź, ile wtyczek do formularzy masz zainstalowanych. Zdarza się, że trzy: jedną z pierwszej wersji strony, drugą z przebudowy i trzecią, której używa się naprawdę. Nieużywane usuń zamiast je wyłączać, bo ich pliki nadal leżą na serwerze.
I jeszcze jeden nawyk, który nic nie kosztuje: raz w miesiącu wyślij przez własny formularz wiadomość testową. Formularze potrafią przestać działać po cichu, a wtedy klient myśli, że go ignorujesz, a Ty nie wiesz, że w ogóle napisał.