Jak zabezpieczyć formularz przed spamem?

2010-04-05 10:19

Wiele stron internetowych niepotrzebnie stosuje w formularzach kontaktowych ochronę typu captcha. Jeśli nie mamy dużej strony i nie bombardują nas setki czy tysiące e-maili dziennie od użytkowników to wystarczy nam odpowiednie filtrowanie e-maili oraz małe sztuczki, przez które nie przechodzi większość robotów spamujących.

Ochrona formularzy sprowadza się przede wszystkim na przechytrzeniu spambotów, które atakują naszą stronę. Ktoś napisał taki skrypt - spambot, który szuka formularzy i w odpowiedni sposób automatycznie wypełnia pola i go wysyła. To wcale nie jest takie proste bo wiele formularzy posiada walidację. Czyli w odpowiednie pole trzeba wpisać poprawny adres e-mail, w pozycji telefonu mogą być tylko liczby, myślniki i spacje. Jeśli pole, w którym trzeba wprowadzić adres e-mail nazwiemy name="email" to ułatwiamy sprawę ataku bo wskazujemy co i jak ma być wypełnione. Dlatego starajmy się nazywać pola tak by nie sugerowały w łatwy sposób co ono zawiera. Formularze kontaktowe przeważnie posiadają kilka pól więc nie powinniśmy się pogubić w nazewnictwie.

Wracając do walidacji, spambot nie jest w stanie wykryć, które pola są obowiązkowe i muszą zostać wypełnione, dlatego stara się wypełnić wszystkie. Dzięki temu jesteśmy w stanie zrealizować bardzo prostą sztuczkę, która polega na utworzeniu pola <input />, które ukryjemy poprzez css czy javascript. Dodatkowo wprowadźmy w nazwie słowo zawierające 'email', np. 'funnyemail' (nie dajemy samego 'email' bo może ktoś stosować autouzupełnianie formularzy).

Niestety programiści pracujący nad spamowaniem formularzy wiedzą o takich elementach i mogę np. w przypadku nie wysłania formularza spróbować pozostawić pierwsze pole puste, albo sprawdzać po kolei, które pole mogą zostawić puste.

Innym sposobem zabezpieczenia formularzy jest użycie javascript. Dodajemy do formularza ukryte pole, które po wciśnięciu guzika wysłania formularza, a przed jego rzeczywistym wysłaniem uzupełnia pole o odpowiednią wartość. Spamboty niestety nie potrafią jeszcze w większości przypadków korzystać z javascript więc formularz zwróci błąd.

Po co tak w ogóle spamboty wysyłają nasze formularze? Przeważnie chcą się reklamować na naszych stronach, wysyłając przy tym linki do swoich stron. Jeśli już uda się wysyłać formularz jakiemuś robotowi zawsze zostaje nam ostatnia deska ratunku. Możemy sprawdzić co zostało wysłane w polu opisowym.

Jeśli wysyłany formularz służy do kontaktu to na pewno nie powinien zawierać bbcode, a roboty spamujące często wysyłają [url=tutaj-jakiś-adres]. Wystarczy zrobić walidację.

Można także z upływem czasu przygotować sobie listę słów, które często występują w wiadomościach spamowych, a także listę adresów IP, które notorycznie próbują nam coś wysłać.

Słowa kluczowe: Bezpieczeństwo, antyspam, formularz, spam, zabezpieczenie, artykuł, blog

Projektowanie i tworzenie stron www w PHP5. Opisy i recenzje oprogramowania typu cms, blog, wiki, open source.
Wszelkie prawa zastrzeżone.