Ter*_*kin 24 mediawiki spam-prevention spam phantomjs casperjs
有没有办法一致地检测PhantomJS/CasperJS?我一直在处理一堆用它构建的恶意垃圾邮件,并且已经能够基于某些行为阻止它们,但我很好奇是否有一种坚如磐石的方式来了解CasperJS是否正在使用中,如同处理不断适应变得有点烦人.
我不相信使用Captchas.他们是负面的用户体验,ReCaptcha从未在我的MediaWiki安装上阻止垃圾邮件.由于我们的网站没有用户注册(匿名讨论板),我们需要为每个帖子都有一个Captcha条目.我们每天会收到数千个合法的帖子,而且Captcha会看到这个号码.
hex*_*lys 22
我非常赞同你对CAPTCHA的看法.我将列出我迄今为止能够检测到的内容,以及我自己的检测脚本,具有类似的目标.它只是部分的,因为它们是更多的无头浏览器.
使用暴露的窗口属性来检测/假设那些特定的无头浏览器是相当安全的:
window._phantom (or window.callPhantom) //phantomjs
window.__phantomas //PhantomJS-based web perf metrics + monitoring tool
window.Buffer //nodejs
window.emit //couchjs
window.spawn //rhino
Run Code Online (Sandbox Code Playgroud)
以上内容是从jslint doc收集并使用phantom js进行测试的.
浏览器自动化驱动程序(由BrowserStack或其他Web捕获服务用于快照):
window.webdriver //selenium
window.domAutomation (or window.domAutomationController) //chromium based automation driver
Run Code Online (Sandbox Code Playgroud)
这些属性并不总是暴露出来,我正在研究其他更强大的方法来检测这样的机器人,我可能会在完成后将其作为完整的脚本发布.但这主要回答了你的问题.
这是另一个相当健全的方法来更广泛地检测JS无头浏览器:
if (window.outerWidth === 0 && window.outerHeight === 0){ //headless browser }
Run Code Online (Sandbox Code Playgroud)
这应该很好,因为即使虚拟视口大小由无头浏览器设置,默认情况下属性为0 ,并且默认情况下它不能报告不存在的浏览器窗口的大小.特别是,Phantom JS 不支持outerWith或outerHeight.
ADDENDUM:但是有一个Chrome/Blink错误,包含outer/innerDimensions.当页面在隐藏选项卡中加载时, Chromium 不会报告这些维度,例如从上一个会话恢复时.Safari似乎没有这个问题..
更新:原来iOS Safari 8+有一个bug,outerWidth和outerHeight为0,还有一个Sailfish webview也可以.因此,虽然它是一个信号,但如果不注意这些错误就不能单独使用它.因此,警告:除非你真的知道自己在做什么,否则请不要使用这个原始片段.
PS:如果您知道此处未列出的其他无头浏览器属性,请分享评论.
没有坚如磐石的方法:PhantomJS 和 Selenium 只是用于控制浏览器软件的软件,而不是由用户控制它。
特别是对于 PhantomJS 1.x,我相信您可以使用一些 JavaScript 来利用正在使用的 WebKit 版本中的错误来崩溃浏览器(它相当于 Chrome 13,因此很少有真正的用户会受到影响) 。(我记得几个月前 Phantom 邮件列表中提到过这一点,但我不知道是否描述了要使用的确切 JS。)更一般地,您可以使用用户代理与特征检测相匹配的组合。例如,如果浏览器声称是“Chrome 23”,但没有 Chrome 23 具有的功能(而 Chrome 13 没有),那么就会产生怀疑。
作为用户,我也讨厌验证码。但它们非常有效,因为它们增加了垃圾邮件发送者的成本:他必须编写更多软件或雇用人员来阅读它们。(这就是为什么我认为简单的验证码就足够好了:那些让用户烦恼的验证码是那些你不知道它说什么并且必须不断按重新加载才能获得你识别的内容的验证码。)
一种方法(我相信谷歌使用的)是有条件地显示验证码。例如,登录的用户永远不会看到它。已在本次会话中发表过一篇文章的用户不会再次显示。来自白名单(可以根据以前的合法帖子构建)中的 IP 地址的用户不会显示它们。或者相反,只是向 IP 范围黑名单中的用户显示它们。
我知道这些方法都不是完美的,抱歉。
| 归档时间: |
|
| 查看次数: |
10589 次 |
| 最近记录: |