Dölj emailadresser för spam-robotar
2008-07-28 - atlas, email, robotar, spam
0
walleposter1big
Om du är webutvecklare så är du kanske medveten om problemet med att skriva ut e-post-adresser i källkoden så dom kan bli funna av robotar som likt Google söker internet efter giltiga e-postadresser att skicka spam till. Atlas använder sig av två system för hur detta hanteras, beroende på hur "säker" siten vill vara. Jag tänkte gå igenom dom två metoderna här, om det är någon som är intresserad.

Metod 1: JavaScript

Den snyggaste lösningen är att använda sig av Javascript för att visa en kodad e-postadress. Fördelen med detta är att slutresultatet blir precis som om man hade skrivit adressen rakt upp och ned, och den blir klickbar och fungerar precis som vanligt.
Steg ett är att koda e-postadressen, och det gör vi genom att lägga till skräptecken och använda oss av rot13, så att strängen ser helt kacka ut i koden. Det betyder att adressen "" ser ut så här i koden:

Text

Maila mig på <script type=" text / javascript "> em("| !w(!b<<a>winkn<!f|>@!!r)>x!(y!<h >a>|q()u><.<winktounge:<b |z<wink>") </script>

Resultat

Maila mig på

PHP

function encode_email($mail){         $chars = array(">", "|", "<", " ", "wink", "(", "!");         foreach (preg_split("//", $mail) as $c) $s.= $chars[rand(0, count($chars)-1)] . $c . $chars[rand(0, count($chars)-1)];         $s = str_rot13($s);         return "em("$s"wink"; }

JavaScript

String.prototype.rot13 = function(){ return this.replace(/[a-zA-Z]/g, function(c){ return String.fromCharCode((c <= "Z" ? 90 : 122) >= (c = c.charCodeAt(0) + 13) ? c : c - 26); }); }; function em(s){ s = s.replace(/[><s!|)(]/g, ""); s = s.rot13(); document.write("<a href="mailto&#58;" + s + "">" + s + "</a>"); }
Så det som händer ovan är att PHP-funktionen används för att göra om email-adressen till gibberish och sen anropas en javascript-funktion för att skriva ut den riktiga adressen samt en länk så man kan klicka på den. Så länge användaren har javascript påslaget så fungerar detta perfekt.
Men om han inte har det då? Ja, då kan man lägga till en NOSCRIPT-tagg och där lägga in email-adressen som en bild, men att skapa en sådan bild är inget jag går in på här.

Metod 2: PHP

En nackdel med javascript-metoden är att robotar skulle kunna använda sig av en riktig javascript-tolk innan dom går igenom koden, vilket skulle exponera adressen. Ett sätt att dölja adressen helt från koden är att använda ett till PHP-script för att skapa länken till mailet. Resultatet blir så här:

Text

Maila mig på <a href="/sendmail.php?sendmail=S6DF54nz9hLKANMJgfqJ5xnP5wo20%3D">e-post</a>
Och sen har du ett php-script som heter sendmail.php som ser ut så här:

PHP

if ($_GET["sendmail"]){         header("Location: mailto:" . code($_GET["sendmail"])); }
På det viset så finns det inget som liknar en e-postlänk i koden, och när man klickar på länken så fixar ett php-script själva avkodningen och sedan skapar en mail-länk. Jag vill inte här gå in på vad min code()-funktion gör, men det är en reversibel kodning av en textsträng som bara Atlas kan koda och avkoda. Det är samma funktion jag använder för att skapa länken ovan. Det finns exempel på sådana på nätet om ni vill skapa egna.
Fördelen med den här metoden är att det ser ut som en "normal" länk som robotarna struntar i eftersom dom förmodligen utgår från att det går till ett kontaktformulär.