如何在下载脚本中阻止机器人
Posted
技术标签:
【中文标题】如何在下载脚本中阻止机器人【英文标题】:How to block bots in a download script 【发布时间】:2011-10-28 15:50:12 【问题描述】:我创建了一个下载脚本,它让用户在下载自动开始前等待五秒钟,并计算下载量。这很简单。现在我需要找到一种方法来阻止机器人,因为我希望下载计数尽可能真实,这意味着我希望它只计算实际下载的用户而不是机器人。某处是否有机器人列表或只是一种方法来做我必须做的事情?谢谢。
【问题讨论】:
强制性 xkcd 参考:xkcd.com/233 你听说过一个叫captcha的东西吗? @Tuga:下面的答案中有很多关于验证码如何无效的问题。 @eric-j:当愚蠢的人不知道如何实现它时,当然它是无效的。 【参考方案1】:普通的“机器人”不能运行 javascript,所以他们不能等待(下载)。
如果您担心有“javascript”知识的机器人,您可以添加capcha
【讨论】:
我不使用 javascript,只是一个 php 脚本,在五秒后添加 ?action=download 并开始下载。除了验证码还有什么想法吗? @daGrevis:为什么?他说他想要相当可靠的统计数据,而不是为他的用户额外的步骤。 @daGrevis:验证码自 2008 年以来已被大规模破解 blogs.itbusiness.ca/2010/08/how-cyber-crooks-break-captchas @daGrevis 这是一个很好的观点,但是here is a counter-argument。 @daGrevis: reCAPTCHA 也坏了***.com/questions/448963/…【参考方案2】:行为良好的机器人应该尊重robots.txt,它允许您指示机器人如何抓取您的网站。
您无法可靠地阻止行为不端的机器人(就像其他人所建议的那样,尝试进行人类检测,例如验证码)。尽管许多机器人设置了一个特殊的用户代理(你可以看到examples here),但机器人可以将用户代理设置为它想要的任何东西。
【讨论】:
【参考方案3】:使用验证码。我建议你使用Recaptcha。
【讨论】:
我“不能”,我希望尽快开始下载。除了验证码还有什么想法吗? 我不知道机器人是如何工作的,但如果用户离开页面,下载应该会停止。 PHP中有一个脚本可以做到这一点。我不记得你在哪里可以得到它,但试试看。【参考方案4】:您可以使用多种方法来摆脱机器人,但它们也会过滤掉一些真实用户:
只允许发送可接受的用户代理字符串的客户端。 仅允许启用 JavaScript 的客户端。 只允许启用了 cookie 的客户端。 只允许客户取消选中“我是机器人”复选框。 仅允许未填写honeypot text input 的客户。 有一个验证码(这是由讨厌他们的用户并且不尊重他们的网站管理员使用的;只建议虐待狂和混蛋使用)您可以挑选或组合它们来创建您自己的机器人歧视风格。
【讨论】:
几乎不可能定义“可接受的”用户代理字符串(我最近解析了 3200 万条日志条目,发现了 200 万个唯一用户代理字符串,其中大部分是非机器人);即使您可以让机器人也可以发送它想要的任何用户代理字符串;机器人可以执行 JavaScript;机器人可以接受 cookie; bots可以置换post参数来模拟各种表单输入;验证码(如您所述)对用户并不友好。 @Eric 我同意你所说的一切。虽然这是一个非常复杂的机器人,可以做所有这些事情(假设,如果它可以操纵动态生成的 html、发送/设置 cookie、解析表单以找出要操纵的字段和要忽略的字段等,那么它也将能够破解大多数弱验证码),这仍然是完全可能的。在我看来,仅仅因为他们有一个被列入黑名单的 User-Agent 或禁用的 JavaScript 就将一个真正的用户视为一个机器人是不可接受的。所以我个人使用了其中的一些方法并接受了误报。 那么你有什么建议,埃里克? @Gabriele:机器人检测有点像一场武器战争……你投入多少精力取决于不时允许机器人通过的后果有多严重。如果您有兴趣获得最准确的统计数据,只需按照我的回答中的建议添加 robots.txt 可能是一个很好的解决方案。捕捉行为不端的机器人(尤其是在不让用户的生活更艰难的情况下)需要付出很多努力才能捕捉到相对较少的机器人。【参考方案5】:Honeypot fields 和 timestamp analysis。
【讨论】:
以上是关于如何在下载脚本中阻止机器人的主要内容,如果未能解决你的问题,请参考以下文章