Chrońmy się przed spamem!

Zaczęło się od narzekań Symka na zwiększającą się liczbę codziennie odfiltrowanego spamu na koncie na Gmailu. Wykombinował chłopak, że zamieni, w linku z mailem (mailto:), @ na [at]. Mleczarz jak zawsze zjechał Symka za pomysł i zaproponował użycie pięknego [orangutan] zamiast [at], co miało by zmylić ponoć nie tak głupie spamboty.

(Od razu dodaję, że piszę co mi się wydaje - nic mądrego nie czytałem i mogę się bardzo mylić.)

Postawmy się jednak na miejscu programisty tworzącego spambota. Jak taki powinien działać po odczytaniu strony? Najprościej - odszukać linki z adresem zaczynającym się od mailto: i zająć się tym co następuje dalej. Na początek sprawdźmy czy mail jest w porządku, czyli czy ma budowę ktos-cos@serwer.domena. Część maili tak podawana (np. Symka do dzisiaj) już trafiają do bazy. Teraz co z udrzuconymi? Na początek posprawdzałbym występowanie ciągów typu at, dot, nospam, itd. Niektóre bym pousuwał, resztę pozamieniał (np. [at] na @) i wrócił do początku (czyli do validacji adresu).

Przeglądnąłem właśnie około 30 losowych stron szukając w ich kodzie słowa mail. Nie znalazłem żadnego adresu w mailto zakodowanego w jakikolwiek sposób. Co więcej - niektórzy podają maile w sekcji <head> strony. Pytanie więc - czy opłaca się spowalniać spambota, wbudowując w niego algorytm do odkodowywania maili?... Nie wiem :P Nie jestem spamerem.

Powiedzmy jednak, że opłaca się, a my chcemy jeszcze lepiej zabezpieczyć naszą skrzynkę. Co teraz trzeba zrobić? Mój spambot zacząłby od poszukiwania adresów zapisanych w mailto, więc podajmy maila nie jako linka, a jako tekst, po ludzku (mój mail to palka@pralka.pl).

Mamy kolejne wyzwanie dla spambota. Czego teraz szukać? Bez wątpienia zacząłbym od znajdowania adresów po nazwach serwerów (wcześniej musiałbym stworzyć bazę tych główniejszych, czy mniej głównych). Czyli np. szukamy @gmail.com, @yahoo.com, @interia.pl, a później to co wcześniej.

Tylko czy wysyłanie spamu na takie konta ma sens? Na Gmaila - raczej nie, na inne nie wiem. Większe serwery mailowe mają zazwyczaj dość dobre filtry (chociaż patrząc na Interię, gdzie mam swoje drugie konto, to chyba nie do końca tak jest). Inaczej ma się sprawa przy trochę mniejszych serwerach, gdzie takie filtry to tylko marzenie użytowników. Bazę takich serwerów już ciężej stworzyć, więc wyszukiwanie po nazwach serwerów odpada. Został nam już tylko orangutan do tropienia. Coś mi się jednak wydaje, że szukanie po @ średnio ma sens, ale mogę się mylić...

Co więc zrobić, żeby maksymalnie się zabezpieczyć? Można użyć jeszcze encji. Jakiś RFC o tym traktował, ale nie mogę znaleźć który, więc przyjmijcie, że tak też można :]. Encji używają między innymi na Osiolkach, którym raczej zaufać można.

Jeśli komuś się ten sposób podoba, to w zakodowaniu maila pomaga funkcja PHP ord().

Podsumowując - najoptymalniejszym sposobem na zabezpieczenie adresu jest zapisanie go w treści strony i przy pomocy encji.

Niestety... Nie tylko spamboty są dla nas zagrożeniem. Trzeba pamiętać, że maila podajemy na forach, przy róźnych rejestracjach do serwisów. Nie zawsze wiemy co się z naszymi danym dzieje. Oczywiście Gazeta nie sprzeda naszego maila, ale zawsze możemy być pewni swojego bezpieczeństwa. No i są jeszcze wycieki...

Jeśli zamierzamy się nagle od dzisiaj zacząć super zabezpieczać, to tak jak zacząć się zabezpieczać od drugiego stosunku (super porównanie, co nie? :D). Dziecko może być już w toku (zainteresowani wiedzą o co chodzi :D) i ile gumek nie naciągniemy, to dziecko będzie. Tak samo - podany i zindexowany mail pewnie już sobie krąży pomiędzy bazami danych spamerów i lepiej chyba założyć nowego.

Co do samego zabezpieczania. To trzeba wspomnieć jeszcze o mailach zapisanych w obrazkach (polecam tutaj sposób Riddla) - nie zapominajmy o dostępności (!), maile generowane przez JS i różne rebusy, typu: [pierwsza litera mojego imienia][moje nazwisko]@gmail.com.

Jak ktoś chce sobie jeszcze poczytać (choć nie sądzę, żeby dotarł aż tutaj :D), to polecam adresy, o których zapomniałem, a które przypomniał mi Oleq dopiero przed chwilą:

Koniec

Patrząc na długość tego tekstu... Dochodzę do wniosku, że wolę dobry filtr na Gmailu niż się tak męczyć :)

PS. Całość dopełnia jeszcze komentarz Mleczarza.

PS2. I jeszcze apropo zagrożenia na zindexowanie - "Email Address Harvesting: How Spammers Reap What You Sow" (pierwsza część tekstu).


Komentarze do notki “Chrońmy się przed spamem!”

  1. Igorosław 

    Fajowe rozważania, ale na przyszłość krócej prosze :PPPP

  2. Oleq 

    Jak ja bym budował bota, szukałbym najpierw nawiasów [], a później sprawdzał ich zawartość (czy przez przypadek nie jets to 'dot' albo 'at')
    Szukałbym też składni '_text_' i sprawdzał, czy jako text nie występują wyżej wymienione słowa. To sprawiłoby że większość takich 'maskarad' byłaby nieskuteczna. Trzeba wysilić się na coś mniej schematycznego; najlepiej żeby każdy miał swój własny, w miarę unikalny sposób podawania e-mail'a w zmienionej postaci.

  3. Reinmar 

    Ta... A ja później nie potrafię takiego adresu rozkodować.

    Wpadłem dzisiaj do jakiegoś RFCka i nie potrafiłem niektórych adresów rozkodować - to raczej przesada.

  4. Reinmar 

    @Igorosław: A przeczytałeś chociaż do połowy? :D

  5. tomwys 

    Jeśli chodzi o strony to Siergiej podrzucił mi dość dobry pomysł:
    adres<span style="display:none">tego nie widać</span>@<span style="display:none">tego też nie</span>adres.pl
    Aby to ominąć bot musiał by być naprawde zaawansowany (raczej zbyt, aby był sens go utrzymywać). Sposób ten działa ładnie na Operze (kopjuj/wklej). W Firefox wkleja się również to czego nie widać, ale jak to załatwić Siergiej również wymyślił.
    Zobacz też: http://tomwys.jogger.pl/2006/05/07/poczatek-walki-ze-spamem/

  6. Michał Górny 

    @tomwys: Ale w Lynx'ie czy Operze z wyłączonym interpretacją CSS tekst ten będzie doskonale widoczny. Ja to rozwiązywałem w nieco inny sposób — zamiast <span .../> po prostu <em/>. Potem przez CSS nadać <em/> display: none; i albo nie będzie widoczne w przeglądarce, albo będzie wyróżnione, dzięki czemu można je będzie łatwo odróżnić od właściwego adresu.

  7. Reinmar 

    To ja bardziej polecam <del/>. Bardziej pasuje moim zdaniem.

  8. v3rtical 

    Według mnie nawet nie bardzo rozbudowane spamboty (czyli te, które szukają samych "@") mogą odnosić znaczne sukcesy w szukaniu adresów do zaspamowania. Niejednokrotnie admin jakiejś strony zmuszony jest do użycia "gołego" adresu (serwer@domena), bo inaczej zostanie zaspamowany od strony użytkowników jego serwisu. Chodzi mi tutaj o maile w stylu "podany przez ciebie adres nie chce mi działać", a to wszystko dlatego, że mało inteligentny user nie domyśli się, że [at] lub dowolny inny znacznik należy zastąpić "@".
    Jeśli natomiast chodzi o napisanego przeze mnie spambota, najpierw wyszukiwałby on otwarte+zamknięte nawiasy (zarówno [sdgsdg] jak i <sgsd>) lub powtarzające się znaki, między którymi jest jakaś treść (np. 'sfdgds'). W większości przypadków takie coś starczy.

  9. Oleq 

    Taki spambot powinien wyszukiwać wszelkich regularnych konstrukcji w mailu _coś_ ; (coś) ; -coś- itd. to wystarczy, żeby wsyłuskać bardzo dużo adresów (choć jakaś część z nich będzie na pewno nieprawdziwa, bo często używa się _txt_). Na pewno takie boty już dawno funkcjonują i taki 'algorytm' jest na pewno zastosowany (a pewnie i o wiele lepszy...)

  10. Michał Górny 

    I jeszcze przeplatanych między częściami adresu dużych liter typu:
    meAThomeDOTpl

  11. Mleczarz 

    To co - piszemy spambota? :-) Jak już tacy mądrzy jesteśmy, to można kasę zgarniać...

  12. Reinmar 

    Wydaje mi się, że można by ;]
    Tylko co będziemy tym spamem wysyłać? Zaproszenia do LOIII? :D

  13. Mleczarz 

    Ja mogę produkować preparat do powiększania penisa.

  14. Symek 

    ej, to ja proponuję sprzęgnąć tego spambota z takim Fine Readerem żeby odczytywał obrazki w poszukiwaniu słów jak mail, tlen itp., i to najlepiej w conajmniej w trzech językach :P

  15. Reinmar 

    Ale przecież te obrazki są tak tworzone żeby się nie dało ich przeczytać.
    X tego Twojego np. nie do odcyztania jest 'gmail.com'

Zostaw odpowiedź