Czy obfuskacja adresu e-mail to dobry pomysł?


Uwaga! Wszystkie informacje i solucje zawarte w postach typu DYI mogą z czasem przestać być aktualne. Niektóre publikowane kody źródłowe, będąc zależnymi od używanych konfiguracji platform i sprzętu, mogą nie działać, lub działać nieprawidłowo u niektórych użytkowników. Stosując opisane rozwiązania przyjmujesz do wiadomości i zgadzasz się, że nie ponoszę odpowiedzialności za ich finalne efekty.


Obfuskacja (ang. obfuscation) jest techniką używaną w celu ukrywania lub zaciemniania kodu lub danych. Celem stosowania tej techniki jest zwiększenie bezpieczeństwa, prywatności lub ochrony własności intelektualnej. Wymyśliłem więc, że takie zabiegi mogą dobrze zadziałać na adresy e-mail opublikowane na stronie, które z chęcią kolekcjonują boty-żniwiarze (tzw. harvestery, czyli boty zbierające adresy e-mail). Sprawdźmy.

Mam adres e-mail: [email protected]. Odwracając w nim kolejność znaków do postaci lp.ofni@serdasikaj mogę zapewnić poprawność ich wyświetlania na stronie za pomocą kodu CSS.

Czyli, dla zapisu:

<p>Skontaktuj się ze mną: <span class="email">lp.ofni@serdasikaj</span></p>

…CSS wyglądałby tak:

    <style>
        .email {
            unicode-bidi: bidi-override;
            direction: rtl;
            text-transform: none;
        }
    </style>

Może zamiast tego lepiej jednak bardziej skomplikować życie botom i posłużyć się kodami ASCII?

Jak wiemy, adresy stron internetowych oraz mailowe piszemy zazwyczaj bez użycia polskich znaków („zazwyczaj”, bo istnieje możliwość rejestracji nazw z „ogonkami”, są to tzw. domeny IDN (Internationalized Domain Names), nie zauważyłem jednak, żeby cieszyły się jakąś specjalną popularnością). Z kolei kody ASCII (American Standard Code for Information Interchange) składają się na jeden z najstarszych systemów kodowania znaków (litery łacińskie i znaki specjalne), szeroko używanego w informatyce i systemach komunikacyjnych. Wymyśliłem więc, że każdą literę można przedstawić w kodzie na odpowiednik kodu ASCII, a następnie wyświetlić adres javascriptem.

Popatrzmy:

105, 110, 102, 111, 64, 106, 97, 107, 105, 115, 97, 100, 114, 101, 115, 46, 112, 108 – to kody ASCII poszczególnych liter składających się na adres [email protected] (wielkie i małe litery mają inne kody). Stwórzmy miejsce do wyświetlenia adresu e-mail:

 <p>Skontaktuj się ze mną: <span id="email"></span></p>

…i javascript, który przetworzy zaszyfrowany adres:

    <script>
        // Zaszyfrowany adres e-mail w postaci tablicy kodów ASCII
        var encodedEmail = [105, 110, 102, 111, 64, 106, 97, 107, 105, 115, 97, 100, 114, 101, 115, 46, 112, 108];

        // Funkcja do dekodowania adresu e-mail
        function decodeEmail(encoded) {
            return String.fromCharCode.apply(null, encoded);
        }

        // Generujemy adres e-mail
        var email = decodeEmail(encodedEmail);

        // Ustawiamy link mailto w elemencie o id 'email'
        document.getElementById('email').innerHTML = '<a href="mailto:' + email + '">' + email + '</a>';
    </script>

Działa? To ekstra. Nie będzie działać, jeśli masz wyłączony javascript, albo stosujesz restrykcyjne metody blokady skryptów. Ale można przecież adres poczty umieścić na stronie również w formie obrazka. Metoda stare jak Internet, pewnie przeciwskuteczna.

A tak w ogóle – pytanie: po co publikować adres e-mail na stronie…

Chrzanić to wszystko! Lepiej zrobić formularz kontaktowy z antyspamową weryfikacją :]