【问题标题】:Make a link completely invisible?使链接完全不可见?
【发布时间】:2010-09-05 22:40:06
【问题描述】:

我很确定很多人都想到了这一点,但由于某种原因,我无法使用 Google 和 StackOverflow 搜索找到它。

我想创建一个不可见的链接(被 robots.txt 列入黑名单)到 CGI 或 PHP 页面,该页面将“诱捕”恶意机器人和蜘蛛。到目前为止,我已经尝试过:

  1. 正文中的空链接:

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

    这在大多数情况下都很好用,但有两个小问题:

    问题:链接是文档正文的一部分。尽管它几乎无法用鼠标点击,但一些访问者在使用 TabEnter 键盘导航网站时仍然不经意地点击了它。此外,如果他们将页面复制粘贴到文字处理器或电子邮件软件中,例如,陷阱链接会被复制,有时甚至可以点击(某些软件不喜欢空的&lt;a&gt; 标签并将 href 复制为标签的内容)。

  2. 体内不可见的方块:

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

    这解决了键盘导航的问题,至少在我测试的浏览器中是这样。该链接实际上无法从页面的正常显示中访问,但对于大多数具有当前智能水平的蜘蛛机器人仍然完全可见。

    问题:链接仍然是 DOM 的一部分。如果用户复制粘贴页面的内容,它会重新出现。

  3. 评论区内部:

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

    这有效地从页面的 DOM 中删除了链接。好吧,从技术上讲,注释仍然是 DOM 的一部分,但它达到了合规用户代理不会生成 A 元素的预期效果,因此它不是实际的链接。

    问题: 现在大多数蜘蛛机器人都足够聪明,可以解析 (X)HTML 并忽略 cmets。我个人见过使用 Internet Explorer COM/ActiveX 对象解析 (X)HTML 并通过 XPath 或 Javascript 提取所有链接的机器人。这些类型的机器人不会被诱骗跟随陷阱超链接。

我一直在使用方法 #3,直到昨晚,当我被一群机器人袭击时,这些机器人似乎对它们遵循的链接非常有选择性。现在我回到方法#2,但我仍在寻找更有效的方法。

我错过了任何建议或其他不同的解决方案?

【问题讨论】:

    标签: html hyperlink web-crawler


    【解决方案1】:

    按照你说的添加:

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

    然后用 javascript/jQuery 删除它:

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

    垃圾邮件机器人不会执行 javascript 并查看元素,几乎所有浏览器都会删除该元素,从而无法通过 Tab 键点击它

    编辑:最简单的非jQuery方法是:

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

    然后用javascript删除它:

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

    【讨论】:

    • 如果某些客户端没有启用 JavaScript 怎么办?
    • 然后他们看不到链接,但缺点是可以tab到链接。这不是 100% 的修复,但我不认为有很多客户端会选择禁用 javascript 的不可见链接。
    • 这似乎是一个很好的解决方案!我并不真正担心 JavaScript 依赖性,因为它只影响两个少数群体的交集(那些通过复制粘贴或选项卡发现链接的人,以及禁用脚本的人)。您能否扩展您的答案以包含不依赖于 jQuery 的解决方案?我觉得应该涉及到document.GetElementById()和node.parentNode.removeChild(),但是我对Javascript的经验还是比较有限的。
    【解决方案2】:

    此解决方案似乎对我很有效,幸运的是我已将其添加为书签。希望对你也有帮助。

    您可以像这样创建一个隐藏链接并将其放在页面的最左上角,以防止普通用户太容易访问它,您可以使用 css 在此图像上放置徽标图像。

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

    如果您有兴趣设置如何将机器人列入黑名单,请参阅此链接以获取有关操作方法的详细说明。

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

    【讨论】:

    • 如果我错了,请纠正我,但是该讨论是否包含有关如何向陷阱添加链接的答案?如果是这样,请在您的答案中提及它以便于发现(并将链接留给那些想知道细节的人)
    • 陷阱本身不是问题。我使用一个从陷阱脚本接收消息的守护程序,并将 IP 地址添加到禁止 IP 1 小时的 iptables“最近”匹配规则。问题是以干净的方式添加到页面的链接。您的解决方案并不比我使用的方法好,因为不仅链接是可访问的(和可点击的),如果用户复制粘贴文本它会复制链接图像。有时图像是嵌入的,有时会损坏,有时应用程序会将链接库添加到原始链接。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-16
    • 1970-01-01
    • 2011-08-10
    • 2019-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多