2010-09-05 15 views
8

Ich bin mir ziemlich sicher, dass viele Leute daran gedacht haben, aber aus irgendeinem Grund kann ich sie nicht mit der Google- und StackOverflow-Suche finden.Einen Link komplett unsichtbar machen?

Ich möchte einen unsichtbaren Link (auf der schwarzen Liste von robots.txt) zu einer CGI- oder PHP-Seite machen, die bösartige Bots und Spider "einfängt". Bisher habe ich versucht:

  1. Leere Links im Körper:

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

    Das funktioniert ganz gut die meiste Zeit, mit zwei kleinere Probleme:

    Problem: Die Verknüpfung ist Teil des Dokuments. Auch wenn es mit einer Maus ziemlich unklickbar ist, schlagen einige Besucher es dennoch unabsichtlich bei der Tastatur-Navigation der Website mit Tab und Geben Sie ein. Wenn sie die Seite zum Beispiel in ein Textverarbeitungsprogramm oder eine E-Mail-Software kopieren, wird der Trap-Link mitkopiert und manchmal sogar geklickt (einige Software mag keine leeren <a> Tags und kopiert den href als Inhalt von das Tag).

  2. unsichtbare Blöcke im Körper:

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

    dies das Problem mit Tastaturnavigation fixiert, zumindest in den Browsern getestet I. Die Verbindung ist effektiv von der normalen Anzeige der Seite nicht zugänglich, während sie für die meisten Spider Bots mit ihrer aktuellen Intelligenz noch vollständig sichtbar ist.

    Problem: Der Link ist immer noch Teil des DOM. Wenn der Benutzer den Inhalt der Seite kopiert und wieder einfügt, wird er erneut angezeigt.

  3. Innenkommentarblocks:

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

    Dies entfernt effektiv den Link aus dem DOM der Seite. Nun, technisch gesehen ist der Kommentar immer noch Teil des DOM, aber es erreicht den gewünschten Effekt, dass konforme Benutzeragenten das A-Element nicht erzeugen, so dass es kein tatsächlicher Link ist.

    Problem: Die meisten Spider-Bots sind heutzutage schlau genug, um (X) HTML zu parsen und Kommentare zu ignorieren. Ich habe Bots gesehen, die Internet Explorer COM/ActiveX-Objekte verwenden, um das (X) HTML zu analysieren und alle Links über XPath oder Javascript zu extrahieren. Diese Arten von Bots werden nicht dazu verleitet, dem Trap-Hyperlink zu folgen.

I wurde mit der Methode # 3 bis gestern Abend, als ich von einem Schwarm von Bots getroffen wurde, die auf der wirklich selektiv zu sein scheinen, verbindet sie folgt. Jetzt bin ich zurück zu Methode # 2, aber ich suche immer noch nach einem effektiveren Weg.

Irgendwelche Vorschläge, oder eine andere andere Lösung, die ich verpasst habe?

Antwort

12

es hinzufügen wie Sie gesagt haben:

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

Und dann nehmen Sie es mit Javascript/jQuery:

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

Spam Bots nicht das Javascript ausführen und das Element sehen, die fast jeder Browser wird entfernen Sie das Element, das es unmöglich macht, mit Tabbing zu schlagen

Edit: Die einfachste nicht-jQuery Art wäre:

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

Und dann nehmen Sie es mit javascript:

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

Was passiert, wenn einige Kunden aktiviert haben JavaScript nicht? –

+1

Dann sehen sie den Link nicht, haben aber den Nachteil, dass sie auf den Link klicken können. Es ist keine 100% ige Lösung, aber ich denke nicht, dass es viele Clients gibt, die den nicht sichtbaren Link mit deaktiviertem JavaScript aufrufen. –

+0

Dies scheint eine großartige Lösung zu sein! Ich bin nicht wirklich besorgt über die JavaScript-Abhängigkeit, da sie nur die Überschneidung zweier Minderheiten betrifft (diejenigen, die die Links durch Kopieren-Einfügen oder Tabbing entdecken, und diejenigen, die Skripte deaktiviert haben). Können Sie Ihre Antwort auf eine Lösung erweitern, die nicht von jQuery abhängig ist? Ich denke, dass es document.GetElementById() und node.parentNode.removeChild() beinhalten sollte, aber meine Erfahrung mit Javascript ist ziemlich begrenzt. – Juliano

2

diese Lösung gut für mich zu arbeiten scheint, zum Glück habe ich es vorgemerkt. Ich hoffe es hilft dir auch.

Sie können einen versteckten Link wie diesen erstellen und ganz oben links auf Ihrer Seite platzieren. Um zu verhindern, dass reguläre Benutzer zu einfach darauf zugreifen, können Sie mit css ein Logo über dieses Bild legen.

Wenn Sie daran interessiert sind, wie Sie die Bots auf die Blacklist setzen, lesen Sie diesen Link für eine ausführliche Erläuterung des Howto.

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

+0

Korrigieren Sie mich, wenn ich falsch liege, aber enthält diese Diskussion eine Antwort darauf, wie man einen Link zur Falle hinzufügt? Wenn ja, bitte erwähnen Sie es in Ihrer Antwort für leichtere Entdeckung (und lassen Sie den Link für diejenigen, die die Besonderheiten wissen wollen) –

+0

Die Falle selbst ist nicht das Problem. Ich benutze einen Daemon, der Nachrichten von den Trap-Skripten empfängt und die IP-Adresse zu einer "letzten" Übereinstimmungsregel von iptables hinzufügt, die die IP für 1 Stunde verbietet. Das Problem besteht darin, den Link zu den Seiten sauber hinzuzufügen. Ihre Lösung ist nicht besser als die Methoden, die ich verwende, da nicht nur der Link zugänglich (und klickbar) ist, wenn der Benutzer den Text kopiert und den Link kopiert und das Bild kopiert. Manchmal wird das Bild eingebettet, manchmal wird es beschädigt, und manchmal fügt die Anwendung die Verknüpfungsbasis der ursprünglichen Verknüpfung hinzu. – Juliano