Autor Zpráva
CZghost
Profil
Nazdar. Napadlo mě jedno takové sice dost omílané, avšak ne úplně prořešené téma, a to jak utajit e-mailovou adresu před spamboty. Dá se nahradit znak zavináče za HTML entitu, vypsat e-mail pozpátku a pomocí JS ho přeskládat do normální podoby, dá se e-mail vypsat pomocí JS úplně, ale nakolik jsou tyto způsoby bezpečné, respektive, na kolik procent uchrání e-mail před spambotem?

Napadla mě jedna myšlenka, vypsat e-mail pomocí CSS (nebo alespoň jeho části). Ukázka je sice trošku prasárna, ale spambota by to mělo zbrzdit, už jen kvůli tomu, že zavináč se vypisuje pomocí CSS. Dalo by se to udělat i trošku jiným způsobem, například <span class="email" data-jmeno="marpolda" data-sluzba="gmail" data-domena="com"></span> by po patřičném zápisu CSS mělo vypsat moji hlavní e-mailovou adresu. Span musí být prázdný, jelikož se e-mail vlastně vypíše až za ním (nebo před ním, záleží na tom, jestli použiju pseudotřídu :before nebo :after). Pomocí vlastnosti content bych potom poskládal e-mail nějak takto: <data-jmeno>@<data-služba>.<data-domena>, přičemž data-domena znamená generickou doménu služby (pro gmail je to com, pro seznam, email, centrum, atlas a jiné české služby to je cz).

Mě zajímá Váš názor, jak by se Vám líbila tato technika utajení adresy před spamboty? Nedokážu zaručit stoprocentní ochranu, možná existují roboti, kteří dokáží tuto techniku rozpoznat a zkusí aplikovat CSS na danou stránku a použít vyhledávací filtr... Nicméně by to většinu robotů mělo spolehlivě odzbrojit, navíc je kód univerzální v tom, že si jednotlivé složky uživatel nastaví pomocí data-atributů. Mohlo by se to uchytit, mně se to zdá celkem praktické.
Fisir
Profil
Reaguji na CZghosta:
Průšvih bude u prohlížečů, které dané vymoženosti nepodporují.
CZghost
Profil
Fisir:
Ovšem nápad je to celkem dobrý. Ty vymoženosti můžu ve starších prohlížečích (typicky Internet Explorer 8 a nižší) zapnout javascriptem nalinkováním na specifikace, potom by to mohlo relativně fungovat. Nějak jsem líný vymýšlet forky pro starší prohlížeče, stejně ty staré jednou vymizí a budou stejně vzácné jako dnes IE 5 a nižší, šestka už je také na seznamu ohrožených druhů :-) Google Chrome, Firefox, Opera, tady bych se toho nebál, jelikož jsou vydávány vždy aktuální verze a automaticky se aktualizují (upgradují). Vypisování pomocí JS narazí u robota interpretující JS, výpis pomocí PHP zase vyžaduje server a navíc je naprosto neúčinný, jelikož e-mail vypíše přímo do kódu. Ale výpis pomocí CSS se zdá být novinkou, takže se dá předpokládat, že slušná řada spambotů zde narazí. No uvidíme, jak se situace vyvine, prozatím budu zkoušet u sebe na localhostu :-)
Fisir
Profil
Reaguji na CZghosta:
Podobný (ne–li stejný) dobrý nápad už tato Diskuse bohužel viděla. Můžeš si to pročíst, jsou tam i protiargumenty. Takže tohle je celkem zbytečná duplicita.

Vypisování pomocí JS narazí u robota interpretující JS
Myslím, že spamovacích robotů interpretujících JavaScript není zas tolik. Je levnější nenajít pár adres ale procházet web poměrně rychle, než každou stránku načítat v prohlížeči a až tam emailové adresy hledat. Roboti většinou jen hledají fragmenty emailových adres po celé stránce, proto se ti může zdát, že interpretují JavaScript.

budu zkoušet u sebe na localhostu
Na localhostu můžeš využít klasickou metodu vypisování emailové adresy – rovnou do kódu. Na tvůj localhost se totiž moc robotů nedostane.

Ale mně osobně se to prostě nelíbí. Je to pofidérní řešení, které může, ale i nemusí fungovat. Raději bych energii investoval do správného emailového filtru. Jen tak pro zajímavost, už asi rok a půl mi na webových stránkách visí email, ale přišly mi pouze dva spamy. Pravdou ale je, že to nejsou nijak extra hodnocené stránky, návštěvnost se pohybuje okolo stovky přístupů denně.
CZghost
Profil
Fisir:
Na tvůj localhost se totiž moc robotů nedostane.
Já to myslel v podobě podpory v prohlížečích (ne všechny IE podporují content, IE 11 umí ve vývojářských nástrojích simulovat starší verze IE).

Myslím, že spamovacích robotů interpretujících JavaScript není zas tolik.
Já bych na to moc nesázel. Ještě se rozmnoží a co pak :-)

Podobný (ne–li stejný) dobrý nápad už tato Diskuse bohužel viděla.
Sakra, na toto jsem nějak zapomněl :D Jak říkám, uvidíme, jak se situace vyvine. Je možné, že se podobné vymoženosti jen tak nedožádáme, je možné, že příležitost ji využít se v brzké době zvýší.

Roboti většinou jen hledají fragmenty emailových adres po celé stránce, proto se ti může zdát, že interpretují JavaScript.
Takže vlastně i vyjádření data a času za zavináčem a jméno diskutujícího před ním může pochopit jako e-mailovou adresu?



V Internet Exploreru se to dost blbě označuje, kopírování je možné jen v případě okolního textu. Zkusím ještě nějaké hrátky s Javascriptem, místo spanu použít odkaz (pomocí PHP bych detekoval mobilní přístup a podle toho přidal onclick veškerým emailům zakazující prokliknutí).

Teď je ještě otázkou, jestli pravý odkaz nebude překážkou, v tom případě bych použil span a přiřadil mu onclick se změnou location.href. Stačilo by nějak takhle:
<span class="email" data-name="marpolda" data-service="gmail" data-domain="com"></span>
...
<script type="text/javascript">
emaily = document.getElementsByClassName("email");
for(var i = 0; i < emaily.lenght; i++) {
    emaily[i].onclick = function(){
        <?php if(stripos($_SERVER["HTTP_USER_AGENT"], "mobile") !== false): ?>
        location.href = "mailto:" emaily[i].data("name") + "%40" + emaily[i].data("service") + "." + emaily[i].data("domain");
        <?php endif; ?>
        }
}
</script>
Fisir
Profil
Reaguji na CZghosta:
Takže vlastně i vyjádření data a času za zavináčem a jméno diskutujícího před ním může pochopit jako e-mailovou adresu?
Teoreticky ano (prakticky jsem s žádným spamovacím robotem nepracoval). Ale jemu je to přece jedno, jenom spamuje a co na tom, že pár emailových adres je neplatných?

Mimochodem, zajímavý postup, nejdříve si vymyslet revoluční řešení a až potom zkoumat, jestli je to technicky možné. A zadalší, podíval jsem se na tu tvojí ukázku. Chtěl bych tě upozornit, že zas až tak ty roboti blbí nejsou. Teď si nejsem češtinářsky jist, dají se spamovací roboti klasifikovat jako přemýšlející? Rozhoduje to totiž o životnosti.
yFang
Profil
CZghost:
Nejde to označit a zkopírovat (nekopíruje se zavináč), z uživatelského hlediska extrémně nepohodlné.
CZghost
Profil
yFang:
Jo, na tom budu muset ještě trochu zapracovat :-( Respektive sledovat vývoj prohlížečů, třeba to není záměr, že text vypsaný pomocí CSS nelze označit a zkopírovat. Zajímavé je, že ono to označit jde, ale musí být okolo ještě nějaký text, ono to jde dokonce zkopírovat, ale zase musí být okolo text. Tohle funguje v IE 11, v jiných jsem to ještě netestoval :-)

Prozatím to řešit javascriptem tak, že vypíšu text dovnitř elementu pomocí data-atributů.

<script type="text/javascript">
emaily = document.getElementsByClassName("email");
for(var i = 0; i < emaily.lenght; i++) {
  emaily[i].innerHTML = emaily[i].data("jmeno") + "&#0064;" + emaily[i].data("sluzba") + "." + emaily[i].data("domena");
  <?php if(isMobile): ?>
  emaily[i].onclick = function(){
    window.location.href = "mailto:" + emaily[i].data("jmeno") + "@" + emaily[i].data("sluzba") + "." + emaily[i].data("domena");
  };
  <?php endif; ?>
}
</script>

Ten číselný kód zavináče jsem napsal tak, že jsem dal před znaménko mřížky robíječ, protože diskuse pokaždé převedla číselnou entitu na znak :-(
To PHP tam je jenom pro zajištění klikání v mobilních prohlížečích :-)
pcmanik
Profil
CZghost:
emaily je globálna premenná a tú metódu data si si ako vytvoril? Tiež si "zasvinil" globálny priestor? Lebo inak sa na to používata dataset.nazov
To ale nemá podporu pre IE < 11 takže musíš použit get/setAttribute ktoré je aj tak rýchlejšie.
CZghost
Profil
pcmanik:
Ah, getAttribute mě nenapadl, díky :-) Každopádně vyzkouším více variant, díky za rady :-)

Vaše odpověď

Mohlo by se hodit

Příspěvky nesouvisející s webem budou odstraněny.

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: