obfuscator - ofuscar javascript online
¿La mejor manera de ofuscar una dirección de correo electrónico en un sitio web? (25)
Pasé los últimos días trabajando en la actualización de mi sitio web personal. La URL de mi sitio web personal es (mi primer nombre). (Mi apellido) .com, ya que mi apellido es bastante inusual, y tuve la suerte de recoger el nombre de dominio. Mi dirección de correo electrónico es (mi nombre) @ (mi apellido) .com. Entonces realmente, cuando se trata de adivinarlo, no es muy difícil.
De todos modos, quiero integrar un enlace mailto: en mi sitio web, para que la gente pueda contactarme. Y, a pesar de que mi dirección de correo electrónico no es muy difícil de adivinar, preferiría que los bots de correo basura no rastreen los sitios web para rastrear los sitios web en busca de patrones de direcciones de correo electrónico y agregarlos a su base de datos.
¿Cuál es la mejor manera de ofuscar mi dirección de correo electrónico, preferiblemente en forma de enlace? Los métodos que conozco son:
<a href="mailto:[email protected]">e-mail me</a>
Funciona, pero también significa que tan pronto como mi sitio web llegue a Google, estaré abriéndome paso entre el spam, ya que los robots de spam seleccionan fácilmente mi dirección de correo electrónico.
<img src="images/e-mail.png" />
Esto es menos deseable, porque no solo los visitantes no podrán hacer clic en él para enviarme un correo electrónico, sino que los bots de spam más inteligentes probablemente podrán detectar los caracteres que contiene la imagen.
Sé que probablemente no haya una solución perfecta, pero me preguntaba qué era lo que todos pensaban que era mejor. Definitivamente estoy dispuesto a usar JavaScript si es necesario, ya que mi sitio web ya hace uso de toneladas de este.
La solución de llamada Ajax
Lo mejor es tener un formulario en el sitio web y no mostrar la dirección de correo electrónico, porque todos los robots son más inteligentes día tras día, pero si necesita mostrar la dirección de correo electrónico en el sitio web, puede hacerlo con una llamada ajax en su servidor, y muéstrelo al hacer clic.
HTML
<a class="obfmail" href="#" rel="info">click here to show email address</a>
o
<a class="obfmail" href="#" rel="info">
<img src="img/click-to-show-email.jpg">
</a>
jQuery
$(document).one''click'', ''.obfmail'', function(e) {
e.preventDefault();
a = $(this);
addr = a.attr(''rel'');
$.ajax({
data: {
email: addr
},
url : "/a/getemail",
type: "POST",
dataType: ''json'',
success: function(data) {
a.html(data.addr);
a.attr(''href'', ''mailto:'' + data.addr);
}
});
});
PHP
if($_POST[''email'']) {
...
return json_encode(array(
code => ''200'',
response => ''success'',
addr => ''[email protected]''
));
}
Para mayor seguridad, puede cambiar .on
por .one
como este $(document).one(''click'', ''.obfmail'', function(e) {
o incluso trabajar con un token generado por PHP que pase a datos en ajax llamada, para aceptar solo una llamada de la función ajax como esta:
html: <a class="obfmail" href="#" rel="info" token="w3487ghdr6rc">
jquery:
...
addr = a.attr(''rel'');
tkn = a.attr(''token'');
$.ajax({
data: {
email: addr,
token: tkn
}, ...
.
También es posible codificar la dirección de correo electrónico devuelta o invertirla.
.
¡Funciona bien para números de teléfono también!
Aparentemente, usar CSS para cambiar la dirección de tu texto funciona bastante bien. Ese enlace tiene una prueba de muchos otros métodos de ofuscación también.
Cualquier cosa que uses inevitablemente será derrotada. Tu objetivo principal debe ser evitar molestar a los usuarios.
Codifico los caracteres como entidades HTML ( algo como esto ). No requiere JS para ser habilitado y parece haber detenido la mayor parte del spam. Supongo que un robot inteligente aún podría cosecharlo, pero no he tenido ningún problema.
Como decía un cartel anterior, también uso la http://www.jottings.com/obfuscator/ JavaScript desde el http://www.jottings.com/obfuscator/ .
La página web genera algunos JavaScript que se pueden mejorar. La cadena mailto:
text está en claro e identificable por robots (que podría detectar esto y desenfocar esta cadena), pero si uno ingresa a la página web de jottings.com una dirección de correo electrónico del formulario mailto:[email protected]
lugar de [email protected]
y luego elimina el texto mailto:
del JavaScript que se genera, uno de repente tiene algo de JavaScript que no parece tener nada que ver con el correo electrónico, solo el JavaScript aleatorio del que la web está llena. Uno puede mejorar esto aún más al deshacerse del texto del enlace - Reemplacé el mío por una imagen de mi dirección de correo electrónico que está en una fuente bastante oscura. Entonces, solo en caso de que este método en jottings.com se vuelva popular, asigné al azar los nombres de las variables en el JavaScript de salida para que a un robot le resulte difícil detectar una instancia de código JavaScript generado por las anotaciones.
Obviamente, algunas de estas mejoras podrían integrarse en el mecanismo de las propias anotaciones, y dado que el código está abiertamente disponible, sería relativamente fácil.
Un ejemplo puede hacer esto un poco más claro. Usé el Obfuscator de Jottings en el enlace de arriba para ocultar mailto:[email protected]
(nota que estoy engañando el propósito original del sitio web de anotaciones al ingresar la cadena mailto:[email protected]
lugar de [email protected]
) con el texto "Enviarme correo electrónico", cuyas anotaciones se convirtieron en este Javascript:
<script type="text/javascript" language="javascript">
<!--
// Email obfuscator script 2.1 by Tim Williams, University of Arizona
// Random encryption key feature by Andrew Moulden, Site Engineering Ltd
// This code is freeware provided these four comment lines remain intact
// A wizard to generate this code is at http://www.jottings.com/obfuscator/
{ coded = "3A1OTJ:[email protected]"
key = "J0K94NR2SXLupIGqVwt8EZlhznemfaPjs7QvTB6iOyWYo3rAk5FHMdxCg1cDbU"
shift=coded.length
link=""
for (i=0; i<coded.length; i++) {
if (key.indexOf(coded.charAt(i))==-1) {
ltr = coded.charAt(i)
link += (ltr)
}
else {
ltr = (key.indexOf(coded.charAt(i))-shift+key.length) % key.length
link += (key.charAt(ltr))
}
}
document.write("<a href=''mailto:"+link+"''>Send Me Email</a>")
}
//-->
</script><noscript>Sorry, you need Javascript on to email me.</noscript>
Después de recuperarlo, lo pego en un editor y:
- eliminar el
mailto:
- reemplazar el texto del enlace con un puntero a una imagen de mi dirección de correo electrónico
- cambiar el nombre de todas las variables
- reemplace la sección "noscript" con otro enlace a la imagen de la dirección de correo electrónico
Termino con esto:
<script type="text/javascript" language="javascript">
<!--
// Email obfuscator script 2.1 by Tim Williams, University of Arizona
// Random encryption kkeoy feature by Andrew Moulden, Site Engineering Ltd
// This kudzu is freeware provided these four comment lines remain intact
// A wizard to generate this kudzu is at http://www.jottings.com/obfuscator/
{ kudzu = "3A1OTJ:[email protected]"
kkeoy = "J0K94NR2SXLupIGqVwt8EZlhznemfaPjs7QvTB6iOyWYo3rAk5FHMdxCg1cDbU"
shift=kudzu.length
klonk=""
for (variter=0; variter<kudzu.length; variter++) {
if (kkeoy.indexOf(kudzu.charAt(variter))==-1) {
lutu = kudzu.charAt(variter)
klonk += (lutu)
}
else {
lutu = (kkeoy.indexOf(kudzu.charAt(variter))-shift+kkeoy.length) % kkeoy.length
klonk += (kkeoy.charAt(lutu))
}
}
document.write("<a href=''"+klonk+"''><img src=''contactaddressimage.png'' alt=''Send Me Email'' border=''0'' height=''62'' width=''240''></a>")
}
//-->
</script>
<noscript>
<img src="contactaddressimage.png" border="0" height="62" width="240">
<font face="Arial" size="3"><br> </font></p>
</noscript>
Honestamente, su problema puede ser discutible si usted hizo la pregunta de si un mailto es realmente lo que quiere usar. Muchas personas que usan correo web, por ejemplo, o no tienen la configuración adecuada de cliente de correo en su navegador no se beneficiarán de un correo electrónico. Está exponiendo su dirección de correo electrónico para una función que no va a funcionar para una gran parte de sus usuarios.
Lo que podría hacer en su lugar es usar un formulario para enviar el correo electrónico detrás de las escenas para que la dirección de correo electrónico esté oculta y no tenga que preocuparse por los pobres consumidores que no se beneficiarán de un correo electrónico.
La solución aceptada actualmente es crear un formulario de contacto que permita a los usuarios enviarle un correo electrónico. Si recibes mucho spam de eso (no lo hago en mi sitio), entonces puedes agregar un captcha por si acaso, y estarás lejos de ser la "fruta más baja" en ese momento.
El hecho es que si proporciona un enlace en el que un usuario puede hacer clic para abrir su cliente de correo electrónico con su dirección en el campo Para, entonces la computadora puede descifrar la dirección de correo electrónico de la página y también puede hacerlo. un bot de spam
Mira this .
El ''Formulario de Enkoder'' encriptará su dirección de correo electrónico y convertirá el resultado en un código de JavaScript que se autoevalúe, ocultándolo de los robots de recolección de correo electrónico que rastrean la web en busca de direcciones expuestas. Su dirección será mostrada correctamente por los navegadores web, pero será prácticamente indescifrable para los robots de recolección de correos electrónicos.
No sé qué tan bien funcionaría esto. ¿No podría dejar su dirección de correo electrónico y cargarla con una llamada AJAX una vez que la página haya terminado de cargarse? No estoy seguro si los bots de spam pueden recoger el HTML alterado o si son lo suficientemente inteligentes como para escuchar en otro tráfico HTTP para tratar de elegir direcciones de correo electrónico o si simplemente escanean la página tal como se recibe la primera vez.
No use ninguna técnica de ofuscación aquí porque probablemente sea el primer lugar en el que buscarán los recolectores de correo electrónico para averiguar cómo las personas están ofuscando los correos electrónicos. Si debe tener su dirección de correo electrónico visible en el sitio, no solo copie textualmente el método de otra persona; ofrézcalo de alguna manera única que ningún otro sitio haya usado para que su método no sea conocido por los cosechadores antes de que visiten su sitio.
Otro enfoque podría ser mediante el uso de un marco de JavaScript y vinculando los datos / modelo a los elementos HTML. En el caso de AngularJS, los elementos HTML se escribirían como:
<a href="mailto:{{contactEmail}}"><span>{{contactEmail}}</span></a>
El enlace de interpolación {{data}} usa una variable de ámbito que contiene el valor real del correo electrónico. Además, también se podría usar un filtro que maneje la decodificación del correo electrónico de la siguiente manera:
<a href="mailto:{{contactEmail | decode}}"><span>{{contactEmail | decode}}</span></a>
Los beneficios están en la forma en que se escribe el HTML. El inconveniente es que requiere soporte de secuencias de comandos que algunos pueden ser un no no.
solo otro enfoque.
Personalmente, he dejado de ocultar mi dirección de correo electrónico. Me resulta más fácil buscar mejores soluciones de filtrado de spam que preocuparme por ofuscar. Podría pasar días tratando de encontrar la mejor manera de ocultar su dirección, y luego todo lo que necesita es una persona para vender su dirección a un spammer y todo ese trabajo fue inútil.
Podría hacer lo que Google hace en Google Code (y grupos). Muestre una parte del correo electrónico y una parte clicable ("..."). Al hacer clic en eso indica que quiere saber el correo electrónico, y se le pide que complete un captcha. Después, el correo electrónico (y otros?) Son visibles para usted.
Si alguien está usando Rails, pueden usar el actionview-encoded_mail_to
gem. ( https://github.com/reed/actionview-encoded_mail_to )
Hay algunas opciones:
: encode - Esta tecla aceptará las cadenas "javascript" o "hex". Al pasar "javascript" se creará y codificará dinámicamente el enlace mailto y luego se evaluará en el DOM de la página. Este método no mostrará el enlace en la página si el usuario tiene JavaScript desactivado. Pasar "hexadecimal" codificará hexadecimamente la dirección de correo electrónico antes de enviar el enlace de correo electrónico.
: replace_at - Cuando no se proporciona el nombre del enlace, la dirección de correo electrónico se utiliza para la etiqueta del enlace. Puede usar esta opción para ocultar la dirección_correo electrónico sustituyendo el signo @ con la cadena indicada como valor.
: replace_dot: cuando no se proporciona el nombre del enlace, la dirección de correo electrónico se utiliza para la etiqueta del enlace. Puede usar esta opción para ocultar la dirección de correo electrónico sustituyendo el. en el correo electrónico con la cadena dada como el valor.
Si dice en su sitio que "mi dirección de correo electrónico es (mi nombre) @ (mi apellido) .com", y su nombre y apellido son bastante obvios, esa parece ser la mejor protección contra el correo no deseado vas a obtener
Si trabaja con PHP, puede obtener un script gratuito que lo haga automáticamente. Se llama "Private Daddy" y lo usamos para nuestro propio servicio de transmisión de audio en línea. Solo una línea de código y funciona de la caja ... puedes agarrarla aquí
Un hombre probó nueve formas diferentes de presentar una dirección de correo electrónico en una página y luego publicó los resultados en su blog.
Sus tres mejores maneras fueron:
- Cambiar la dirección del código con CSS
- Usando visualización de CSS: ninguno
- Cifrado ROT13
Advertencia: esto fue publicado hace dos años. Los robots de spam podrían haberse vuelto más inteligentes.
Un sitio web que mantengo utiliza un medio JavaScript algo simplista para (con suerte) mantener a los spams fuera.
Los enlaces de correo electrónico llaman a una función JS:
function sendEmail(name, domain) { location.href = ''mailto:'' + name + ''@'' + domain; }
Para asegurarse de que solo los usuarios que tienen JS habilitado puedan ver el enlace, escríbalo con esto:
function writeEmailLink(realName, name, domain) { document.write(''<a href="javascript:sendEmail(/''' + name + ''/', /''' + domain + ''/')">''); document.write(realName); document.write(''</a>''); }
El uso de una función JS para escribir un enlace que llama a otro significa que hay dos niveles de protección.
Una forma ligera de ocultar el href
de un ancla es codificarla en base64:
> btoa(''mailto:[email protected]'')
< "bWFpbHRvOmVtYWlsQGV4YW1wbGUuY29t"
Y luego incluirlo codificado:
<a href="javascript:window.location.href=atob(''bWFpbHRvOmVtYWlsQGV4YW1wbGUuY29t'')">E-Mail</a>
O dinámicamente del lado del servidor, por ejemplo, en PHP:
<a href="javascript:window.location.href=atob(''<?= base64_encode("mailto:[email protected]") ?>'')">E-Mail</a>
En combinación con reversión de cadena, podría ser bastante spam-save:
<a href="javascript:window.location.href=atob(''<?= base64_encode("mailto:[email protected]") ?>'')" style="unicode-bidi: bidi-override; direction: rtl;"><?= strrev("[email protected]") ?></a>
Usando JQuery, pero puede ser fácilmente portado a JS simple si es necesario. Tomará el siguiente bloque HTML. Este ejemplo que proporcioné también es para tel:
enlaces para llamadas telefónicas.
<a class="obfuscate"
href="mailto:archie...trajano...net">
archie...trajano...net
</a>
<a class="obfuscate"
href="tel:+One FourOneSix-EightFiveSix-SixSixFiveFive">
FourOneSix-EightFiveSix-SixSixFiveFive
</a>
y convertirlo a los enlaces adecuados usando Javascript.
$(".obfuscate").each(function () { $(this).html($(this).html() .replace("...", "@").replace(//./././g, ".") .replace(/One/g, "1") .replace(/Two/g, "2") .replace(/Three/g, "3") .replace(/Four/g, "4") .replace(/Five/g, "5") .replace(/Six/g, "6") .replace(/Seven/g, "7") .replace(/Eight/g, "8") .replace(/Nine/g, "9") .replace(/Zero/g, "0")) $(this).attr("href", $(this).attr("href") .replace("...", "@").replace(//./././g, ".") .replace(/One/g, "1") .replace(/Two/g, "2") .replace(/Three/g, "3") .replace(/Four/g, "4") .replace(/Five/g, "5") .replace(/Six/g, "6") .replace(/Seven/g, "7") .replace(/Eight/g, "8") .replace(/Nine/g, "9") .replace(/Zero/g, "0")) })
Lo documenté con más detalle aquí https://trajano.net/2017/01/obfuscating-mailto-links/
El algoritmo de de / ofuscación es bastante simple, por lo que tampoco es muy difícil escribir (no es necesario analizar el análisis base64)
Uso la ofuscación de JavaScript, eche un vistazo a esta, por ejemplo:
Usted mencionó que esto es para su sitio web personal. En mi sitio personal (por ejemplo, bobsomers.com) solo tengo un párrafo que dice esto:
La mejor manera de ponerse en contacto conmigo antes de que el nuevo sitio esté listo es enviarme un correo electrónico. Mi dirección de correo electrónico es mi primer nombre en este sitio web. Si no puede entenderlo desde esa sugerencia, bueno, puede encontrar que el correo electrónico es más un desafío que averiguar mi dirección.
La gente parece ser capaz de resolver eso muy bien, ya que recibo un correo electrónico legítimo todo el tiempo. A veces, las mejores soluciones no requieren escribir ningún código. :)
Utilizo una función de PHP para generar algunos javascript para generar el correo electrónico en la carga de la página. Tenga en cuenta que no necesita PHP para generar el JS en tiempo de ejecución, puede generar el JS una vez localmente y luego incluir el JS estático en su página.
También puede utilizar la función vinculada con este fragmento a continuación para ocultar automáticamente las direcciones de correo electrónico en un determinado HTML (donde $ processedContent es el HTML):
$emailMatches = array();
$matchCount = preg_match_all(''/(?:[a-zA-Z0-9_/./-])+/@(?:(?:[a-zA-Z0-9/-])+/.)+(?:[a-zA-Z0-9]{2,4})+/'', $processedContent, $emailMatches);
if($matchCount > 0) {
$emailMatches = $emailMatches[0];
foreach($emailMatches as $email) {
$replacement = createJSMailLink($email);
$processedContent = str_replace($email, createJSMailLink($email), $processedContent);
}
el mío es en realidad simple:
<h3 id="email">[email protected]</h3><!-- add a fake email -->
$(document).ready(function(){
//my email in reverse :)
var s = ''moc.elibomajninbew@htiek'';
var e = s.split("").reverse().join("");
$(''#email'').html(''<a href="mailto:''+e+''">''+e+''</a>'');
});
reCAPTCHA ofrece un simple servicio de ofuscación de correo electrónico . No necesita configurar una cuenta y puede comenzar a usarla inmediatamente. Puede usar el servicio como un enlace o como una ventana emergente.
Después de que se resuelve el captcha, su dirección de correo electrónico aparece como href / mailto, de modo que los usuarios que han configurado sus clientes de correo electrónico para trabajar con sus navegadores pueden hacer clic / seguir.
<!-- Multi-Email Obfuscator -->
<!-- step 1: @ = @ -->
<!-- step 2: a scrap element -->
<!-- step 3: ROT13 encode for .com -->
info<!-- step 1 -->@<!-- step 2 --><b style="display:none">my</b>domain<!-- step 3 --><script>document.write(".pbz".replace(/[a-zA-Z]/g,function(c){return String.fromCharCode((c<="Z"?90:122)>=(c=c.charCodeAt(0)+13)?c:c-26);}));</script>