【问题标题】:Are search-bots or spam-bots able to emulate/trigger JavaScript events?搜索机器人或垃圾邮件机器人是否能够模拟/触发 JavaScript 事件?
【发布时间】:2012-03-30 05:09:32
【问题描述】:

搜索机器人或垃圾邮件机器人是否能够在读出页面时模拟/触发 JavaScript 事件?

【问题讨论】:

  • 在什么条件下?搜索机器人可能会下载您的页面并使用表达式对其进行嗅探;如果它遇到表格,它可能会用 dat 来看看会发生什么;如果它遇到验证码,它可能会对其进行 OCR,看看它是否能胜过它。 Automator 软件可以移动鼠标并触发点击,情况一直如此。这就是机器人在 MMORPG 和浏览器上的工作方式。您的用例是什么 - 您是否正在收紧您的应用程序?
  • 你可以在我的网站上看到:www.omerbase.com - 反垃圾邮件。我想知道垃圾邮件/搜索机器人是否可以确定 DIV 是可点击的,这意味着这会影响表单提交......正如你难过的那样,他可以用表达式查找 javascript 并在 HTML 中找到一个关系元素,. . 所以它可能会导致点击/悬停/等事件...我做对了吗?
  • @ZlatanOmerović 如果您的应用程序足够流行,那么有人单击“查看源代码”并弄清楚 div 在单击时做了什么并编写一个机器人来持续执行此操作只是时间问题。因此,无论搜索和垃圾邮件机器人是否会触发某个动作,您不妨假设 somebody 会编写一个机器人来触发该动作。
  • @AdamMihalcin 我知道。但是请访问我的页面,请查看我对我所做工作的实施。涉及间隔,他们检查该按钮上的任何更改等...我现在正在想办法证明访问者是一个真实的人...

标签: javascript dom-events bots search-engine-bots


【解决方案1】:

不,因为搜索机器人会获取静态 HTML 流。它们没有运行您的 JavaScript 代码中的任何初始化事件,例如 init() 或 myObj.init()。它们不加载任何像 jQuery 这样的外部库,也不执行 $(document).ready 代码或任何标准的 .click() 侦听器。因此,除非搜索机器人作者有特定理由故意构建他们的搜索机器人来触发或执行页面上的 <script> 块,否则他们通常不会运行 JavaScript 代码。

我写了一个搜索机器人。我只关心从页面中提取链接和文本。但是,我不想运行其他人的客户端日历组件或视频播放器组件。我不希望将 JS 代码插入到我的数据库中,它可能最终出现在搜索引擎结果页面 (SERP) 上。所以没有理由对<script>块中的任何代码运行eval()命令,也没有理由触发JS层中的任何初始化事件。

当搜索机器人加载 HTML DOM 时,通常会在其中嵌入外部 .js 文件。因此,执行 JS 需要解析多个 .js 文件的字符串,然后为这些文件构建一个连接器,然后尝试执行已下载的所有内容。对于搜索机器人作者来说,这是额外的工作,根本没有任何净收益。我们根本不希望 JS 代码出现在我们的 SERP 中的任何位置。否则,在 SERP 上看到 JS 代码看起来像是一个糟糕的搜索结果。但是,机器人可以看到<script> 标签中的内容,并且只是在寻找要抓取的链接。所以这可能就是人们开始认为机器人可以执行 JavaScript 的原因,但他们只是真正解析它们以获取文本链接。

【讨论】:

    【解决方案2】:

    Here’s 有人提出谷歌在抓取页面以获取索引 AJAX 内容和其他原因时在无头 WebKit 中加载页面的情况。不过,搜索机器人通常不会提交表单。

    我查看了您的网站,并且保护完全是客户端的。由于 HTML 表单实际上只是对要提交到某个 URL 的键/值的描述,因此没有理由任何人不能只使用机器人发布这些数据。

    例子:

    POST /contact
    /* ... */
    
    fullname=SO+test&email=test%40example.com&reason=test&message=test
    

    另外,这很重要,您以这种方式惩罚合法访问者。 JavaScript 被阻止、无法加载或根本无法工作的原因有很多。

    【讨论】:

    • 是的。你是对的,除了一件事。一件事似乎没有像刚加载时那样出现在表单中。当表单中的数据填满并且单击 AntiSpam 按钮时,会出现此内容。检查自己,检查表单中的每个输入项,你会看到我目前如何从机器人中识别人类。 :)
    • 实际上,脚本对我来说失败了,这是我添加警告的原因之一。我点击了反垃圾邮件按钮,填写了表格,但从未启用提交按钮。随意添加一些人工检查,但请不要在 JavaScript 中进行。
    • 长度在字段描述中指定...有效的邮件、长度等...仅当您通过 Firebug 或其他方式使用 JS 注入覆盖脚本时:)
    • 我认为没有理由支持禁用 JS 的用户。没有垃圾邮件的好处超过了选择禁用它的小市场。我也在调查垃圾邮件机器人是否会触发 JS 事件,到目前为止似乎没有人真正知道。我想我必须测试一下...
    猜你喜欢
    • 2014-07-31
    • 2013-08-06
    • 1970-01-01
    • 2011-08-03
    • 2014-05-19
    • 2011-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多