Avatar billede Claus Mester
05. maj 2012 - 13:16 Der er 19 kommentarer og
1 løsning

Sløring af e-mail adresse

Jeg fandt den her på nettet, men syntes den virker for let. Hvad siger i - er den sikker nok til at undgå alt for meget spam med?

<script type='text/javascript'>
        bruger = 'FØRSNABELA'
        domaene = 'DOMÆNE'
        topdomaene = 'COM/DK'
        emailadresse = bruger+'@'+domaene+'.'+topdomaene
        document.writeln('<a href="mailto:'+emailadresse+'">'+emailadresse+'</a>')
</script>
Avatar billede pstidsen Novice
05. maj 2012 - 15:06 #1
Avatar billede pstidsen Novice
05. maj 2012 - 15:08 #2
Avatar billede pstidsen Novice
05. maj 2012 - 15:09 #3
Avatar billede mireigi Novice
05. maj 2012 - 15:36 #4
Komplet løsning med kryptering, forhindring af automatisk aktivering eller kopiering:

Libraries

Code
Du skal selv erstatte fremhævet tekst med dine udgaver
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>JavaScript Email-Mask</title>
    <script type="text/javascript" src="jquery-1.7.2.js"></script>
    <style type="text/css" media="screen">
        #Wrapper
        {
            width: 971px;
            margin: 0 auto;
            font-family: Verdana;
        }
    </style>
</head>
<body>
    <div id="Wrapper">
        <a href="mailto:blabla@hotmail.com" class="EmailLink">blabla@hotmail.com</a><br />
        <a href="mailto:blabla@hotmail.com" class="EmailLink">dgdsfgds@hotmail.com</a>
    </div>
    <script type="text/javascript">
        var intEmailMaskShift = 1;

        $(document).ready(function ()
        {
            $("#btn_MaskEmail").click(function () { maskEmail(); });
            $("#btn_UnmaskEmail").click(function () { unmaskEmail(); });
            $(".EmailLink").each(function () { maskEmail(this); });
        });

        function maskEmail(target)
        {
            var strEmail = $(target).attr("href");
            var strMaskedEmail = "";
            for (var i = 0; i < strEmail.length; i++)
            {
                strMaskedEmail += String.fromCharCode(strEmail.charCodeAt(i) + intEmailMaskShift);
            }

            $(target).attr("href", "java script:void(0)");
            $(target).html($(target).html().replace("@", "<span style=\"font-size: 0;\">(fjern paranteser og indhold)</span>@<span style=\"font-size: 0;\">(fjern paranteser og indhold)</span>"));
            $(target).mouseup(function () { unmaskEmail(strMaskedEmail); });
        }

        function unmaskEmail(email)
        {
            var strUnmaskedEmail = "";
            for (var i = 0; i < email.length; i++)
            {
                strUnmaskedEmail += String.fromCharCode(email.charCodeAt(i) + intEmailMaskShift * (-1));
            }

            window.open(strUnmaskedEmail);
        }
    </script>
</body>
</html>
Avatar billede mireigi Novice
05. maj 2012 - 17:23 #5
Du kan forresten bare ignorere dette:
$("#btn_MaskEmail").click(function () { maskEmail(); });
$("#btn_UnmaskEmail").click(function () { unmaskEmail(); });


Det var blot noget jeg satte ind for at teste det i en form inden det blev ført over på links.
Avatar billede Claus Mester
06. maj 2012 - 05:32 #6
Tak for respons og forslag alle sammen. Men mit spørgsmål var, om koden jeg skrev er god nok til at undgå spam med?

#3: Er det effektivt nok?

#4: Helt fantastisk. Tak for input. Men er det nødvendigt med så meget kode, eller kan fx #3 klare opgaven ligeså godt?
Avatar billede pstidsen Novice
06. maj 2012 - 10:56 #7
#5: Tror jeg da bestemt.
Avatar billede mireigi Novice
06. maj 2012 - 13:43 #8
Hvis du vil være helt sikker, er den i #3 ikke nok, desværre.

Der er et hav af bots derude, og nogle af dem kigger i kildekoden, andre besøger på email-linket, mens nogle igen kopierer den viste tekst til linket.

De som min kode gør, er følgende:
1. Fjern stien (href) for alle email links
2. Krypter stien og brug som parameter i onmouseclick
3. Tilføj tekst til linkets tekst, så kopiering er ubrugelig
4. Ved klik på linket sendes brugeren til det dekrypterede link
5. Al aktivering af linket, udover klik med musen er slået fra

Det gør linket ubrugeligt for alle andre end reelle brugere.
Avatar billede keysersoze Guru
06. maj 2012 - 20:59 #9
Hvad er gevinsten ved #4?
Avatar billede mireigi Novice
06. maj 2012 - 21:26 #10
At email links kun virker, hvis en bruger klikker på dem. Mail-adressen kan ikke kopieres, og den bliver kun dekrypteret, hvis brugeren klikker på linket.

Stopper spam-bots fra at fange den.
Avatar billede keysersoze Guru
06. maj 2012 - 21:57 #11
Til gengæld kan alle bots læse mail-adresserne i kildekoden?
Avatar billede pstidsen Novice
07. maj 2012 - 07:38 #12
Det er jo forskelligt hvordan bots søger, men den mest oplagte metode (set fra bots'ne og deres ejeres synspunkt) er da selvfølgelig at kigge efter a href mailto tags.

Jeg fik lige en idé, som nogle af de mere garvede programmerer må svare på: Kan man ikke bare pakke mailen ind i PHP? PHP koden kan jo ikke ses af bots.
Avatar billede Claus Mester
07. maj 2012 - 08:27 #13
#11: Så det jeg kan uddrage af debatten her er, at det stort set er lige gyldigt hvilken løsning man vælger af dem der er nævnt, for bots vil finde en vej hvis de virkelig vil?

#12: Lyder interessant. Er med på en kigger. Men, uden at have ret meget forstand på php, vil adressen så ikke blive printet i selve kildekoden og dermed kunne læses af bots som de øvrige muligheder?
Avatar billede mireigi Novice
07. maj 2012 - 08:44 #14
Den bedste løsning, som ikke er givet her, da dette er i JavaScript sektionen, er at kryptere mail-adressen i PHP/ASP, og så dekryptere den med JavaScript.

Så kan den ikke læses i kildekoden.
Avatar billede Claus Mester
07. maj 2012 - 08:50 #15
#14: Er det en mulighed du kan poste? Evt på http://pastebin.com/.
Avatar billede keysersoze Guru
07. maj 2012 - 09:32 #16
#12 serverside-sprog som ASP/PHP kan som sådan ikke sløre noget - det er klientsprogene som HTML/JavaScript, der er afgørende for hvad botsene kan læse. netop mailto er en klient-ting man er nødt til at sende med ud så dér hjælper serverside ikke noget - det man dog kan vinde ved at køre noget serverside er ved fx at lave en kontaktformular, men dem vil man så formentlig stadig skulle beskytte af noget captcha eller javascript.

#13 langt de fleste, hvis ikke alle, bots læser kildekode men de afvikler som sådan ikke kildekode og derfor vil en mekanisme som #4 ingen effekt have for mailadressen står direkte i kildekoden. Det som foreslået i selve spørgsmålet er den rigtige vej at gå - altså hjemmelavet tilfældig kode, for i teorien kan du oplære en bot til også at forstå javascript (også en løsning som foreslået i #14) men det er selvfølgelig noget der koster tid. Så hvis der er ½mio sites, der benytter samme javascript-kode kan det betale sig at udvikle en parser til det - men er det kun din ene side så sker der næppe noget.
Avatar billede mireigi Novice
07. maj 2012 - 12:29 #17
@noculaus (#15):

Her er den opdaterede kode.

Da kryptering sker i ASP i stedet for JavaScript, behøver du ikke længere JQuery til at finde email links.

http://pastebin.com/Habpgz6t
Avatar billede mireigi Novice
04. juni 2012 - 23:39 #18
Fandt du en løsning?

Snart en måned siden vi har hørt noget.
Avatar billede Claus Mester
06. juni 2012 - 17:46 #19
Jeg har bikset og bakset med det og finder det lidt for tidskrævende og avanceret lige nu. Kan ikke lige få det til at virke. Så jeg er gået med en simpel maskering som nævnt i indlæg #3.

mireigi: Mange tak for en masse input og forslag. Smid et svar så uddeler jeg point.

I andre, mange tak for jeres input!
Avatar billede mireigi Novice
07. juni 2012 - 00:10 #20
Velbekomme
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester