2010-09-05 28 views
8

Estoy bastante seguro de que muchas personas han pensado en esto, pero por alguna razón no puedo encontrarlo usando la búsqueda de Google y StackOverflow.Hacer un enlace completamente invisible?

Me gustaría hacer un enlace invisible (en la lista negra de robots.txt) a una página CGI o PHP que "atrapará" robots y arañas maliciosos. Hasta ahora, he intentado:

  1. enlaces vacíos en el cuerpo:

    <a href='/trap'><!-- nothing --></a> 
    

    Esto funciona bastante bien la mayor parte del tiempo, con dos pequeños problemas:

    Problema: El enlace es parte del cuerpo del documento. Aunque es prácticamente imposible de cliquear con un mouse, algunos visitantes aún lo golpean inadvertidamente mientras navega por el sitio con el teclado Tab y Ingrese. Además, si copian y pegan la página en un procesador de texto o software de correo electrónico, por ejemplo, el enlace trampa se copia y a veces incluso se puede hacer clic (algunos programas no aceptan las etiquetas vacías <a> y copian el href como contenido de la etiqueta).

  2. bloques invisibles en el cuerpo:

    <div style="display:none"><a href='/trap'><!-- nothing --></a></div> 
    

    Esto soluciona el problema con la navegación por teclado, por lo menos en los navegadores que probé. El enlace es efectivamente inaccesible desde la visualización normal de la página, mientras que aún es completamente visible para la mayoría de los bots araña con su nivel actual de inteligencia.

    Problema: El enlace sigue siendo parte del DOM. Si el usuario copia y pega el contenido de la página, reaparece.

  3. bloques de comentarios Interior:

    <!-- <a href='/trap'>trap</a> --> 
    

    Esto elimina de forma efectiva el enlace desde el DOM de la página. Bueno, técnicamente, el comentario sigue siendo parte del DOM, pero logra el efecto deseado de que los usuarios-agentes que cumplen no generarán el elemento A, por lo que no es un enlace real.

    Problema: La mayoría de los spider bots en la actualidad son lo suficientemente inteligentes como para analizar (X) HTML e ignorar los comentarios. Personalmente, he visto bots que utilizan los objetos COM/ActiveX de Internet Explorer para analizar el (X) HTML y extraer todos los enlaces a través de XPath o Javascript. Este tipo de bots no son engañados para seguir el hipervínculo trampa.

que estaba usando el método # 3 hasta anoche, cuando fue alcanzado por un enjambre de robots que parecen ser muy selectivo sobre qué enlaces que siguen. Ahora vuelvo al método n. ° 2, pero sigo buscando una forma más efectiva.

¿Alguna sugerencia u otra solución diferente que me perdí?

Respuesta

12

Añádelo como usted ha dicho:

<a id="trap" href='/trap'><!-- nothing --></a> 

Y luego quitarlo con Javascript/jQuery:

$('#trap').remove(); 

los robots de spam no se ejecutará el código JavaScript y ver el elemento, casi cualquier navegador lo hará eliminar el elemento por lo que es imposible golpear con tabulación

Editar: La forma más fácil de no jQuery sería:

<div id="trapParent"><a id="trap" href='/trap'><!-- nothing --></a></div> 

y luego retire con javascript:

var parent = document.getElementById('trapParent'); 
var child = document.getElementById('trap'); 
parent.removeChild(child); 
+0

¿Qué pasa si algunos clientes no tienen JavaScript habilitado? –

+1

Entonces no ven el enlace, pero tienen la desventaja de poder tabular el enlace. No es una solución al 100%, pero no creo que haya muchos clientes que ficharán al enlace no visible que tiene javascript deshabilitado. –

+0

¡Esta parece ser una gran solución! No estoy realmente preocupado por la dependencia de JavaScript, ya que afecta solo la intersección de dos minorías (aquellos que descubren los enlaces mediante copiar y pegar, y aquellos que tienen scripts desactivados). ¿Podría ampliar su respuesta para incluir una solución que no dependa de jQuery? Creo que debería incluir document.GetElementById() y node.parentNode.removeChild(), pero mi experiencia con Javascript es bastante limitada. – Juliano

2

esta solución parece funcionar bien para mí, por suerte he marcada ella. Espero que te ayude también.

puede crear un enlace oculto como este y ponerlo en la parte superior izquierda de su página y para evitar que los usuarios habituales accedan a él con demasiada facilidad puede usar css para colocar una imagen de logotipo sobre esta imagen.

<a href="/bottrap.php"><img src="images/pixel.gif" border="0" alt=" " width="1" height="1"></a> 

si está interesado en la creación de la lista negra de cómo los robots se refieren a este enlace para explicación detallada de COMO.

http://www.webmasterworld.com/apache/3202976.htm

+0

Corrígeme si me equivoco, pero ¿esa discusión contiene una respuesta sobre cómo agregar un enlace a la trampa? Si es así, por favor mencione en su respuesta para un descubrimiento más fácil (y deje el enlace para aquellos que quieran saber los detalles) –

+0

La trampa en sí no es el problema. Utilizo un daemon que recibe mensajes de los scripts de trap y agrego la dirección IP a una regla de coincidencia "reciente" de iptables que prohíbe el IP durante 1 hora. El problema es agregar el enlace a las páginas de una manera limpia. Su solución no es mejor que los métodos que estoy usando, ya que no solo se puede acceder al enlace (y hacer clic en él), si el usuario copia y pega el texto, copia el enlace _y_ la imagen. A veces, la imagen está incrustada, a veces se rompe y, a veces, la aplicación agrega la base de enlace al enlace original. – Juliano

Cuestiones relacionadas