phantomjs - 可靠地检测基于 PhantomJS 的垃圾邮件机器人

标签 phantomjs mediawiki casperjs spam spam-prevention

有没有办法始终如一地检测 PhantomJS/CasperJS?我一直在处理用它构建的一系列恶意垃圾邮件机器人,并且能够根据某些行为基本上阻止它们,但是我很好奇是否有一种坚如磐石的方法来了解 CasperJS 是否正在使用中,作为处理不断的适应变得有点烦人。

我不相信使用验证码。它们是一种负面的用户体验,并且 ReCaptcha 从未在我的 MediaWiki 安装中阻止垃圾邮件。由于我们的网站没有用户注册(匿名讨论板),我们需要为每个帖子提供一个验证码条目。我们每天会收到数千个合法帖子,而验证码会看到这个数字。

最佳答案

我非常同意您对 CAPTCHA 的看法。我将列出到目前为止我能够检测到的内容,用于我自己的检测脚本,具有类似的目标。这只是部分,因为它们更多 headless browsers .

使用暴露的窗口属性来检测/假设那些特定的 headless 浏览器是相当安全的:

window._phantom (or window.callPhantom) //phantomjs
window.__phantomas //PhantomJS-based web perf metrics + monitoring tool 
window.Buffer //nodejs
window.emit //couchjs
window.spawn  //rhino

以上收集自jslint doc并使用phantom js进行测试。

浏览器自动化驱动程序(由 BrowserStack 或其他网络捕获服务用于快照):
window.webdriver //selenium
window.domAutomation (or window.domAutomationController) //chromium based automation driver

这些属性并不总是公开的,我正在寻找其他更强大的方法来检测此类机器人,完成后我可能会作为完整的脚本发布。但这主要回答了你的问题。

这是更广泛地检测支持 JS 的 headless 浏览器的另一种相当合理的方法:
if (window.outerWidth === 0 && window.outerHeight === 0){ //headless browser }

这应该很有效,因为即使虚拟视口(viewport)大小是由 headless 浏览器设置的,默认情况下属性也是 0,并且默认情况下它不能报告不存在的浏览器窗口的大小。特别是 Phantom JS doesn't support outerWith or outerHeight .

附录:但是有一个外部/内部维度的 Chrome/Blink 错误。 Chrome does not report those dimensions when a page loads in a hidden tab ,例如从上一个 session 恢复时。 Safari 好像没有这个问题。。

更新:事实证明,iOS Safari 8+ 有一个外部宽度和外部高度为 0 的错误,而 Sailfish WebView 也可以。因此,虽然它是一个信号,但不能单独使用而不注意这些错误。因此,警告 :请不要使用这个原始片段,除非你真的知道你在做什么。

PS:如果您知道此处未列出的其他 headless 浏览器属性,请在评论中分享。

关于phantomjs - 可靠地检测基于 PhantomJS 的垃圾邮件机器人,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20862728/

相关文章:

testing - CasperJS HTTP 身份验证

angularjs - Protractor 不会自动启动 PhantomJS

mediawiki - 维基百科 NewPP 限量报告 由 mw1079 解析

mysql - 如何减小 MediaWiki 'text' 表的大小

javascript - 将命名函数列表传递给 CoffeeScript 中的函数

javascript - 使用 CasperJS 作为可移植安装?

javascript - 为什么 this.evaluate 不能正确返回 DOM 节点?

node.js - 如何在不同的 casperjs 进程之间持久化 cookie

php - 在 MediaWiki 搜索中指定偏移量

javascript - 等到下拉列表元素在 CasperJS 中可见