EMail links verschleiern mit js 2 Meinung zu Quellcode

Hyper Lord

Mitglied
Hallo, ich hoffe es ist auch erlaubt einfach nur eine oder mehrere Meinungen einzuholen...
falls nicht, bitte ich um entschuldigung!

Ich habe versucht ein js only Loesung ohne jquery zu erstellen um Emails for den E-Mail-Harvester zu schuetzen.

Funktioniert auch erstmal soweit.

Meine Frage ist nun:
1. ist das ausreichend?
2. ist der ansatz gut oder ist die idee totaler bloedsinn?

Also hier mal der Code:

Javascript:
//mailClass -> classname when is set on the specified a tags
        //secString -> set own secure string
        var EMAILDEFENDER = function(mailClass, secString) {
            var sec         = secString || 'EMailDefenderV1.0-Sicherheitsphrase'; //need to be change or set own param!!!
            var tag           = 'a'+((mailClass)?'.'+mailClass:'');
            var self        = this;
          
            var _init = function() {
                window.addEventListener("load", function(event) {
                    var elems = document.querySelectorAll(tag);
                    for(var i=0;i<elems.length;i++) {
                        if(elems[i].href.indexOf('mailto:')>-1){
                            self.Cloak(elems[i]);
                        }
                    }
                });
            };
            var _getCurrentStyle = function(elem,prop) {
                return (elem.currentStyle)? elem.currentStyle[prop]:
                    (window.getComputedStyle.getPropertyValue)? window.getComputedStyle(elem, null).getPropertyValue(prop) :
                        window.getComputedStyle(elem)[prop];
            };
            var _maskHtml = function(email, opts) {
                var canvas = document.createElement('canvas');
                canvas.width = opts['width'];
                canvas.height = opts['height']+5;
                if (canvas && canvas.getContext) {
                    var ctx = canvas.getContext("2d");
                    if (ctx) {
                        ctx.font = opts['font-weight'] + " " + opts['font-size'] + " " + opts['font-family'];
                        ctx.fillStyle = opts['color'];
                        ctx.fillText(email, 0,opts['height']-1);
                        if(opts['text-decoration'] == 'underline') {
                            var text = ctx.measureText(email);
                            ctx.fillRect(0, opts['height']+1, text.width, 2);
                        }
                    }
                }
                return canvas.toDataURL('image/png');
            };
            var _uncloakString = function(cloaked) {
                return 'mailto:'+(CryptoJS.AES.decrypt(cloaked.replace('mailto:', '').toString(), sec)).toString(CryptoJS.enc.Utf8);
            };
            this.Cloak = function(elem) {
                // get current width and height of the tag, neccessary to set correct picture size
                var width = elem.offsetWidth, height = elem.offsetHeight;
                //get href value and encrypt it, delete innerHtml
                var href = elem.href.replace('mailto:','');
                elem.href = 'mailto:'+CryptoJS.AES.encrypt(href, sec);
                elem.innerHTML = "";
                /*create the img node width it's correct src and append it to the element
                  copy the current style to set it in the image/png
                */
                var node = document.createElement("IMG"), options = new Array();
                options['font-family'] = _getCurrentStyle(elem,'font-family');
                options['font-size'] = _getCurrentStyle(elem,'font-size');
                options['font-weight'] = _getCurrentStyle(elem,'font-weight');
                options['color'] = _getCurrentStyle(elem,'color');
                options['text-decoration'] = _getCurrentStyle(elem,'text-decoration');
                options['width'] = width;
                options['height'] = height;
                node.src = _maskHtml(href, options);
                elem.appendChild(node);
                //add the click event to decrypt and set the location
                elem.addEventListener("click", function(ev){ ev.preventDefault(); self.redirect(this.href); return false; });
            };
            this.redirect = function(mail) { window.location.href = _uncloakString(mail); return false; };
            _init();
        };
        var mailDefense = new EMAILDEFENDER();

und hier der html teil ( sehr duenn gehalten )

HTML:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <style>
        * { font-family:Arial; font-weight:bold; font-size:20px; color:#B404AE; text-decoration: none; }
    </style>
    <script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/aes.js"></script>
</head>
<body >
    <a href="mailto:alert@test-mail.de" >alert@test-mail.de</a>
    <br />
    <a href="mailto:Alert@test2-mail.de" >Alert@test2-mail.com</a>
</body>
</html>

fuer das cloaking habe ich CryptoJS.AES verwended...

Vielen Dank fuer eure Meinungen
 
Zuletzt bearbeitet:
Hi

Hallo, ich hoffe es ist auch erlaubt einfach nur eine oder mehrere Meinungen einzuholen
Ja :)

Nur...
1. ist das ausreichend?
Was ist "ausreichend"?
Eine 100%ige Sicherheit gibts nicht, und ob es dir reicht können wir nicht für dich entscheiden.

Ob es sinnvoll ist: Wenn es funktioniert, warum nicht?
Hab mir den Code noch nicht genau angeschaut, aber machst dir irgendwas Bestimmtes Sorgen?
 
Hi, erstmal vielen dank fuer die rasche antwort...

mit ausreichend meinte ich natuerlich: schuetzt das so vor einem E-Mail-Harvester? Ich moechte damit ja verhindern das der die mail ausliest...
das es nie 100% ist, damit muss man wohl leben! :(

mir wuerde ja schon die normale email reichen..;)

mit der 2. meinte ich auch vielmehr: ist der ansatz ok, oder bin ich da voll auf dem holzweg?
Natuerlich funktioniert das script an sich, aber interessiert das einen modernen harvester ueberhaupt?

hab mich da wohl etwas kurz und unverstaendlich formulliert, sorry.

sorgen mach ich mir momentan nicht, ist einfach mein gedanke zum email-abgrasen:)

Hyper
 
falls es jemanden interressiert,
das was ich da gebastelt habe hilft nur bedingt, ich habe gestern so ein tool gefunden was aus websites die emaillinks eben ausliest,
und das tool macht das bevor java skript zum einsatz kommt... :(

Also ohne php geht es wohl nicht...

dann werde ich das mit php verschluesseln und entschluesseln und mit ajax senden, ach verdammt! :confused:
 
Ok, jetzt hab ich mir den Code endlich genauer angeschaut...

Naja, es geht schon ohne PHP, aber die Mailadressen dürfen halt nicht im Klartext vorhanden sein.
Siehe zB. aes.js
 
ja die idee war, das das script einfach bei doc.ready alle a tags prueft und verschluesselt die ein mailto enthalten und aus dem innerhtml ein img macht, das tool was die mails ausliest, hat kein js oder simuliert zumindest das es aus ist, keine ahnung wie das ding das macht...
und die mails manuel verschluesseln, will ich vermeiden, das soll php machen, wenn es die daten holt und aufbereitet...

naja aes.js kann ja auch erst verschluesseln wenn der dom geladen ist, dann ist es leider schon zu spaet :(
 
Ich mein ja auch, die Mailadresse nur verschlüsselt drin zu haben und zur Laufzeit dann entschlüsseln
Egal ob mit AES oder sonst irgendwas. Kann natürlich auch PHP machen.

Theoretisch ist das natürlich leicht nachmachbar von Grabbern (der Schlüssel muss natürlich auch irgendwo sein bzw. aus vorhandenen Daten zusammengebaut werden), aber eine Methode, die nur du auf deiner Seite verwendest, ist vermutlich nicht interessant genug, dass ein Mensch sich das anschaut und in sein Zeug einbaut.
 

Neue Beiträge

Zurück