jeudi 23 juin 2016

Referencing JS code stored in CSS Content property


I've been tasked to obfuscate email addresses on some webpages, and after encountering an answer suggesting use of CSS and data attributes I tried implementing it myself and found that getting the produced email address back into a mailto element was impossible without some JavaScript. The next problem encountered was that the JavaScript I ended up using to grab the rendered email address was not cross-browser as some browsers retrieve "attr(data-xx)" instead of the actual value. However I still like the idea of producing a solution that spans HTML, JS and CSS for maximum complexity. The last resort was to store a line of JS in the CSS content property, and use eval to produce the final email address. Obfuscation is not supposed to be pretty, but I want to know if what I've done is potentially compromising security by introducing eval() and/or storing JS in CSS. I haven't found another example of someone doing something similar (probably for good reason). My HTML is <a class="redlinktext ninjemail" data-ename="snoitagitsevni" data-edomain="ua.moc.em" data-elinktext="click me"></a> My CSS is .ninjemail:before { content: "'please enable Javascript'; ahref.attr('data-edomain') + '�040' + ahref.attr('data-ename');" } My JavaScript is $('.ninjemail').each(function () { var fullLink = "ma"; var ahref = $(this); fullLink += "ilto" + ":"; var codeLine = window.getComputedStyle(this, ':before').content.replace(/"|\/g, ''); var emailAddress = eval(codeLine); emailAddress = emailAddress.split('').reverse().join(''); fullLink += emailAddress; ahref.attr('href', fullLink); var linkText = ahref.attr('data-elinktext'); if (linkText && linkText.length > 0) { ahref.text(linkText); } else { ahref.text(emailAddress); } ahref.removeClass('ninjemail'); });

Aucun commentaire:

Enregistrer un commentaire