有没有办法持续检测PhantomJS/CasperJS?我一直在处理用它构建的恶意垃圾邮件,并能够根据某些行为阻止它们,但我很好奇是否有一种可靠的方法来了解CasperJS是否在使用中,因为处理不断的适应变得有点恼人。
我不相信使用验证码。它们是一种负面的用户体验,并且ReCaptcha从未在我的MediaWiki安装上阻止垃圾邮件。由于我们的网站没有用户注册(匿名讨论板),所以我们需要为每个帖子提供一个验证码条目。我们每天收到几千个合法的帖子,验证码就会看到这个数字的炸弹。
发布于 2014-01-02 07:57:40
没有可靠的方法: PhantomJS和Selenium只是用来控制浏览器软件的软件,而不是用户控制它的软件。
特别是对于Chrome1.x,我相信有一些JavaScript可以用来使浏览器崩溃,这些浏览器利用了正在使用的WebKit版本中的错误(它相当于Chrome13,所以只有很少的真正用户应该会受到影响)。(我记得几个月前在Phantom邮件列表中提到过这一点,但我不知道是否描述了要使用的确切JS。)更普遍的是,您可以结合使用用户代理匹配和特征检测。例如,如果一个浏览器声称是"Chrome 23“,但没有Chrome 23所具有的功能(而Chrome 13也没有),那么就要怀疑了。
作为一个用户,我也讨厌验证码。但它们是相当有效的,因为它们增加了垃圾邮件发送者的成本:他必须编写更多的软件或雇用人类来阅读它们。(这就是为什么我认为简单验证码已经足够好了:那些惹恼用户的验证码是那些你不知道它说了什么,并且必须不断按下reload才能识别出的东西的验证码。)
一种方法(我相信Google使用的)是有条件地显示验证码。例如,登录的用户永远不会看到它。已经在此会话中发布了一次的用户不会再次显示它。来自白名单(可以从以前的合法帖子建立)中IP地址的用户不会被显示出来。或者相反地,只将它们显示给IP范围黑名单中的用户。
我知道这些方法都不是完美的,抱歉。
发布于 2014-06-29 03:43:50
您可以通过检查window.callPhantom属性来检测客户端上的幻影。客户端的最小脚本是:
var isPhantom = !!window.callPhantom;这是一个可以工作的gist with proof of concept。
垃圾邮件发送者可以尝试使用page.evaluate删除此属性,然后取决于谁更快。在尝试检测之后,根据检测结果重新加载post表单和验证码。
问题是你会引起重定向,这可能会惹恼你的用户。这对于客户端上的每种检测技术都是必要的。它可以被onResourceRequested颠覆和更改。
一般来说,我认为这是不可能的,因为您只能在客户端进行检测并将结果发送到服务器。将CAPTCHA与仅加载一个页面的检测步骤相结合并不会真正增加任何内容,因为使用phantomjs/casperjs可以很容易地删除它。基于用户代理的防御也没有意义,因为它可以很容易地在phantomjs/casperjs中更改。
https://stackoverflow.com/questions/20862728
复制相似问题