Ochrana e-mailové adresy před spam-roboty v ASP.NET
- Vložil Trupík 2/27/2006 7:17:42 PM
-
Proč chránit emailové adresy?
Emailové adresy je potřeba uvádět na webu, nejde to ale jen tak, protože
nijak nechráněná emailová adresa se snadno stane kořistí crawlerů
(emailových harvesterů), kteří
prolezají internetové stránky jednu za druhou a sbírají emailové adresy. Získanou
sbírku emailů potom mohou například prodat firmám, které rozesílají spam.
V takové databázi přirozeně nikdo nechce být a zde si můžete stáhnout ASP.NET
komponentu, která vás toho uchrání.
Způsobů ochrany emailové adresy vypsané do stránky je mnoho, uvedu ty, které mě
zrovna napadají
Žádná ochrana
Pokud vypisujete svou emailovou adresu do svých stránek bez jakékoliv ochrany,
je to váš problém, ale vypisovat takto adresy uživatelů vašich stránek, za to by
se mělo nakopat do ...
"Opatrný formát adresy"
Roboti sbírající emaily jsou obvykle postavené na prohledávání textu a porovnávání
jeho částí vůči regulárnímu výrazu. Pasou především po sekvenci "mailto" (ty
jsou součástí odkazu, pokud je adresa vypsána přímo jako odkaz, na který jde kliknout
a otevřít tím okno webového klienta) a znaku zavináče - @ (který je součástí každé
adresy). Když oželíme "klikatelný odkaz" a adresu vypíšeme třeba takhle:
petr.voprsalek(zavinac)hotmail.com,
žádný robot si jí nevšimne. Problém je
již zmíněná absence odkazu a také to, že návštěvník stránky nemůže jednoduše text adresy
zkopírovat, ale musí ho opsat. Bezpečné to je ale 100%.
Html entity
Pokud opět oželíme odkaz a zavináč (popřípadě některé další znaky v emailové adrese,
třeba tečku nebo kterékoliv jiné) nahradíme jeho html entitou @
(a další znaky zase jejich entitami), některé z robotů to zmate, ale vsadím krk,
že jsou již roboti, kteří si entity překládají, takže vlastně jako by se nic nestalo.
Přesto zakrytí entitami považuje mnoho lidí za dostatečnou ochranu.
Obrázek
Misto adresy, můžem vložit do stránky obrázek, na kterém je adresa napsaná -
roboti obrázky nijak neinterpretují, lidi ano. Odřízneme tak ale uživatele, kteří
si obrázky nestahují (mají je vypnuté) - třeba ty, co se na stránku dívají skrz
mobilní telefon nebo zrakově postižené.
JavaScript
Adresu můžeme nechat vypsat do stránky JavaScriptem. Roboti JavaScript neumějí,
proto ho ignorují. Takto dokonce můžeme vložit i odkaz. Problém je, že někteří
uživatelé mají JavaScript vypnutý (těm nabídneme alternativní <noscript> verzi).
Další....
Jsou jistě i další metody (rád se nějakou dozvím), například na
intervalu
je
jeden návrh - takovýto CSS kód, který rendruje text pozpátku, adresu pak vložíme
do stránky taky pozpátku (třeba moc.liamtoh@kelasrpov.rtep). Ochrana je to dobrá ale adresa zase nejde
zkopírovat přes schránku (zkopíruje se adresa pozpátku).
.pozpatku
{
unicode-bidi:bidi-override;
direction: rtl; /*right - to - left */
color:#c00;
}
Moje řešení: User-Control komponenta v ASP.NET
Pokud vaše stránky používají ASP.NET, můžete si stáhnout komponentu, kterou
používám já na těchto stránkách. Inspiroval jsem se na
CodeProjectu.
Idea je stejná, jako v článku Jos Branderse - napsat komponentu, která bezpečně
vloží do stránky emailovou adresu.
Pro uživatele/browsery vybavené JavaScriptem se vloží JavaScriptem vygenerovaný odkaz,
pro ostatní se adresa vypíše v "opatrném formátu". (Tady je rozdíl v mojí komponentě -
Joe Branders totiž místo "opatrného formátu" uživatelům bez JavaScriptu předkládá
obrázek. To je ale podle mě zbytečně složité a výsledek za to nestojí.
Vlastní použití mojí komponenty:
Stačí stáhnout si zdrojový kód v zip balíku.
SafeEmail.zip
Uvnitř najdete soubory SafeEmail.aspx a SafeEmail.aspx.cs, ve kterých je třída definovaná a soubor Default.aspx a Default.aspx.cs, kde jsou uvedeny příklady použití komponenty.
Ve vašich stránkách se na soubor s komponentou odkážete ASP.NET direktivou
Register takto:
<%@ Register TagPrefix="SE" TagName="SafeEmail" Src="SafeEmail.ascx" %>
A v kódu stránky pak můžete psát:
<SE:SafeEmail
ID="Adresa1"
Address="petr.voprsalek@hotmail.com"
LinkText="Petr Vopršálek"
LinkCssClass="maillink"
Title="Zaslat email"
runat="server"
/>
Vysvětlení atributů (nejlépe jim porozumíte, pokud si otevřete soubor s příklady Default.aspx):
- Address: adresa, kterou chcete vložit do stránky
- LinkText: text, který bude mezi tagy <a></a> (nepovinný - defaultně adresa)
- LinkCssClass: CSS třída, která bude přiřazena odkazu - atribut class tagu <a> (nepovinný)
- Title: titulek odkazu - atribut title tagu <a> (nepovinný)
Pokud atribut Address nedostane platnou emailovou adresu (kontroluje se jen přítomnost znaku zavináč),
vyrendruje se pouze tento zadaný text.
Komponentu můžete používat jak chcete, máte volné ruce v úpravách kódu (je
prostý, ale drobné úpravy může potřebovat každý). Pokud budete chtít něco vědět,
zeptejte se. Pokud komponentu použijete, budu rád, když odkážete na tento článek
(ale nenutím vás).
Ohodnoťte prosím užitečnost článku