Mnoho lidí se snaží na svých stránkách chránit emaily různými způsoby krkolomného zápisu. Dnes vám ukážu, jak napsat jednoduchý program, který z většiny stránek úspěšně vykuchá emailové adresy. Sami si tak můžete vyzkoušet, jestli je vaše stránka dostatečně chráněná.
Ná této stránce vložte do políčka URL webu, ze kterého chcete emaily číst. Potvrďte a chvíli počkejte. Systém zpracuje stránku a vrátí vám emaily, která na stránce našel. Pokud žádné nenajde, nevrátí nic. Ukázková stránka (původní stránka). Z jedné IP adresy je možné zadat email pouze padesátkrát, aby nedošlo ke zneužití. Aktualizace: Zdá se, že to trochu zatěžovalo server, tak jsem to omězil jen na sockování emailů na mé doméně.
Teď stručně ke způsobu, jak je to uděláno. Kód je dlouhý ani ne čtyřicet řádků. První krok je, že si převedu několik znaků. Následuje převodní tabulka:
" (at) " => "@"
"(at)" = "@"
" (dot) " = "."
"(dot)" = "."
"mailto:" = ""
"@" = "@"
"@" = "@"
"\n" = " "
"," = ""
";" =""
Teď jsem se zbavil většiny nepotřebných znaků. Samozřejmě by to šlo
napsat mnohem detailněji. Po tomto prohození už jen stačí projít
regulárním výrazem všechny odkazy a hledat v atributu href
zavináč. Pokud ho tam najdeme, máme email. Po hledání v odkazech
přichází na řadu přímo rozbor textu. Jako první odstraníme všechny
tagy, čímž se efektivně zbavíme ochran typu HTML komentář uprostřed
emailu nebo třeba zavináč vložený do nějakého neutrálního elementu.
Teď už máme text zcela připravený na konečné hledání. Stačí napsat
regulár, který v tomto textu najde všechny emaily (které už jsou
většinou v takovém formátu, že stačí triviální regulár; většinu
ochran jsme již odstranili) nebo stačí i mnohem trapnější řešení –
pomocí funkce explode() rozdělit text do pole a jako oddělovač
dát mezeru. Pak stačí projít pole a hledat zavináč.
Jak je vidět, napsat si jednoduchý nástroj na hledání emailů na stránce je práce na deset minut. Co z toho vyplývá? Nejspolehlivější řešení, jak oklamat takového robota, bude napsat email v takové podobě, ve které ho těžko přečte i člověk, případně nějaké jiné stížení (například email jako obrázek). Což je ovšem zároveň velmi nesmyslné řešení. Takže závěr: emaily piště hlavně tak, ať je snadno dostupný pro návštěvníky. Roboti to stejně časem nějak přelouskají, takže bude lepší se spoléhat na kvalitní antispam přímo v emailové schránce.
David Grudl · 14. červenec 2008, 06:03 · #
Začal bych tím, že bych celý dokument prohnat přes html_entity_decode() a pak teprve prováděl chytřejší záměny " (at) " ⇒ „@“ atd.
zakjan · 14. červenec 2008, 07:02 · #
Dokud roboti nebudou umět javascript, máme obranu. Na své stránce zatím nemám žádný text, jen jméno, jednoduše zamaskovaný email a obstál :).
Timy · 14. červenec 2008, 13:04 · #
@David Grudl: Tak tuhle funkci jsem zrovna nevygooglil. Našel jsem nějakou jinou funkci na dekódování entit, ale nějak nefungovala, tak jsem se na to vykašlal, protože pro ukázku to zase tak potřebné nebylo.
Timy · 14. červenec 2008, 13:06 · #
@zakjan: To není dobré řešení, protože s vypnutým javscriptem uvidí uživatel prd.
tio · 14. červenec 2008, 14:11 · #
dnes uz obrovske percento ma zapnuty JS. A ja by som to asi zrobil obrazkom:) generovanym Phpckom. V podstate vec na par minut:)
Huggi · 14. červenec 2008, 14:40 · #
porad jde misto zavinace napsat (zavinac) ne?..na jiny jazyky krom anglictiny myslim tvurce myslet nebude, a i cizinec to bez problemu pochopi..
Timy · 14. červenec 2008, 14:47 · #
@tio: Ale stále někdo ne. A co když si zrovna tenhle člověk u tebe objedná počítač za padesát tisíc? :-)
@Huggi: Záleží na tom, kdo to bude psát. Já to chtěl ukázat princip, ne komplexní řešení. Doplnit do tabulky
"(zavinac)" => "@"je otázka pár sekund. Kdyby to psal čirou náhodou někdo u nás, tak to tam určitě šoupne. Každopádně je to další znepříjemnění pro uživatele, který musí přepisovat řetězce za zavináče nebo tečky. Mě to vždycky akorát otravovalo.Suro · 14. červenec 2008, 15:33 · #
Spamové roboty sú čoraz sofistikovanejšie. Nerobí im problém prelúskať #64 (a podobné), dokonca aj „zle“ zaštvorčekovaný obrázok verifikačného kódu sú schopné prečítať. Osobne už nejaký ten rôčik nahradzujem znak @ obrázkom daného fontu, človek často krát na to ani nepríde, len sa nedá jednoducho skopírovať. Aj nahradzovanie znaku slovom je dobré, ale človeka to už otravuje stále čítať (zavináč) (bodka) (-at-), nuž ale funguje to. Dobré metódy chránenia sú prepchať email medzerami, trebars za každým znakom jednu a v CSSku tomu dať záporný, alebo nulový letter-spacing.
JavaScript je nevyhnutnosť. V dnešnej dobe to je hlúposť aby si ho človek vypínal, aj keď by mali byť stránky prístupné často je to úplne naopak. Jednoducho kto chce surfovať bez zbytočného uvažovania či vidí menu, otvárajú sa mu pop-up okná s fotkami etc, nech má JS zapnutý.
Ešte čosi k spam botom, pravdaže časom prejdu cez akúkoľvek „ochranu“, ale asi najlepšie je uvádzať svoj email čo najmenej (preto sa skôr snažím dávať ich ústne či písomne na papieri, alebo SMS) a totálne sa vyvarovať niečomu ako je: info@domena.cz, domena@domena.cz, shop@domena.cz a ešte pár prípadov, ktoré ma momentálne nenapádajú, lebo tieto sú spamované prakticky automaticky (príšerné spojenie :) )
Timy · 14. červenec 2008, 16:05 · #
@Suro: Tady nemusí jít nutně o normální prohlížeče, ale o zařízení, která JS ani interpretovat neumí. Nevím jak je na tom podpora JS v mobilech, ale různé čtečky a textové prohlížeče si zkrátka s JS neporadí, ani kdyby se člověk na hlavu stavěl.
Radek Hulán · 18. červenec 2008, 21:21 · #
Kódovat email je nesmysl. Je to jako říkat klientovi „pro naše pohodlí sereme na vaše pohodlí“. Když to vidím, jdu jinam…
Shaman · 18. červenec 2008, 21:26 · #
Naprostý souhlas se závěrem. Dnes už nemá význam jakkoliv emaily před roboty skrývat, je třeba to řešit na straně schránky. V opačném případě člověk jen znepříjemňuje život návštěvníkům a potenciálním zákazníkům. A koneckonců, i kdyby se mu načas podařilo emaily dobře skrýt na vlastních stránkách, nesměl by je používat na jiných webech.
Petr Staníček · 19. červenec 2008, 01:52 · #
Bezpečnost? Chráněná? Vážně věříte tomu nesmyslu? Každá vaše emailová adresa je už v tolika databázích a existuje tolik cest, jak získávat další (sosání z webu je jen jednou z mnoha), že je naprostým plýtváním energií se snažit nějak skrývat mail na webu.
Já píšu svou e-mailovou adresu všude v otevřeném tvaru a podobné opičárny považuju – s odpuštěním – leda za paranoiu. Mám několik (nepoužívaných) adres, které se zaručeně nikdy nikde neobjevily, a stejně na ně chodí spamy. Dokud se nezmění mailové protokoly je jedinou/nejlepší ochranou účinný spamfiltr a ne tohle hraní si na tajné agenty. ;-)
Muflo · 19. červenec 2008, 02:31 · #
@Radek Hulán, @Shaman: Souhlas.
Svůj e-mail bráním maximálně způsobem, který uživatel nepozná (náhodné znaky zapsat pomocí entit). Něco jako (at), (zavináč) atd. se mně nezdá jako ideální. Laikové to nemusí pochopit a můžete tak přijít o nějakou zakázku…
Jinak své formuláře proti útokům bráním pomocí otázky, kterou za uživatele vyplní a schová javascript (pokud je zapnut). Něco jiného je ale formulář na registraci. Tam je nutné použít minimálně nějaký opis obrázku či další ochrany, protože je pravděpodobnější, že útočník napíše script přesně na váš web.
Timy · 19. červenec 2008, 11:24 · #
@Petr Staníček: Jen tak pro mou informaci – závěr byl přečten? :-)
ehmo · 19. červenec 2008, 15:33 · #
vsetky automatizovane kodovanie/dekodovania ktore maju nejaky logicky zaklad su uz dnes davno zahrnute v botoch. priklad som aj veci typu nieco(toto)nieco(dot)nieco. boty vyhladavaju retazce, ktore maju stale rovnaku formu. napisat nieco podobne je len o znalosti regulariek a trosku si prejst weby. najlepsie, ked uz chces chranit mail, je pouzit captchu, aj ked som dost proti. proti spamu je potrebne bojovat na inej urovni zavazdanim DKIM a PKI. gmail a yahoo uz konecne funguju spolu s paypalom, dalej sa uvidi
Josef Stříbný · 21. červenec 2008, 10:23 · #
Tak v tomhle s Tebou a Hulánem naprosto souhlasím, víceméně je to zbytečné a otravuje to obyčejné návštěvníky a potenciální zákazníky.