停止脚本从砰击您的网站

我已经接受了一个答案,但令人遗憾的是,我相信我们陷入了我们最原始的最糟糕的情况: CAPTCHA每个人都在购买废话的尝试 。 简短的解释:缓存/网站农场无法跟踪点击数,任何解决方法(发送非缓存的网络信标,写入统一表格等)都会降低网站的速度。 思科等昂贵的硬件可能会提供很高的帮助,但如果CAPTCHA-everyone是另一种选择,则很难证明成本合理。 我会在稍后尝试更全面的解释,以及为将来的搜索者进行清理(尽管欢迎其他人尝试,因为它是社区wiki)。

情况

这是关于woot.com上的垃圾袋销售。 我是Woot Workshop的子公司Woot Workshop的总裁,Woot的子公司是设计人员,负责编写产品说明,播客,博客文章和讨论论坛。 我使用CSS / HTML工作,并且对其他技术几乎不熟悉。 我与开发人员密切合作,并在此讨论了所有的答案(以及我们已有的许多其他想法)。

可用性是我工作的重要组成部分,使网站令人兴奋和有趣的是其余的大部分。 这就是以下三个目标的来源。 CAPTCHA危害可用性,机器人从我们的废话销售中窃取乐趣和兴奋。

机器人正在为我们的随机发售出售数十次屏幕抓取(和/或扫描我们的RSS)。 当他们看到这一点时,它触发了登录程序的第二阶段,点击我想要的One,填写表单并购买废话。

评估

lc:在使用此方法的stackoverflow和其他站点上,他们几乎总是处理已验证(已登录)的用户,因为正在尝试的任务需要这样做。

在Woot上,匿名(未登录)的用户可以查看我们的主页。 换句话说,砰击机器人可以是非认证的(并且除IP地址之外基本上不可追踪)。

所以我们又回到了扫描IP地址的问题:a)在这个云计算网络和spambot僵尸时代没有任何用处; b)由于来自一个IP地址的企业数量太多,导致无辜者屡见不鲜(更不用提非静态IP ISP和潜在的性能命中来试图追踪这一点)。

哦,有人打电话给我们会是最糟糕的情况。 我们可以让他们打电话给你吗?

BradC:Ned Batchelder的方法看起来很酷,但他们的设计非常稳固,可以击败为网站建立的机器人。 我们的问题是机器人专门用来击败我们的网站。 其中一些方法很可能会在很短的时间内运行,直到脚本编程人员发展出他们的机器人来忽略蜜罐,屏幕抓取附近的标签名称而不是表单ID,并使用支持JavaScript的浏览器控件。

再次说:“当然,除非宣传是你营销计划的一部分。” 是的,它绝对是。 当物品出现的时候,以及如果你设法得到一个令人兴奋的惊喜,可能与你最终得到的废话一样多或者更重要。 任何消除先到先/先服务的东西都不利于“赢得”废话的快感。

novatrust:就我而言,欢迎我们新的机器人霸主。 我们实际上提供RSS源,以允许第三方应用程序扫描我们的网站以获取产品信息,但不在主网站HTML之前。 如果我正确地解释它,你的解决方案通过完全牺牲目标1来确实有助于目标2(性能问题),并且只是放弃了机器人将购买大部分垃圾的事实。 我投了你的回应,因为你的最后一段悲观主义对我来说是准确的。 这里似乎没有银弹。

其他答复通常依赖于IP追踪,这似乎同样无用(与僵尸网络/僵尸/云网络)并且有害(捕捉来自同一IP目的地的许多无辜者)。

任何其他方法/想法? 我的开发人员总是说“让我们做CAPTCHA”,但我希望对所有想要我们一些废话的人来说,这些方法都不那么令人反感。

原始问题

假设你正在销售一种价格非常高的廉价产品,而且你的数量非常有限。 没人确切知道你什么时候会卖这个物品。 超过一百万人经常来看你卖的东西。

你最终会遇到脚本编写人员和机器人试图通过编程的方式[a]发现你销售物品时的情况,并确保他们是第一个购买它的人。 这有两个原因:

  • 你的网站被非人类抨击,每个人都放慢速度。
  • 脚本员最终'赢得'该产品,导致常客感到被欺骗。
  • 一个看似明显的解决方案是在下订单前为用户创建一些环节,但至少有三个问题:

  • 用户体验很糟糕,因为他们必须破译CAPTCHA,挑出猫,或解决数学问题。
  • 如果感觉到的收益足够高,而且人群足够大,一些团队将围绕任何调整找到解决办法,从而导致军备竞赛。 (特别是调整越简单;隐藏的“评论”形式,重新排列表单元素,错误标记它们,隐藏的“疑难杂症”文本都会一次工作,然后需要更改以针对此特定表单进行更改。)
  • 即使脚本编写人员无法“解决”您的调整,也不会阻止他们砰击您的首页,然后手动发出警报,让脚本编写者填写订单。 鉴于他们从解决[a]中获得优势,他们仍然可能赢得[b],因为他们将成为第一批到达订单页面的人。 此外,1.仍然发生,导致服务器错误和每个人的性能下降。
  • 另一种解决方案是监视IP经常打,阻止他们从防火墙,否则阻止他们订购。 这可以解决2.并阻止[b],但扫描IP所带来的性能巨大,并可能导致更多的问题,如脚本编写者自己造成的问题。 此外,云网络和spambot僵尸的可能性使得IP检测相当无用。

    第三个想法是迫使订单在一段时间内(比如说半秒)被加载,这可能会减慢快速订单的进度,但是同样,脚本编写人员仍然是第一批在任何速度下都不会对实际用户。

    目标

  • 将商品出售给非脚本人员。
  • 保持网站运行速度不被机器人减慢。
  • 不要为任何要完成的任务完成的“正常”用户辩护,以证明他们是人类。

  • 如何实施像SO这样的CAPTCHA?

    如果您正常使用该网站,则可能永远无法看到该网站。 如果您碰巧经常重新加载相同的页面,过快地发布连续的评论,或触发警报的其他事情,可以证明他们是人类。 在你的情况下,这可能会不断重新加载同一页面,快速查看页面上的每个链接,或填写订单表单太快而无法成为人。

    如果他们连续检查x次(例如2或3次),则给该IP超时或其他此类措施。 然后在超时结束时,将它们重新转回到检查。


    由于您有未注册的用户访问该网站,因此您确实只有IP才能继续。 如果您愿意,您可以向每个浏览器发布会话并进行跟踪。 当然,如果连续(重新)创建了很多会话(如果机器人不断删除cookie),就要进行人工检查。

    就捕捉太多无辜者而言,您可以在人工检查页面上提出免责声明:“如果有太多的匿名用户在同一地点观看我们的网站,也可能会出现此页面。我们鼓励您注册或登录以避免这个。” (适当调整措辞。)

    此外,X人从一个IP同时加载同一页面的几率是多少? 如果它们很高,也许你需要一个不同的触发机制来处理你的机器人警报。


    编辑:另一种选择是,如果他们失败太多次,并且您对产品的需求有信心,阻止他们并让他们亲自打电话给您删除该块。

    有人打电话看起来像是一个天秤,但它确保电脑后面有一个人。 关键是让这个区块只适用于一个几乎不会发生的情况,除非它是一个机器人(例如连续多次检查失败)。 然后它强制人类互动 - 拿起电话。

    为了回应他们给我打电话的评论,这里显然有这种权衡。 您是否担心确保您的用户在出售时能接受几个电话? 如果我非常担心产品能够吸引用户,我必须做出这个决定,或许会牺牲我的一小部分时间。

    由于您似乎决定不让机器人占据上风/严重影响您的网站,我相信这款手机可能是一个不错的选择。 由于我不会从您的产品中获利,因此我无意收到这些电话。 然而,如果你分享一些利润,我可能会感兴趣。 因为这是你的产品,所以你必须决定你多少关心和相应地实施。


    其他释放块的方式并没有那么有效:超时(但是他们会在你再次冲击你的站点,冲洗 - 重复),长时间的暂停(如果它真的是一个试图购买你的产品的人,他们会因为没有支票而被罚款),电子邮件(很容易通过机器人完成),传真(相同)或蜗牛邮件(花费太长时间)。

    当然,您可以在每次IP超时时间内增加超时时间。 只要确保你不会在无意中惩罚真正的人类。


    你需要想出一个办法让机器人购买大量价格过高的东西:12毫米翼果:20美元。 在脚本编写者决定对他们进行游戏之前,看看有多少个僵尸程序可以收起来。

    利用利润购买更多的服务器并支付带宽。


    我的解决方案是通过延迟大约10分钟的漫游器和脚本来使屏幕抓取毫无价值。

    以下是我的做法:

  • 记录并识别任何重复的击球手。
  • 您无需在每次击中时记录每个IP地址。 只在每20次点击中追踪一次。 重复犯人仍然会出现在随机的偶尔跟踪中。

  • 从大约10分钟之前保留您的页面缓存。

  • 当重复击球员/机器人击中您的站点时,给他们10分钟的旧缓存页面。

  • 他们不会立即知道他们正在获取旧网站。 他们将能够抓住这一切,但是他们不会再赢得任何比赛,因为“真人”将有10分钟的先发。

    优点:

  • 用户没有麻烦或问题(如CAPTCHA)。
  • 在服务器端完全实现。 (不依赖Javascript / Flash)
  • 投放较旧的缓存页面应该比实时页面的性能密集度要低。 这样可以减少服务器上的负载!
  • 缺点

  • 需要跟踪一些IP地址
  • 需要保留和维护旧页面的缓存。
  • 你怎么看?

    链接地址: http://www.djcxy.com/p/21611.html

    上一篇: Stopping scripters from slamming your website

    下一篇: client security with web control in CMS