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ą :]