Dzisiaj trochę informacji dla tych osób, które chcą pokazać swój adres email publicznie na stronie, ale nie koniecznie chcą, żeby był on zbierany przez roboty. Jeśli adres email raz znajdzie się w bazie aktywnych adresów to już nie będzie możliwe zdjęcie go z takiej listy, a spam będzie napływał i napływał. Oto garść porad jak zrobić to dobrze.

Statystyki

Znalazłem w sieci pewien fajny wykres. Niestety nie znam jego źródła, autora ani metody badawczej. Zakładając, że dane są wiarygodne można łatwo dostrzec jakie metody są najlepsze w obronie adresu przed spamem.

Email spam

Na powyższym wykresie przedstawiona jest otrzymana ilość spamu w MB w zależności od użytej metody ukrywania adresu. Oczywiście najwięcej – 21 MB spamu otrzymane zostało kiedy adres email był dostępny publicznie. Roboty czytały go dokładnie tak:

[email protected]

Druga najgorsza metoda do użycia to zakodowanie adresu za pomocą funkcji PHP urlencode(). Adres dla robotów w takim przypadku wyglądałby tak:

to.jest.moj.adres%40email.pl

urlencode() zamienia niestety tylko niektóre znaki w ciągu.

Najbardziej interesującą nas opcją jest opcja, gdzie ilość otrzymanego spamu wynosi 0. Skupmy się na pierwszej czyli CSS codedirection. Adres dla robotów wygląda tak:

[email protected]

Co się stało? Odwróciłem kolejność liter tak, że pierwsza jest ostatnią. Ciężkie do odczytania? Na pewno. Jak umożliwić odczytanie? CSS :)

Maskowanie adresu email za pomocą CSS

Najtrudniejszym krokiem w tej metodzie jest odwrócenie adresu. Można poszukać narzędzia, które zrobi to za nas, a można pisać ręcznie. Ważne, żeby otrzymać odwrócony ciąg znaków, a metoda nie ma już znaczenia.

Mając ciąg potrzeba go jeszcze opakować w jakiś pojemnik. Może być span:

[email protected]

I wystarczy dodać definicję w CSS:

.odwrotnosc {
	unicode-bidi: bidi-override;
	direction: rtl;
}

HTML będzie nie do odczytania, ale przeglądarka zrenderuje nam czytelną wersję odwracając znaki.

Narzędzia do ukrywania w WordPress

WordPress oferuje nam bardzo przydatną funkcję PHP do ukrywania wszelkiego rodzaju treści – antispambot(). Funkcja ta zamienia każdy znak w ciągu na zakodowany znak HTML (HTML entity). Na wykresie pokazanym wcześniej, że zmiana kropek i @ w adresie na takie jednostki jest dość skuteczna. Ta funkcja jednak zmienia całość tekstu, a nie tylko wybrane znaki.

Użycie jest proste:

echo antispambot('[email protected]');

A w wyniku otrzymujemy:

[email protected]

Dla niektórych osób minusem tej metody jest to, że trzeba jej użyć w kodzie. A co jeśli nie chcemy się babrać w plikach motywu, a adresu chcielibyśmy użyć np. w treści wpisu? Przygotowałem shortcode, który można użyć bez dodawania CSS czy surowego kodu.

Shortcode ukrywający adresy email

Metodę tą można użyć nie tylko do ukrywana adresu email ale także do telefonów czy innych informacji na których zależy nam by były wyświetlane tylko dla żywej osoby.

W shortcode połączyłem dwie metody: kodowanie znaków HTML oraz odwrócenie tekstu. Kod gotowy do wklejenia do treści:

function wpart_hide_string_shortcode($atts, $email = null) {

	if ( empty($email) )
		return;

	return ''.antispambot( strrev($email) ).'';

}
add_shortcode('email', 'wpart_hide_string_shortcode');

Użycie jest bardzo proste:

[[email][email protected][/email]]

 

Podsumowanie

Mam nadzieję, że moja metoda obrony przed spamem Ci się przyda. A może Ty masz lepszą metodę, której zawsze używasz?

Opublikowany przez Kuba Mikita

Miłośnik minimalizmu i prostoty, bo nie potrafi stworzyć niczego ładnego. Ma kołdrę, na której wypisane są funkcje WordPressa.

24 odpowiedzi na “Ukrywanie adresu email przed spam botami”

    1. Jeśli chcesz mieć kopiowalny/klikalny adres to niestety CSS odpada i trzeba korzystać np. z samego kodowania znaków HTML

  1. Ponieważ dopiero zaczynam przygodę z wordpress, a jakieś tam podstawy i w html, php, css mam to nie wątpliwie przetestuje te metody, a bynajmniej postaram się przetestować :-). Mimo wszystko uważam że artykuł przydatny nawet dla tych co nie za bardzo mają wiedzę w programowaniu.

    1. Polecam się pobawić :) jeśli ktoś chce użyć, a nie wie jak to specjalnie podałem gotowy kod dla shortcode do wklejenia do functions.php motywu :)

  2. Dzięki za bardzo dobry wpis.
    Czy mógłbyś też poruszyć inny temat – zabezpieczenia formularza przed dodawaniem spam komentarzy ?
    Stosowałem różne wtyczki, ale bot spam zawsze się przedziera.

    1. Moim zdaniem najlepiej zastosować Honeypot Trap, jest dostępny np. jako wtyczka do Contact Form 7. Jest to zazwyczaj jakieś dodatkowe ukryte pole, które jest niewidoczne dla użytkownika. Zasada działania jest prosta – jeśli bot je wypełni to wiadomość jest spamem.

    1. Eval nie jest zbyt dobrą funkcją. Jak zainstalujesz jakieś oprogramowanie antymalware to prawdopodobnie wykryje Ci jako zagrożenie.

  3. A co powiesz na funkcję php konwertującą adres w kodzie strony do znaków kodu ASCII?

    function convert_email($email) {
    $p = str_split(trim($email));
    $new_mail = ”;
    foreach ($p as $val) {
    $new_mail .= '&#’.ord($val).’;’;
    }
    return $new_mail;
    }

    1. Dobre, ale nie ma losowości więc też stosunkowo łatwo taki adres odczytać

  4. A masz alternatywę do tego wordpressowego przykładu (Shortcode ukrywający adresy email)? w wersji na normalną stronę w php?

    1. To wystarczy lekko przerobić tą funkcję od shortcode i w czystym PHP też będzie działało :)

      1. nie działa, bo przecież w źródle strony będzie on wyświetlony w niezabezpieczonej formie

  5. Witam. Pytanie: Dlaczego przeglądarka wyświetla odwrócony adres email? Odwrócony adres email miał być tylko generowany w kodzie. Proszę o pomoc.

      1. Dodałem shortcode do functions.php motywu tak jak jest zalecone na stronie. umieściłem [[email][email protected][/email]] na stronie. Dopiero się uczę, proszę o wyrozumiałość :) może coś pominąłem ?

        1. Tak, brak CSS, o którym pisałem :) Ale szczerze to aktualnie nie zalecam takiej metody ze względu na dostępność strony dla osób niepełnosprawnych i czytniki. Użycie funkcji antispambot() powinno wystarczyć.

Możliwość komentowania została wyłączona.