Ochrana e-mailové adresy
E-mailové adresy uváděné na webových stránkách jsou pravým pokladem pro spammery a jiné záškodníky. Není totiž nic snazšího, než vypustit na internet robota, který takto zveřejněné adresy posbírá (mluvíme o tzv. harvesterech). A pak mohou začít spamové a/nebo malwarové orgie. Samozřejmě existuje možnost e-mailový kontakt na webové stránky neuvádět, popřípadě uvést adresu schránky, kterou člověk běžně nevybírá, nicméně není to nepodobné jako řešit problém krátkých kalhot tím, že si useknu nohu.
Otázkou tedy je, jak harvestera zmást, aby nedokázal zveřejněnou adresu rozpoznat. Protože tyto roboty hledaly nejprve text ve formátu (libovolný počet povolených znaků)@(libovolný počet povolených znaků).(2 až 4 povolené znaky), rozmohlo se jednoduché řešení — zápis zavináče nebo tečky slovy.
pepa(zavináč)depo(tečka)cz
pepaZAVINACZdepoTECZKAcz
pepa(na)depo.cz
Takový zápis je pro člověka relativně čitelný (i když mnoho méně zkušených uživatelů spolehlivě zmate, takže třeba na webové stránky firmy jej rozhodně dát nelze) a klasický jednoduchý harvester v něm e-mailovou adresu nepozná. Bohužel však základní formát adresy je zachován, pouze se změnily dělící znaky. Tvůrcům harvesterů tak stačila malá úprava (kromě znaku „@“ hledat také „(na)“, „ZAVINÁČ“ atd.) a mohli vesele těžit dál. Samozřejmě pokud byste vymysleli něco originálního (ideálně s diakritikou, neb jazyková bariéra nás dobře chrání), je slušná šance, že uspějete i s touto ochranou. Jenže ta jednoduchá a snadno čitelná řešení už dávno někdo vymyslel (a harvestery je tedy znají) a všechna ostatní se přibližují drbání se levou rukou za pravým uchem.
Ještě horší možností je dávat na web e-mailovou adresu v podobě obrázku. Nejenže uživatele nutíme složitě e-mail opisovat (obrázek do adresního řádku klienta nezkopíruje, i kdyby se na hlavu postavil), přičemž samozřejmě nutně hrozí riziko překlepu, ale takové řešení nemá ani valnou účinnost. Rozpoznávání znaků na obrázcích je totiž technologie léta potřebná a tedy velmi dobře zvládnutá. Jistě, lze opět najít relativně účinné způsoby ochrany (třeba obrázek s adresou rozdělit na více částí), nicméně to už si zase snažíme useknout nohu kvůli krátkým kalhotám.
Jak to tak bývá, složité problémy mají jednoduchá řešení. A nejinak je tomu i v tomto případě. Stačí, když si uvědomíte, jak se fungují webové stránky. Tvůrce zapíše kód, kód si načte prohlížeč a podle něj zobrazí stránku. Když si místo prohlížeče představíte harvester, jsme takříkajíc u jádra pudla. Harvester totiž taky zpracovává kód stránky, nikoliv její výslednou podobu. Stačí tedy zajistit, aby se e-mailová adresa zobrazila až ve výsledku po interpretaci kódu stránky. Jinými slovy je třeba dovnitř e-mailové adresy vložit různé části kódu, které nebudou mít vliv na výsledný vzhled. Můžete začít třeba s obyčejnou kurzívou a tučným písmem.
p<strong></strong>epa@<em></em>dep<strong></strong>o.c<em></em>z
Tahle šílenost se uživateli ve výsledku zobrazí jako bezproblémů čitelná (i zkopírovatelná!) adresa „pepa@depo.cz“. Ovšem harvester z ní bude asi trochu zmaten. Nicméně mohlo by se stát, že harvester bude nejprve odstraňovat zbytečné části kódu (na to jsou šikovné knihovny), a pak by tato ochrana moc nepomohla. Můžete však zajít ještě dál a do textu vložit třeba obrázek o nulové velikosti (taktéž se nezobrazí nic) — ideálně doprostřed některého z tagů tučného písma / kurzívy (nebudou pak prázdné a jejich odstranění tedy už nehrozí).
p<strong><img src="" height="0" width="0" /></strong>epa@<em></em>dep<strong></strong>o.c<em>
<img src="" height="0" width="0" /></em>z
A uživatel stále vidí „pepa@depo.cz“. Avšak i v nulovém obrázku by velmi inteligentní harvester mohl vidět zradu. Zdaleka nejlepší je tedy použít tag SPAN (který sám o sobě nikdy nic nedělá) a dát mu nějakou neexistující (či lépe prázdnou) CSS třídu.
p<span class="notning">ep</span>a@<span class="nic">de</span>po<span class="prdlacky">.</span>cz
V takto „zapraseném“ kódu harvester spolehlivě nepozná nic. A neměl by ani poznat, že SPANy nic nedělají, protože to by musel sáhnout do CSS a nasimulovat si vzhled výsledné stránky. To — dovolím si tvrdit — žádnému tvůrci harvesteru za to stát nebude. Prostě raději ukradne jinde jiný e-mail. Samozřejmě, chcete-li mít ještě větší jistotu, použijte všechny triky s kódem dohromady (pozor na křížení odkazů!).
<span class="notning"p<strong><img src="" height="0" width="0" /></strong></span>
<span class="nic">epa</span>@<em></em>dep<strong></strong>o<span class="prdlacky">.</span>c
<em><img src="" height="0" width="0" /></em>z
Šílené, což? Nicméně uživatel stále uvidí jen to, co má — e-mailovou adresu, kterou půjde snadno zkopírovat. A komu by se nechtělo něco podobného vytvářet ručně, jistě si snadno napíše PHP funkci, která to dokáže. Nebo ji možná časem napíšu já a dám jí se k dispozici. Uvidíme.
Možná ten inteligentní harvester nezná funkci strip_tags(); :-)
Já používám metodu od Gyma, zakódování textu do ordinálních hodnot. Také to není neprůstřelná metoda, ale spam mi zatím žádný nechodí (na tuto zveřejněnou adresu). Výsledek vypadá nějak takhle: mailto Btw jak tak koukám do spamkoše, tak 19 z 20 spamů mi přijde na mé dvě stařičké adresy, oboje na centrum.cz
$novy='';
for($a=0; $a < strlen($stary); ++$a) {
$novy.= ‚&#‘.ord($stary[$a]).‚;‘;
}
Ukázkový výsledek komentář schroupal, takže to neuvidíte… :-)
Reakce na Dominik Dědiček @ 11.02.2009:
Ochrana to jistě není zlá, ale IMHO zcela nevhodná z hlediska uživatele. Nedá se zkopírovat, což kromě toho, že je to pro člověka opruz, znamená, že se musí opisovat a je slušná šance na překlep. Tedy pokud zrovna nemáš e-mail typu jan@novak.cz :-) Ale ještě bych viděl i další nevýhody – třeba obrázek nenajde prohlížeč na Ctrl+F, a tak podobně.
Reakce na mar.tan @ 12.02.2009:
Určitě nezná, neb harvestery nebudou zcela určitě psané v PHPčku ;-) Ale jinak máš samozřejmě pravdu, každá ochrana se dá prolomit… Jenže jde o to, jak je to náročné. Kdyby měl harvester obsahovat všechny triky, které jsme tu naznačovali, asi by těžil dost nechutně dlouho :-) Myslím, že je snazší, jít prostě o dům dál…
Taky používám jednu „svoji“ metodu. Není dokonalá ale za ta léta ji
roboti ještě nepřekonali. Ač je nesmírně primitivní 
Reakce na carnero @ 13.02.2009:
Nepochlubíš se jakou? :o)
Reakce na ELfkaM @ 14.02.2009:
Sakryš, já se zapoměl chlubit 
Používám jen kombinaci výše uvedených, takže mi to k chlubení nepřišlo. Ve zdroji můj e-mail vypadá následovně:
- carnero<span class=„nocss“>[</span>@<span class=„nocss“>:zavináč]</span>carnero<span class=„nocss“>[</span>.<span class=„nocss“>:tečka]</span>cc
Ve stylech je pak .nocss definováno tak, aby se nezobrazovalo. Výsledek je ten že s CSS je zobrazena jen e-mailová adresa. Bez CSS a tedy i pro roboty je pak tečka a zavináč doplněný o textový popisek. Dá se to i tak přelouskat, ale roboti to už roky neprošli.
To zní také velmi zajímavě :-) Ještě pár lidí se přidá a můžeme
o tom napsat knihu 
Díky za tip. Jsem v html naprostej amatér, ale před časem jsem našel toto řešení:
Trochu se mi na něm nelíbilo náhradní zobrazení zavináče a tečka, ale zase mi přišlo poměrně chytré zahrnutí mailto: , takže jsem samotnou adresu ještě proložil několika SPANy a doufám, že to bude fungovat.
Pokud někde uvádím mailovou adresu, řeším toto dilema. Dříve jsem používal (a) ale na to jsou roboti už „vycvičení“. Nyní to dělám tak, že si napíšu mailovku do obrázku, ten ještě rozdělím na dvě části a pak to teprve vložím na web. Trochu zdlouhavý způsob, ale myslím, že je to celkem dobrá ochrana.