停止脚本每秒钟砰地关闭你的网站数百次

emagni 发布于 2019-11-10 bots 最后更新 2019-11-10 11:57 384 浏览

[update] I've accepted an answer, as lc deserves the bounty due to the well thought-out answer, but sadly, I believe we're stuck with our original worst case scenario: CAPTCHA everyone on purchase attempts of the crap. Short explanation: caching / web farms make it impossible for us to actually track hits, and any workaround (sending a non-cached web-beacon, writing to a unified table, etc.) slows the site down worse than the bots would. There is likely some pricey bit of hardware from Cisco or the like that can help at a high level, but it's hard to justify the cost if CAPTCHAing everyone is an alternative. I'll attempt to do a more full explanation in here later, as well as cleaning this up for future searchers (though others are welcome to try, as it's community wiki).
我已经为这个问题添加了赏金,并试图解释为什么当前的答案不符合我们的需求。首先,感谢所有想到这一点的人,拥有这种集体智慧来帮助解决看似不可能的问题是令人惊讶的。 我会比以前更加清晰:这是关于woot.com上的包装销售情况。我是Woot Workshop的总裁,Woot是Woot的子公司,负责设计,撰写产品说明,播客,博客文章以及审核论坛。我在css / html世界工作,我对其他开发人员世界几乎不熟悉。我与开发人员密切合作,并在这里讨论了所有答案(以及我们已经拥有的许多其他想法)。 网站的可用性是我工作的重要组成部分,使网站令人兴奋和有趣是其余的大部分内容。这就是下面三个目标的来源。 CAPTCHA损害了可用性,机器人从我们的垃圾销售中窃取了乐趣和兴奋。
为了更多地设置场景,机器人正在将我们的头版每秒数十次屏幕拍摄(和/或扫描我们的RSS)用于随机垃圾销售。他们看到的那一刻,它触发了登录程序的第二阶段,点击我想要一个,填写表格,并购买垃圾。
在目前(2/6/2009)的投票顺序中: lc: 在stackoverflow和其他使用此方法的站点上,它们几乎总是处理经过身份验证的(已登录)用户,因为正在尝试的任务需要这样做。 在Woot上,匿名(未登录)用户可以查看我们的主页。换句话说,砰击机器人可以是非认证的(并且除了IP地址之外基本上是不可跟踪的)。 所以我们又回到了扫描IP,其中a)在这个云网络和spambot僵尸时代相当无用,以及b)因为来自一个IP地址的企业数量而吸引了太多的无辜者(更不用说与非静态IP ISP和潜在的性能命中试图跟踪这个)。 哦,让人们打电话给我们将是最糟糕的情况。我们可以让他们打电话给你吗? BradC Ned Batchelder的方法看起来很酷,但它们的设计非常坚固,可以打败为网站构建的机器人。我们的问题是机器人是专门为打败我们的网站而构建的。其中一些方法可能会在很短的时间内工作,直到脚本编写者发展他们的机器人忽略蜜罐,为附近的标签名称而不是表单ID进行屏幕抓取,并使用支持javascript的浏览器控件。 lc again “当然,除非炒作是你营销计划的一部分。”是的,肯定是。当项目出现时的惊喜,以及如果你设法获得一个项目的兴奋可能与你最终得到的垃圾一样重要或更重要。任何消除先到先得的东西都不利于“赢得”废话的快感。 novatrust 而且,我,欢迎我们新的机器人霸主。我们实际上提供rss feed以允许第三方应用程序扫描我们的网站以获取产品信息,但不会超出主站点html。如果我正确地解释它,你的解决方案确实通过完全牺牲目标1来帮助目标2(性能问题),并且只是辞去机器人将购买大部分垃圾的事实。我赞成你的回答,因为你的最后一段悲观主义对我来说是准确的。这里好像没有银弹。 其余的响应通常依赖于IP跟踪,这似乎既无用(使用僵尸网络/僵尸/云网络)也是无用的(捕获来自同一IP目的地的许多无辜者)。 还有其他方法/想法吗?我的开发人员一直在说“我们只是做CAPTCHA”,但我仍然希望有一些不太干扰的方法让所有真正的人类想要我们的废话。
END UPDATE,以下是原始问题: 假设您正在销售具有很高感知价值的便宜货,而且您的数量非常有限。没有人确切知道你何时会出售这件物品。超过一百万人经常来看看你卖的是什么。 你最终会编写脚本,机器人和黑客,尝试以编程方式[a]弄清楚你何时出售所述物品,并[b]确保他们是第一批购买它的人。这很糟糕有两个原因:
  1. 您的网站遭到非人类的抨击,所有人都放慢了速度。
  2. 脚本编写者最终“赢得”了产品,导致常客感到受骗。
一个看似显而易见的解决方案是为您的用户创建一些环节,以便在下订单之前跳过,但至少有三个问题: 一世。用户体验很糟糕,因为他们必须解密CAPTCHA,挑选猫或做数学问题。 II。如果感知到的好处足够高,并且人群足够大,那么一些团队将会绕过任何调整,导致军备竞赛。 (尤其如此,调整更简单...隐藏'评论'形式,重新安排表单元素,错误标记它们,隐藏'gotcha'文本都将工作一次然后需要更改以对抗所有针对此特定表单的人。) III。即使脚本编写者无法“解决”您的调整,最终它也不会阻止他们抨击您的首页,然后发出警报让脚本编写人员完全填写订单。鉴于他们从解决[a]中获得优势,他们可能仍然会赢[b],因为他们将成为第一批到达订单页面的人。此外,1。仍然会发生,导致服务器错误,并降低每个人的性能。 另一个解决方案是监视IP经常发生命中,阻止它们进入防火墙,或以其他方式阻止它们进行排序。这可以解决2.并且防止[b]但是因为它们进入的IP扫描的性能很大,并且可能会导致比脚本编写者自己造成的更多问题。此外,云网络和spambot僵尸的存在使IP检查相当无用。 第三个想法,迫使订单表格加载一段时间(比如说,半秒钟)可能会减慢快速订单的进度,但同样,脚本编写者仍然可能是第一批人,无论如何都不会有害对于实际用户。
我最终的目标是一些解决方案:
  1. 将该项目出售给非脚本人。
  2. 让网站以不受机器人减速的速度运行。
  3. 不要让“正常”用户无法完成任何任务以证明他们是人。
已邀请:

pculpa

赞同来自:

使用hashcash

Hashcash is a denial-of-service counter measure tool. Its main current use is to help hashcash users avoid losing email due to content based and blacklist based anti-spam systems.

nsit

赞同来自:

从来没有想过我会推荐闪光灯,但闪光灯呢?如果是交易时间,请让您的服务器将异步加密内容发送到闪存文件信号。只要响应是相同大小的交易或没有交易,机器人无法分辨它是什么。 在更一般的层面上,您需要关注人类和浏览器所拥有的资源,脚本机器人不会利用这些资源,并利用易于人类/浏览器和机器人难以处理的事物。 Captcha显然是一种简单的尝试,但不适合您的网站。 Flash会淘汰大量机器人,只留下那些驱动真实浏览器的(较慢)机器人。如果只需要用户点击正确的位置,解决方案可能比验证码简单得多。 利用人类的大规模并行图像处理能力!

kaut

赞同来自:

好的,我有几个问题而不是答案,因为我没有使用该技术的经验,无法知道它是否可行/或有帮助。 有以下目标:
   1.将物品卖给非脚本人。
   2.让网站以不受机器人减速的速度运行。
   3.不要让“正常”的用户无法完成任何任务来证明他们是人类 我的问题是:

  • 。 Flash应用程序,Java小程序,Silverlight或类似程序是否会降低屏幕抓取的容易程度,以减少机器人的影响?
    我很好奇这些外部操作是否与典型的javascript / html一样广泛。 虽然它不是Web开发的标准,但从SEO的角度来看可能并不“好”,但如果您拥有数百万用户,那么搜索可见性似乎不是您的问题。我相信其中任何一个仍然可以提供一个非常好看的界面,所以你的人类不会被设计推迟。
  • 。你能把所有信息都放在一张图片里吗?我从来没有见过你所指的woot部分,但我建议的是将人类需要知道的任何文本放在人类友好的图像中而不是机器人友好的文本框中。 哦,还有其他一些回应中提到的第二件事。不要错过你的大好机会: 你有很多Bots的需求,那些有机器人的人真的买对吗?你还想要他们的钱吗? (因为如果没有,我会接受它。) 这些有机器人的人有没有其他选择从你那里购买?把你的垃圾袋分开。 有一个为机器人设计的woot子网站,面向机器人,让脚本编写者有很多乐趣,并为此付钱。卖掉他们的废话,让他们挑战自己与其他脚本编写者。这是一个完全独立的市场。 如果他们有一个替代方案,他们可以赢得一些东西,并获得吹牛的权利,他们可能会更少倾向于殴打这个小老头。

lnon

赞同来自:

已经提供了大多数纯技术解决方案。因此,我建议另一种观点。 据我了解,机器人是由真正试图购买你正在销售的袋子的人建立的。问题是 -

  1. 其他不操作机器人的人应该有机会购买,而且你提供的袋子数量有限。
  2. 你想吸引人来到你的网站,然后卖掉行李。
您可以让潜在的购物者订阅电子邮件,甚至是短信更新,以便在销售时获得通知,而不是试图避开机器人。您甚至可以给他们一两分钟的开头(一个特殊的URL,其中销售开始,随机生成,并与邮件/ SMS一起发送)。 当这些买家去购买时,他们就在你的网站上,你可以在横幅或其他任何地方向他们展示你想要的东西。那些运行机器人的人更愿意只注册你的通知服务。 机器人跑步者可能仍会在您的通知上运行机器人以更快地完成购买。一些解决方案可以提供一键购买。 顺便说一句,你提到你的用户没有注册,但听起来那些购买这些包的人不是随机的买家,而是期待这些销售的人。因此,他们可能愿意注册以获得试图“赢”一个包的优势。 从本质上讲,我所建议的是尝试将问题视为社交问题,而不是技术问题。 阿萨夫

yhic

赞同来自:

可能没有好的解决方案,只要袋子的惊人分布仅与时间点相关联 - 因为机器人有足够的时间,并且资源可以在短时间内保持对站点的砰击。 我认为你必须添加一个额外的标准,机器人不能从他们的结束屏幕刮擦或操纵。例如,据说在任何时候有5000名人类每分钟几次点击页面寻找废话袋,每秒钟就有50个机器人砰地关上它。在它出现后的最初几秒钟内,50个机器人将全部拍摄下来。 因此,您可以添加一个条件,首先将垃圾出现给任何用户,其中整数IP的模数30是一个随机数,例如17.可能每秒都会添加另一个随机数,因此垃圾邮件会逐渐显示给所有客户端30秒。 现在想象一下前几秒钟会发生什么:目前,所有50个机器人都能立即抢购所有废话,人类得到0.根据这个方案,6秒后只有10个机器人通过,而1000个人有得到了,大部分废话都归于人类。您可以使用时间和随机模数来尝试优化该间隔,具体取决于用户数量和可用单位。 不是完美的解决方案,而是一种改进。好处是人类比机器人受益更多。有几个缺点,主要是并不是每个人在任何特定的日子都能得到同样的机会 - 尽管他们现在没有太多的机会,我猜想即使没有机器人,他们中的大多数都被拒之门外除非他们碰巧恰好在正确的秒钟刷新。并且,它不适用于具有大量分布式IP的僵尸网络。 Dunno,如果有人真的使用僵尸网络只是为了woot废话。

qquod

赞同来自:

如果您随机化或加密表单名称和ID,随机化表单字段的顺序,并使表单标签成为随机验证码图像,这会使脚本攻击变得更加困难:-D

set

赞同来自:

好吧所以垃圾邮件发送者不会竞争普通人赢得“垃圾bog”拍卖?为什么不让下一次拍卖成为一个字面上的“垃圾袋”?垃圾邮件发送者可以为一个装满狗狗的袋子付出很多钱,我们都嘲笑他们。

ket

赞同来自:

对未注册用户的所有产品公告延迟5分钟。休闲用户不会真正注意到这一点,无论如何都会注册非常用户。

xid

赞同来自:

如果这个答案已经提交,请原谅我。有很多答案可以尝试阅读&了解所有这些。 为什么你不能每隔一段时间改变你的购买API?难道这不会对人类用户完全透明,并且几乎杀死了大多数购买者吗? 一种实现方式是在点击“我想要一个”按钮后更改用户必须填写的字段的名称并在页面上提交。你实际上每年卖多少次中银?不常见。因此,每当中国银行开始销售时,使用不同的采购API编程,测试并准备好使用这将不会是一个巨大的编程负担。 只需确保使用旧的和不正确的API的机器人不会关闭服务器。也许每次都在不同的服务器上托管BOC购买API。通过这种方式,机器人可以关闭我们人类BOC购买者实际上没有使用的服务器。

ut_sed

赞同来自:

让整个血腥页面成为CAPTCHA!
像芝麻街那样排序......其中八件事,不属于这里...... 在屏幕上放置9个项目,9个HTML表单,9个I WANT ONE按钮 (9只是当天的数字...选择你想要的任何数字,布局看起来仍然很好。也许12。也许可以自定义一些用于加载浏览器的分辨率...) 并为每个人争抢。
确保必须“看到”BOC才能知道它是哪一个...当然这意味着其他8个也必须“只能看到”,知道它们不是要购买的物品。
确保你只使用疯狂的数字来引用页面源代码中的幕后所有内容。 很好,所以BOT看到了它的BOC时间......但是选择正确的HTML表单提交回来进行处理将是一个疯狂的猜测。

taut

赞同来自:

这总是很难,我赞赏你避免使用CAPTCHA的愿望。我建议先根据他们的行为阻止他们,你可以通过HTTP请求确定。看看这个名为bad behavior的工具,在我已经在几个网站上使用它的那一年里,它还没有阻止真正的人类。大多数机器人都不能很好地假装成一个Web浏览器。我还建议使用项目蜜罐API。 其次,随机改变您的表格,包括标签。这不是为了欺骗机器人,这旨在让您发现他们的IP地址/代理。将条目搞砸了xx次的东西应该放在那个列表上。 最后,如果您发现自己处于一种只需要使用某种人工验证过程的位置,请尝试以下方法:

[ image of a pig ]
The image above is a: [ ] dog  [ ] house [ ] pig
这对人类来说不会很烦人。 简而言之,您的问题没有“一个”解决方案,不要期望100%成功。设定你的目标是减少烦恼到非常沉闷的咆哮,你应该能够很快地做到这一点。

ket

赞同来自:

扫描网站的费用很高。 我无法知道可以将僵尸程序排除在您的网站之外。我甚至知道一项服务,有人为你扫描网站。你会怎么处理? 机器人最糟糕的事情是,当一个网站发生变化时。过了一段时间它会变得昂贵或无聊以保持机器人运行。您的网站上可能有更新看起来像新产品,但实际上并非如此。如果你不规则地更新和不可预测的东西正在得到机器人真正的努力。 禁止IP可能是一种对策,只要它是已知的IP即可。罪犯需要使用代理。我知道的代理工作得很好,但是你的速度很慢。

fet

赞同来自:

可能没有一个能够照顾机器人的神奇银弹,但这些建议的组合可能有助于阻止它们,并将它们减少到更易管理的数量。点击 如果您对以下任何建议有任何澄清,请与我们联系:

  • 描述该项目的任何图像应始终为相同的图像名称(例如“current_item.jpg”),或者应该是为每个请求更改的随机名称。服务器应该知道当前项目是什么,并将提供适当的图像。此图像还应具有随机数量的填充,以减少机器人比较图像大小。 (可能会改变某种水印以阻止更复杂的机器人)。
  • 从这些图像中删除ALT文本。此文本通常是可在页面上其他位置找到的冗余信息,或使其成为通用替代文本(例如“当前项目图像将在此处”)。
  • 每次出现一袋废话时,描述可能会发生变化。它可以在许多不同名称之间(随机)旋转:“随机废话”,“BoC”,“Crappy Crap”等......
  • Woot还可以“随机废话”价格提供更多商品,或者价格是0.95美元到1.05美元之间的随机数量(每次Crap出现时只更改一次,而不是每个用户,为了公平)
  • 区分BoC与其他Woot的价格,描述和其他区域可能是图像而不是文本。
  • 这些字段也可以是Java(不是javaScript)或Flash。虽然依赖于第三方插件,但它会使机器人更难以以有用的方式刮擦您的网站。
  • 使用图像,Java,Flash和其他技术的组合将是使机器人更难的另一种方式。这将是一个更难管理,因为管理员必须知道许多不同的平台。
  • 还有其他方法来混淆这些信息。在不影响用户体验的情况下,使用客户端脚本(javascript等)和服务器端混淆(随机图像名称)的组合将是最可能的方法。添加一些混淆的Java和/或Flash或类似的东西会使其变得更加困难,同时可能对某些用户产生最小的影响。
  • 将上述一些策略与上面提到的一些策略相结合:如果页面每分钟重新加载超过x次,则更改图像名称(如果上面有建议的静态图像名称),或者给它们两分钟旧的缓存页面。
  • 你可以在后端做一些非常复杂的事情,用户行为跟踪可能不需要太多的处理。您可以将该工作卸载到专用服务器,以最大限度地降低性能影响。从请求中获取一些数据并将其发送到可以处理该数据的专用服务器。如果它发现了一个可疑的僵尸程序,根据其行为,它可以向另一个服务器(前端路由防火墙,服务器,路由器等或后端Web或内容服务器)发送一个挂钩,为这些用户添加一些额外的安全性。可能会为这些用户添加Java小程序,或者需要用户提供其他信息(不要预先填写订单页面中的所有字段,每次随机使其他字段为空等)。

nnam

赞同来自:

假设不可谈判: 第一个屏幕需要是简单的低开销HTML,只需一个容易识别的(机器人或人工智能)按钮点击或等效,明确表示“我想要我的垃圾”。因为我们假设最坏的情况 - 你从机器人和非机器人的组合相当于DOS攻击,所有首先点击该网站(就可识别性而言)。因此,让我们尽快从缓存,良性回声机器人等处理出来。 (注意:就wooter而言,无论如何都会发生这种情况;对于用户而言,与Woot一样痛苦,因此任何有助于吸收或减轻第一次屏幕获取的事情都符合所有相关方的利益。) 然后,对于非机器人而言,该过程不再需要比目前更加恶化,而且没有额外的步骤(或痛苦)。 (关于当前设计的背景说明:当前的wooters通常已经签署,或者可以在购买过程中登录。新买家需要在购买时注册。因此,已经注册的速度实际上更快,并且已经更快地登录。) 要完成废话销售,需要导航交易屏幕的进度(例如5,加或减,视情况而定)。获奖者是第一个完成全部导航的人。当前流程奖励最快完成整个5个屏幕序列的机器人(或其他任何人);但是整个进程偏向于快速响应(即机器人)。 毫无疑问,机器人将拥有第一个屏幕的优势;无论他们从那一点上取得了什么样的成就,他们都会通过剩下的屏幕,以及其他阶段提供的机器人优势。


如果Woot在第一个屏幕之后故意将排队过程解耦,并将每个会话从该点馈送到一系列固定最小时间步骤,该怎么办?直到30秒才会出现第二个屏幕;提交后,同样适用于以下屏幕。我敢打赌,如果他们被告知,在第一个屏幕之后,他们会在队列中等待(这已经是真的)会随着时间的推移以一种不应该比以前更长时间的方式传播负载,那么wooters也没有问题。强大,并帮助淘汰机器人。此时你可以抛出上面列出的一些机器人速度块(DOM对象中的细微变化等)。只是从Woot对事物的控制能力的认知中获益将有所帮助。 如果更高比例的BOC初始命中率可能会在他们的第一次击中(或接近它)时进入非机器人非关键时段,而不是重试,那么超越这一点的真正的人会更有信心。可以肯定的是,它不会像现在这样充满敌意。它可能会减少背景噪音 - 环境 - 机器人速率,即使在正常的Woot-Off情况下也会一直持续。然后机器人将关闭主页并与其他人(以及其他所有人)一起排队等候他们没有优势。
嗯...想到“公寓线程”的概念。我想知道这个模式是否有用吗?
这里有一个有用的核心概念是,在第一个屏幕之后,能够跟踪累计的队列总时间并能够调整到标准。作为一种机器人缓解策略,您可能会有一点点灵活性,可能会将最早的会话捏造5到10秒;这样做可能是无法察觉的,但会导致更丰富的非机器人购买组合。我确定你有统计数据来帮助评估这样的事情。
只是为了好玩,你可以(至少为一个wootoff)组合你自己的机器人,结合你见过的最好的功能,然后在前一天交给每个人。那么至少每个人都会同样武装起来。 (然后鸭......来......)

rtotam

赞同来自:

ASP.net AJAX控件工具包中的NoBot Control怎么样? 它会执行一些自动化的javascript请求和计时技巧,以防止机器人在没有用户交互的情况下访问该站点。 对不起,如果这不符合某些要求,我只需要打电话给 tl; dr> D.

liste

赞同来自:

我没有看到您通过检查传入的IP声称的巨大负担。相反,我为我的一个客户做了一个项目,每隔五分钟就会分析一次HTTP访问日志(可能是实时的,但是由于某些我从未完全理解的原因,他不希望这样做)创建防火墙规则以阻止来自生成过多请求的任何IP地址的连接,除非可以确认该地址属于合法搜索引擎(google,yahoo等)。 此客户端运行Web托管服务,并在三台服务器上运行此应用程序,这三台服务器共处理800-900个域。峰值活动在每秒千次点击范围内并且从未出现性能问题 - 防火墙在从黑名单地址中丢弃数据包方面非常有效。 而且,是的,DDOS技术确实存在会破坏这个方案,但他没有看到在现实世界中发生这种情况。相反,他说这大大减轻了他服务器的负担。

aid

赞同来自:

今天您将在灯光上做足够的工作来支付思科的CAPTCHA计划!我们都习惯于购买音乐会门票和其他东西......这似乎只是公平的。今天这样做的方式是让一些人感到不安,并提出有关抽奖或扫荡的问题。我相信在你尝试之前你已经检查过了,但这并不是一个真正有趣的方式来购买BOC ......这需要所有的兴奋! 获得中国银行的第一个或者一个伟大的产品,即使是在视线中吸引人们到Woot。如果没有理由在等待随机中国银行上市的时候闲逛并购买大量的东西,那么销售额就会下降。 CAPTCHA可能是打败这些人的唯一方法,仍然保持Woot的兴奋。 我是第一个上次订购BOC的人之一,我的第一笔订单被丢弃了,而且第二笔订单被淘汰了,第二笔订单却被淘汰了,但后来被我的帐户取出了。我生气。我离开了Woot并没有像过去那样购买其他日子的物品。今天,我愿意再次尝试这种方式。我怀疑将来如果没有CAPTCHA就会有趣的东西。 有许多网站试图像Woot。当然,他们不符合你的水平。我发现自己正在阅读产品描述,并不是因为我想要产品,而是我甚至还要大笑。我不愿意看到有人参与更公平的计划并带走你的大部分业务。 只是我的观点。我知道几乎没有关于机器人和计算机的事情,因为我是一名护士。但我的投票是升级到更高级别......有机器人的人只需要与我们其他人一致,这就是方式它应该是:) 洛瑞

uanimi

赞同来自:

创建一个简单的IP防火墙规则,如果检测到超过最大值,则将IP地址列入黑名单。每秒进来的请求数。

zipsum

赞同来自:

如果你无法击败他们......改变规则! 为什么不提供比脚本编写者更好的系统?
修改您的网站,以便不使用bot脚本的人更公平。人们注册(CAPTCHA或电子邮件验证)并有效进入彩票竞赛中获胜! '获胜'让它变得更有趣。并且每个人都支付一小笔入场费,因此获胜者可以获得更少的产品

ad_est

赞同来自:

至于CAPTCHAing每个人,为什么不使用只需要你怀疑是机器人的IP的CAPTCHA的Google解决方案,甚至只是那些锤击网站的用户呢?我肯定在他们购买时要求某人购买CAPTCHA,如果他们一直在锤击该网站并不是那么糟糕,它与熬夜并反复击中F5差不多。那个或者在锤击时可能需要一个定期的CAPTCHA,比如每百个(可能更小?)左右刷新,以阻止警报机器人工作。您需要某种CAPTCHA来防止僵尸,但您还需要考虑到您的真实用户将像机器人一样行事。

eea

赞同来自:

您的最终目标是扩展到更大的用户群,他们可以购买东西。 如果你做了一些事情,比如在一两个小时内,在一系列IP地址上释放你的行李,而不是同时将它们全部释放到任何IP地址。 假设你有255袋w00t。 1.0.0.0可以在第一分钟购买,2.0.0.0可以在第二分钟购买(可能有2袋可用),等等。 然后,在255分钟之后,你已经为所有人提供了可用的袋子,尽管很可能不会留下所有255袋w00t。 这限制了对具有> 255台计算机的用户的真正攻击,尽管僵尸用户可能能够“拥有”分配给其IP范围的w00t包。 没有要求你将袋子与IP公平匹配(你绝对应该使用某种类型的MD5 /随机种子)...如果你逐步分发10袋w00t,你只需要确保它分发~均匀地跨越你的人口。 如果IP是坏的,那么你可以使用cookie并排除用户获得一袋w00t的用例。 如果您发现某个特定的IP,cookie或地址范围有极大的流量,请按比例在后期/最后时间为他们提供这样的包,以便偶尔/稳定/慢速访问者在重/快/可能之前获得机会机器人用户。

  • 罗伯特·

uut

赞同来自:

一些想法:

  1. 简单:不要将其命名为“Random Crap”。每次更改项目的名称,以便机器人更难识别它。他们仍然可能会寻找1.00美元的商品,在这种情况下,我建议偶尔会卖掉1美元的口香糖几分钟。 5美元的运费应该值得你花时间。
  2. 更难:不要让用户做任何额外的事情 - 让用户的电脑做额外的事情。编写一个JavaScript函数,执行密集计算,获取大量处理能力 - 比如第1000万个素数 - 并让用户的计算机计算该值并在接受订单之前将其传回(甚至可能创建“下订单“URL”。更改每个BoC的功能,以便机器人无法预先计算和缓存结果(但这样你就可以)。计算开销可能只会减慢机器人的速度,足以让它们远离你的背部 - 如果不出意外的话,它会减慢服务器上的点击速度,以便它们可以呼吸。你也可以随机改变计算的深度 - 千万分之一到千分之一 - 这样订购过程就不再是先到先得,先服务,并避免用较慢的计算机来惩罚客户。
    • 电子

tiure

赞同来自:

让我们把问题放在首位 - 你有机器人购买你想要真正的人购买的东西,如何真正有机会让机器人购买你不想要真正的人购买的东西。 有机会一些非显示的HTML,刮板机器人会认为是真实的情况,但真正的人不会看到(并且不要忘记真正的人包括盲人,所以考虑屏幕阅读器等),以及这种方式可以购买昂贵的东西(或者不进行实际购买,但是可以获得付款细节以便加入禁令)。 即使机器人切换到“警告用户”而不是“购买”,如果你能得到足够的误报,你也许能够让它对人们来说毫无价值(可能不是每个人,但是一些减少的骗局是总比没有好,不要打扰。

set

赞同来自:

我的第一个想法是你说机器人正在抓你的网页,这表明他们只是在拿起HTML内容。因此,让您的订单屏幕验证(来自http-logs)从机器人加载与商品相关的图形

uut

赞同来自:

解决方案可能是将一些客户端处理附加到登录和购买的操作。处理的数量可以忽略不计,因此个人不会受到影响,但是多次尝试执行任务的机器人将受到额外工作负担的阻碍。 处理可以是一个简单的方程式来解决在javascript中完成,除非你不想在你的网站上需要javascript。

lqui

赞同来自:

嗯,我记得曾读过“Linux防火墙”攻击检测和响应...... 那里的情况似乎非常具有可比性。而且其他人也提出了建议。只是暂时阻止客户端或逐步阻止客户端。如果它来自几个站点,这必须非常有效 问候

xnobis

赞同来自:

不是一个完整的修复,但我还没有看到它。 跟踪“砰”地址,并提出免责声明,说BOC /物品不会被运送到任何不遵守您的服务条款的地址。 这将对某些人产生心理影响,而其他想要利用您网站的人将不得不切换方法,但您将为他们取消一条途径。

walias

赞同来自:

如何使用多个订单按钮(四个或更多)。将它们命名为“image1”到“image4”,三个是视觉上相同的图像(“不要点击这里”)和一个读取“点击这里”。对于每次销售,随机为每个选项分配图像#。使它们相当大,因此用户不会意外地点击错误的。图像的文件大小相同。一旦IP单击按钮,任何按钮,它们将被带到相应的网页(订购过程,或“哎呀,您单击了错误的按钮”),并且在重新访问服务器时给出了2分钟的超时。

yquo

赞同来自:

开发一个不在浏览器中本机运行的首页组件和购物车。如果你使用像Flex / Flash或Silverlight这样的东西,那么刮掉它会更加困难,并且你可以完全控制服务器通信,因此可以完全屏蔽脚本中的内容。

rqui

赞同来自:

作为Woot.com的长期(4年)用户和几袋废话的购买者,在我的车库中占据空间的许多其他项目中,似乎解决方案应该是整个Woot主题的一部分。 使用验证码,但以幽默的方式。就像1,000,000美元的促销活动一样,让自己认识自己是一个人。这在过去推迟了中国银行“卖出”一段合理的时间,而人们像我一样,争相找出输入优惠券代码的相当简单但幽默的谜题。 此外,虽然人们无休止地抱怨服务器错误,但他们并没有停止回来。在我看来,中国银行令人兴奋的部分原因是,有很多其他人试图获得一个。如果服务器抛出错误或者是一个时髦的页面,那么这表明我在一群人中试图获得1500种产品中的一种。 如果你在构建拼图时投入了尽可能多的创造力,并且它足够原创,它会延迟机器人足够长的时间以给其他人一个机会。结合一个随机单词作为代码捕获,在“我想要一个”和购买页面之间放置一个临时页面,这需要一些独特的人工交互,你已经停止了那里的机器人,直到他们弄清楚需要发生什么。 •您没有实现无聊,有时难以阅读验证码 •您使这个过程更有趣, •您减少了实际安全购买服务器的负载 •您将训练用户他们需要“做”某事才能获得BOC •你会在临时页面停止机器人,延迟他们的购买,直到大多数人至少有机会尝试找出有趣但不是非常困难的谜题。
•由于随机是BOC的全部内容,随机且不断变化的谜题/任务将完全符合中国银行的整体规模。 在您进行实验时,临时页面背后的技术可以变得更加先进,可以捕获随机信息以便在购买页面中使用。以来 我已经购买了,没有机器人的帮助,或者除了wootalyzer之外的任何脚本,我觉得这是一个可以接受的援助,自5/31/05以来的7 BOC。最好的一个,我没有得到,是Please Please Me BOC。 B& D电池也很有趣,但我猜测并没有残留机器人,只会让普通用户感到沮丧。 有时候技术问题的最佳解决方案不是更多的技术。

het

赞同来自:

为什么不阻止您认定为机器人的用户的信用卡?

  1. 发布使用机器人在您的网站上是非法的
  2. 找出识别机器人的某些启发式方法(例如,这可以通过短期IP跟踪或在他们感觉到表单的时候完成)
  3. 如果您标记为机器人的人购买了该项目,请阻止其信用卡以备将来使用
  4. 下次他尝试进行购买时,请禁止购买并将商品退回库存
我想即使是专业人士也会最终耗尽信用卡。 一旦botster放弃你,你的服务器负载应该随着时间的推移而减少。另一个想法是在服务器之间分离您的页面 - 例如,一台服务器上的RSS源,另一台服务器上的主页,另一台服务器上的结账。 祝你好运。

pdolor

赞同来自:

我认为你最好的选择是观看IP的进入,但要以两种方式缓解你提到的问题。首先,使用概率散列(例如,Bloom Filter)来标记之前已经看到的IP。这类算法速度非常快,可以很好地扩展到绝对大规模的设置。其次,使用渐变响应,从而为每个请求添加服务器延迟,这取决于您最近看到IP的数量。

xatque

赞同来自:

你需要想办法让机器人购买价格过高的东西:12毫米的机翼:20美元。看看在脚本编写者决定你正在游戏之前抢占了多少机器人。 利用这些利润购买更多服务器并支付带宽。

ha

赞同来自:

将页面的某些部分转换为图像,以便机器人无法理解它们。 例如,创建整数0-9,美元符号和小数点的小图像。当页面加载时,在客户端的计算机上缓存图像...然后使用通过运行服务器端的代码选择的图像显示价格。大多数人类用户不会注意到差异,机器人不会知道任何物品的价格。

xnobis

赞同来自:

我不知道是否已经提出这个建议,而是保留一个机器人的IP列表,而不是你需要在每个页面请求上扫描,为什么不设置cookie或会话var来跟踪机器人?这是PHP中的一个例子:

<?php
// bot check
$now = microtime(true);
// bot counter var
$botCounter = 0;
if (array_key_exists('botCheck_panicCounter', $_REQUEST))
{
  $botCounter = $_REQUEST['botCheck_panicCounter'];
}
// if this seems to be a bot
if ($botCounter > 5)
{
  die('Die()!!');
}
// if this user visited before
if (array_key_exists('botCheck_lastVisit', $_REQUEST))
{
  $lastVisit = $_SESSION['botCheck_lastVisit'];
  $diff = $now - $lastVisit;
// if it's less than a second
  if ($diff < 1)
  {
    // increase the bot counter
    $botCounter += 1;
    // and save it
    $_REQUEST['botCheck_panicCounter'] = $botCounter;
  }
}
// set the var for future use
$_SESSION['botCheck_lastVisit'] = $now;
// ---------------
// rest of the content goes here
?>
我没有检查语法错误,但你明白了。

ha

赞同来自:

我的意见是一个长期的WOOTer 我很乐意订购CAPTCHA,仅为中国银行开启。我想大多数猫头鹰都会同意。另外,99.9%的时间你甚至没有进入订单屏幕,因为它卖得这么快,所以几乎没有人会知道! 如果你让CAPTCHA成为一个非常难的数学问题,我将能够最终向我的妈妈解释这么多年学习数学的实际好处。

hipsum

赞同来自:

如果您愿意强制使用javascript,则可以使用hashcash方案,例如,每个请求需要大约30秒的客户端计算。 (当然,iPhone可能是5分钟,30台计算机的僵尸网络可能是1秒:这是一个很大的缺点。) 您还可以通过使用(混淆)javascript或(gag)flash生成页面来使拼贴更加困难。 你也可以通过隐形(通过CSS和javascript)随机垃圾链接来搜索机器人。 您可以检测“类似bot的”IP地址(按速率和访问蜜罐链接)并将其重定向到特殊服务器(例如,具有额外CC验证的服务器,例如“通过签证验证” - 或者仅使用验证码。 ) 但实际上,这是一场军备竞赛。 :)你最好不得不最终升级到验证码之外。 这让我想到:为什么不从先到先得的模式转变为彩票模式,机器人与真正的购物者相比没有如此大的优势?

ket

赞同来自:

内容太长未翻译

nomnis

赞同来自:

我不明白为什么IP地址过滤会非常昂贵。使用IIS,您可以构建一个ISAPI筛选器,以便在本机代码中执行此操作。我确信apache有类似的接口。使用客户端的IP地址,您可以为不依赖于禁止列表或其他此类废话的HTTP请求编写简单的速率限制器。

jfugit

赞同来自:

您可以尝试让脚本更难以读取价格。这最简单地通过将其转换为图像来实现,但是文本识别算法仍然可以解决这个问题。如果有足够的脚本编写者,你可以尝试将类似验证码的东西应用到这个图像,但显然是以用户体验为代价。而不是图像,价格可以在闪存应用程序中。 或者,您可以尝试设计一种方法,以某种方式“刷新”页面的HTML,而不影响呈现。我无法想到一个很好的例子,但我确信它在某种程度上是可行的。

dmodi

赞同来自:

防止DoS将击败上面概述的@ davebug目标中的第2个,“保持网站的速度不会被机器人减速”,但不必解决#1,“将项目卖给非脚本人类” 我确信一个脚本编写者可以在超出限制的范围内写一些东西,这仍然比人类通过订购表单更快。

homnis

赞同来自:

我的解决方案是通过对“机器人和脚本”进行大约10分钟的延迟来使屏幕抓取毫无价值。 我是这样做的:

  • 记录并识别任何重复击球手。
您不需要在每次点击时记录每个IP地址。每20个匹配中只跟踪一个。重复犯罪者仍会出现在随机的偶然跟踪中。
  • 大约10分钟前保留您网页的缓存。
  • 当一个重复的击球手/机器人击中你的网站时,给他们10分钟的高速缓存页面。
他们不会立即知道他们正在建一个旧网站。他们将能够抓住它,以及一切,但他们不会再赢得任何比赛,因为“真正的人”将有10分钟的领先优势。 优点:
  • 用户(如CAPTCHA)没有麻烦或问题。
  • 在服务器端完全实现。 (不依赖于Javascript / Flash)
  • 提供较旧的缓存页面的性能要低于实时页面。实际上,您可以通过这种方式降低服务器的负载!
缺点
  • 需要跟踪一些IP地址
  • 需要保留并维护较旧页面的缓存。
你怎么看?

eomnis

赞同来自:

如何实现像SO一样的CAPTCHA? 如果您正常使用该网站,您可能永远不会看到一个。如果您碰巧经常重新加载同一页面,过快地发布连续评论,或者触发警报的其他内容,请让他们证明他们是人。在您的情况下,这可能是对同一页面的不断重新加载,快速跟踪页面上的每个链接,或者填写订单形式太快而不能成为人类。 如果他们连续x次检查失败(例如,2或3),则给该IP超时或其他此类措施。然后在超时结束时,再将它们转储回检查。


由于您有未注册的用户访问该站点,因此您只能使用IP。您可以向每个浏览器发出会话,并根据需要跟踪。当然,如果连续创建(重新)创建了太多会话(如果机器人不断删除cookie),则抛出人工检查。 至于捕获太多无辜者,你可以在人工检查页面上提出免责声明:“如果有太多匿名用户从同一地点查看我们的网站,也可能出现此页面。我们建议您注册或登录以避免这个。” (适当调整措辞。) 此外,X人从一个IP同时加载同一页面的几率是多少?如果它们很高,也许你需要一个不同的机器人警报触发机制。
编辑:另一个选择是,如果他们失败了太多次,你对产品的需求充满信心,阻止他们并让他们亲自打电话给你删除阻止。 让人们打电话似乎确实是一种愚蠢的措施,但它确保人类在电脑后面的某个地方。关键是要使块仅适用于几乎不会发生的情况,除非它是机器人(例如连续多次检查失败)。然后它FORCES人类互动 - 拿起电话。 在回应他们给我打电话的评论时,显然这里有权衡。您是否担心确保您的用户在上市时接听几个电话?如果我如此关注产品转向人类用户,那么我必须做出这个决定,也许会牺牲我的一小部分时间。 由于您似乎决定不让机器人占据上风/占据您的网站,我相信手机可能是一个不错的选择。由于我没有从您的产品中获利,我没有兴趣接收这些电话。如果你分享一些利润,我可能会对此感兴趣。由于这是您的产品,您必须决定您的关注程度并相应地实施。
释放块的其他方式不是那么有效:超时(但是他们会在冲洗后再次猛击你的网站),长时间超时(如果真的是人类试图购买你的产品,他们是SOL并因未通过检查而受到惩罚),电子邮件(很容易通过机器人完成),传真(相同)或蜗牛邮件(花费太长时间)。 当然,您可以在每次超时时使每个IP的超时时间增加。只要确保你不会无意中惩罚真正的人类。

inemo

赞同来自:

怎么样:创建一个表单,以便在新商品开始销售时接收电子邮件,并添加一个捕获系统,该系统将为在不到X秒内刷新的任何人提供相同的内容。 通过这种方式,您可以赢得所有的方案:您可以摆脱刮刀(他们可以刮掉他们的电子邮件帐户),并为那些不想在您的网站上购买的东西的人提供机会!我确定我会在我的手机上收到电子邮件并登录以购买我想要的东西。

eet

赞同来自:

老实说,我认为你最好的解决方案是只在登录用户看到Woot-Off期间的项目,并且每500ms左右限制每个登录用户刷新一个主页。 (或者在Woot-Off期间可能只对未经身份验证的用户显示该项目的图片,并确保您不会总是使用相同的图片进行随机废话。)我认为Woot用户愿意接受这一点,如果你卖它作为一种措施,以帮助他们获得他们的碗的奶油,你也可以指出它会帮助他们更快地检查。其他任何东西 - 甚至使用验证码 - 都会受到你典型的军备竞赛的影响。

somnis

赞同来自:

我喜欢BradC's answer(使用Ned Batchelder文章中的建议),但我想为它添加另一个级别。您可以不仅随机化字段名称,还可以随机化字段位置和使其不可见的代码。 现在,最后一点很难,我不知道该怎么做,但有更多JavaScript和CSS经验的人可能能够弄明白。当然,你不能只是一直保持相同的位置,因为脚本编写者只会发现位置(x,y)的元素是真实的。您将不得不使用一些代码来更改表单元素相对于其他元素的位置,以便将它们移出页面,将它们叠加在一起等等。然后使用引入的一些随机性来混淆执行此操作的代码。在新项目可用之前,每天自动更改模糊处理。我们的想法是,如果没有适当的CSS和JavaScript实现(以及作为人类阅读页面布局的代码),机器人将无法确定向用户显示哪些元素。当然,您的服务器端代码知道哪些字段是真实的,哪些字段是假的。 综上所述:

  • 字段名称是随机的
  • 字段顺序是随机的
  • 字段隐藏代码很复杂
  • 字段隐藏代码被混淆 - 随机
  • 随机因素每天都会被服务器端代码
  • 自动更改
由于你给出的限制,我认为没有办法避免某种类型的“军备竞赛”,但这并不意味着所有人都失去了。如果你可以自动化你的军备竞赛的一面而且脚本编写者不能那么你每次都会赢得它。

adolor

赞同来自:

为什么不在每次提供时更改中国银行的名称和图片?看到中国银行的最新版本,它将成为游戏乐趣的一部分。

rsequi

赞同来自:

我说使用API​​公开价格信息。这是一种不直观的解决方案,但它可以帮助您控制情况。为API添加一些限制,使其功能略逊于网站。 您可以按顺序执行相同操作。您可以尝试对API功能/性能进行微小更改,直到获得所需效果。 有代理和僵尸网络可以打败IP检查。有一些非常好的验证码阅读脚本。印度甚至有一些工人团队以很低的价格击败验证码。您可以提出的任何解决方案都可以合理地失败。甚至Ned Batchelder的解决方案也可以通过使用WebBrowser控件或其他模拟浏览器以及僵尸网络或代理列表来解决。

baut

赞同来自:

我们目前正在使用F5的最新一代BigIP负载平衡器来实现这一目标。 BigIP具有先进的流量管理功能,可以根据频率和使用模式识别刮板和机器人,即使是在单个IP背后的一组源中也是如此。然后它可以限制它们,为它们提供替代内容,或者只是用标题或cookie标记它们,以便您可以在应用程序代码中识别它们。

qet

赞同来自:

看看this article by ned Batchelder here。他的文章是关于停止垃圾邮件,但相同的技术可以很容易地适用于您的网站。

Rather than stopping bots by having people identify themselves, we can stop the bots by making it difficult for them to make a successful post, or by having them inadvertently identify themselves as bots. This removes the burden from people, and leaves the comment form free of visible anti-spam measures. This technique is how I prevent spambots on this site. It works. The method described here doesn't look at the content at all.
其他一些想法:
  • 创建一个官方的自动通知机制(RSS feed?Twitter?),人们可以在您的产品上市时订阅。这减少了人们制作脚本的需要。
  • 在新商品上市之前更改您的混淆技术。因此,即使脚本编写者可以升级军备竞赛,他们总是落后一天。

编辑:要完全清楚,Ned上面的文章描述了通过阻止BOT通过表单提交订单来防止自动购买项目的方法。他的技术对于防止机器人屏幕抓取主页以确定何时出售Bandorer of Carrots是没有用的。我不确定防止这是真的有可能。 关于你对Ned战略有效性的评论:是的,他讨论了蜜罐,但我认为这不是他最强的策略。他对SPINNER的讨论是我提到他的文章的原因。对不起,我在原帖中没有说清楚:
The spinner is a hidden field used for a few things: it hashes together a number of values that prevent tampering and replays, and is used to obscure field names. The spinner is an MD5 hash of:
  • The timestamp,
  • The client's IP address,
  • The entry id of the blog entry being commented on, and
  • A secret.
以下是您在WOOT.com上实现的方法: 每次新项目开始销售时,更改用作哈希部分的“秘密”值。这意味着如果有人要设计BOT来自动购买物品,它只会在下一个物品上市之前有效! 即使有人能够快速重建他们的机器人,所有其他实际用户也已经购买了BOC,您的问题就解决了! 他讨论的另一个策略是不时更改蜜罐技术(再次,当新产品上市时更改它):
  • 使用CSS类(当然是随机的)来设置要显示的字段或包含元素:none。
  • 将字段的颜色与页面背景相同(或非常相似)。
  • 使用定位将字段移出页面的可见区域。
  • 使元素太小而无法显示包含的蜜罐字段。
  • 保持字段可见,但使用定位用遮盖元素覆盖它们。
  • 使用Javascript实现任何这些更改,要求机器人拥有完整的Javascript引擎。
  • 将蜜罐显示为与其他字段一样,但告诉人们不要在其中输入任何内容。
我想我的总体想法是在每件新商品上市时更换表格设计。或者至少在新BOC上市时进行更改。 这是什么,几次/月? 如果你接受这个答案,你会在下一个到期时给我一个提醒吗? :)

prerum

赞同来自:

我的方法是专注于非技术解决方案(否则你将进入一场你将失去的军备竞赛,或者至少花费大量的时间和金钱)。我专注于计费/发货部分 - 你可以通过找到多个交付到同一地址或多次收费到单一付款方式找到机器人。您甚至可以在几周内跨项目执行此操作,因此如果用户获得了之前的项目(通过非常快速的响应),这次他可能会被分配某种“障碍”。 这也会产生副作用(我认为这是有益的,但对于你的情况我可能是错误的营销方式)可能会扩大那些幸运的人并购买woot。

ket

赞同来自:

你正在努力做到这一点。我可能会踢自己,因为我今天刚刚从网站上获得了一个机器人网站的BOC,但只是将RANDOM CRAP文本放在网站主页上的验证码中。机器人都在寻找文本“RANDOM CRAP”。所以你基本上只是避免首先触发它们。任何用眼睛看的人都会看到它说“随机废话”。

nea

赞同来自:

我不是网络开发人员,所以拿一点盐,但这是我的建议 - 每个用户都有一个cookie(包含随机数据串),用于确定他们是否看到当前的垃圾销售。 (如果您没有cookie,则不会看到它们。因此,不启用cookie的用户永远不会看到垃圾销售;并且新用户在他们第一次查看页面时将永远不会看到它们,但之后会看到它们。 每次用户刷新网站时,他都会将当前的cookie传递给服务器,服务器使用它来决定是给他一个新的cookie还是保持当前的cookie不变;并在此基础上,决定是否显示有或没有废话销售的页面。 为了简化服务器端的操作,您可以说在任何给定时间,只有一个cookie可以让您看到垃圾销售;还有一些其他标记为“在最后2秒内生成”的cookie,它们将始终保持不变。因此,如果您以更快的速度刷新页面,则无法获得新的页面。 (...啊,好吧,我想这并不能阻止机器人恢复旧的cookie并将其传回给你。不过,也许这里有一个解决方案。)

baut

赞同来自:

免责声明:此答案完全与非编程相关。但是,它确实试图首先攻击脚本的原因。 另一个想法是,如果你真的有限量销售,为什么不从先到先得的方法改变它?当然,除非炒作是您营销计划的一部分。 还有很多其他选择,我相信其他人可以想到一些不同的选择:

  • 订购队列(预订系统) - 某些脚本可能仍然在队列的前面,但是手动输入信息可能会更快。
  • 抽奖系统(每个试图订购一个的人都会进入系统) - 这样,拥有脚本的人与没有脚本的人有相同的机会。
  • 急速优先排队 - 如果确实有很高的感知价值,人们可能愿意支付更多。实施一个排序队列,但允许人们支付更多费用以排在队列中更高的位置。
  • 拍卖(大卫施密特认为这个,评论是我自己的) - 人们仍然可以在最后一刻使用脚本来狙击,但它不仅改变了定价结构,人们期望与之抗争与他人一起出去您还可以做一些事情来限制给定时间段内的出价数量,让人们提前拨打授权码等等。

amodi

赞同来自:

每分钟发出如此多请求的时间段用户代理。例如,如果你有人在10分钟内每隔5秒钟就要求一个页面,那么他们可能不是一个用户...但是要做到这一点可能会很棘手。 如果他们触发警报,请将每个请求重定向到尽可能少的DB-IO的静态页面,并显示一条消息,告知他们将在X分钟内重新启用它们。 重要的是要补充一点,你应该只应用于页面请求,并忽略所有媒体请求(js,图像等)。

nea

赞同来自:

为此,我使用Cloudflare,因为它不会影响我的网站,但会自动阻止任何恶意用户使用CAPTCHA,并为您提供更多功能。

bsequi

赞同来自:

停止所有机器人将非常困难,尤其是在不使用CAPTCHA的情况下。我认为你应该从实施各种措施的角度来解决这个问题,以使脚本编写者的生活更加艰难。 我相信这是一项可以淘汰其中一些措施的措施: 您可以尝试使用每个响应随机化标记的ID和类名。这将迫使机器人依赖重要标签的位置和上下文,这需要更复杂的机器人。此外,如果要在CSS中使用相对或绝对定位,可以随机化标记的位置。 这种方法的最大缺点是你必须采取措施确保你的CSS文件没有缓存在客户端,因为它当然需要包含随机ID&班级名称。解决此问题的一种方法是不使用外部CSS文件,而是将带有随机选择器的CSS放在页面的<head></head>部分中。这将允许随机化的CSS与客户端一起缓存以及页面的其余部分。

eomnis

赞同来自:

构建更好的机器人 市场告诉你一些事情。他们希望得到那个袋子。所以,而不是打击脚本(RIAA v文件共享任何人?)建立一个更好的机器人。 为每个人提供一个安装的应用程序,它与脚本kidee可以放在一起的任何内容一样好或更好。用户安装您的品牌应用程序,每次提供垃圾袋。该应用程序将自动尝试购买它。如果错过了当前的b-o-c,应用程序会有一张“票”,以便为下一次b-o-c促销提供更好的机会。因此,如果用户滚动他们自己的脚本,他们就不会获得下一个b-o-c销售的“票证”,而官方应用程序的用户则可以。 在b-o-c销售之间,应用程序可以显示当前待售商品。地狱,使它成为用户可以告诉woot应用程序寻找“记忆棒” 谁会建立自己的脚本,当官方woot b-o-c +脚本应用程序同样好或不好? 此外,woot还可以通过另一种方式连接到客户。 您的客户正在告诉您他们想要什么。

vsit

赞同来自:

如果我理解正确,你最大的问题是屏幕抓取,而不是自动购买本身。 如果是这样,你最有效的步骤是通过随机编码页面来使屏幕抓取失败,使其看起来相同(种类)但在代码级别总是不同。 (使用十六进制代码,java编码,图片,更改周围的代码结构......) 这将迫使他们不断重写他们的拼写代码,因此他们自动购买你的“垃圾”会更加昂贵。如果他们可以管理。他们可能会继续打你的网站一段时间,直到他们意识到他们无法获得任何东西并放弃它。 令人困惑的机器人的混乱的缺点是,它也会混淆搜索引擎爬虫的地狱。

bnemo

赞同来自:

这里有很多建议,如果已经发布,请原谅我。 我要做的第一件事就是将订购分为两个步骤。第一步是在记录IP地址时传回GUID。第二步将接收GUID并将其与已记录的IP地址进行比较。结合阻止网站垃圾邮件的IP地址(IE:比人类更快点击刷新)这种技术可以阻止垃圾邮件发送者成功购买,从而解决1& 3。 第二项是有问题的,但我会保留常规用户IP地址的运行列表,并限制任何新手的流量。这可能会让第一次访问者和拨号用户(由于IP地址不断变化)在寒冷中出现,但我认为只是通过优先重复业务......以及拨号用户来做好最坏的情况,好吧即使没有任何垃圾邮件发送者,他们是否“赢”也是有疑问的。

eomnis

赞同来自:

让用户在原价和更高的价格之间做出选择。 你必须找到一些方法将按钮与它们各自的价格相关联 - 颜色,位置,或许按钮的“情感内涵” - 难以以编程方式确定,但只需要用户将按钮连接到价格。 对于用户来说简单,直观且轻松,对于脚本编写者来说很困难,而且更重要的是风险 - 特别是如果您改变了关联方法。

nvelit

赞同来自:

在应用程序前面的apache服务器上编写反向代理,实现Tarpit (Wikipedia Article)以惩罚机器人。它将简单地管理在最后几秒内连接的IP地址列表。您从单个IP地址检测到一连串请求,然后在响应之前以指数方式延迟这些请求。 当然,如果他们在NAT网络连接上,多个人可以来自相同的IP地址,但是人们不太可能会想到你的响应时间为2mS到4mS(甚至400mS),而机器人将受到阻碍通过越来越多的延迟很快。

mex

赞同来自:

如果机器人用户使用无效的信用卡或其他东西付款,这只需要成为一个问题。那么非技术解决方案呢? 只要付款方式有效,就可以将机器人用户视为普通用户,并确保您有足够的库存来满足总需求。 结果:更多销售。你在做生意赚钱,对吧?

est_et

赞同来自:

我建议使用基于防火墙的解决方案。 Netfilter / iptables与大多数防火墙一样,允许您设置每单位时间新页面请求的最大数量限制。 例如,要限制分配给人类的页面查看次数 - 例如,每30秒发出6次请求 - 您可以发出以下规则:

iptables -N BADGUY
iptables -t filter -I BADGUY -m recent --set --name badguys
iptables -A INPUT -p tcp --dport http -m state --state NEW -m recent --name http --set
iptables -A INPUT -p tcp --dport http -m state --state NEW -m recent --name http --rcheck --seconds 30 --hitcount 6 -j BADGUY
iptables -A INPUT -p tcp --dport http -m state --state NEW -m recent --name http --rcheck --seconds  3 --hitcount 2 -j DROP
请注意,此限制将独立地适用于每个访问者,因此一个用户滥用该网站不会影响任何其他访问者。 希望这可以帮助!

frerum

赞同来自:

步骤: (结合另一张海报和gif垃圾邮件发送者的想法)
  • 将整个优惠页面显示为图片,广告文案和所有内容。
  • 加密网址中的价格。

攻击:
  1. Bots转到网址以查看结帐页面上的价格
    • 将结帐价格标签转换为图片,或
    • 在用户进入订单页面之前应用验证码。
  2. 咀嚼带宽
    • 使用图片提供特别优惠,使用HTML提供正常优惠。
  3. 鲁莽的机器人订购
    • 一些特殊的“形象”优惠实际上是正常价格。
  4. RSS Scraping
    • 必须通过hashcash或验证码支付RSS Feed。
    • 这必须基于每个请求。
    • 可以预付费,例如用户可以输入20个验证码 200个RSS查找
    • 一旦减轻了DDOS的威胁,你就可以 实施优惠电子邮件通知

inemo

赞同来自:

内容太长未翻译

ut_est

赞同来自:

如何引入需要人工交互的延迟,比如一种“CAPTCHA游戏”。例如,它可能是一个小小的Flash游戏,在30秒内他们必须爆破方格球并避免爆破实心球(避免色盲问题!)。游戏将被赋予随机数种子,并且游戏发送回服务器的将是点击点的坐标和时间戳,以及使用的种子。 在服务器上,您使用该种子模拟游戏机制,以查看点击是否确实会破坏球。如果他们这样做,他们不仅是人类,而且还需要30秒才能验证自己。给他们一个会话ID。 您让该会话ID执行它喜欢的操作,但是如果请求太多,则无法再次播放它们就无法继续。

nerror

赞同来自:

我想唯一要做的就是让努力超过垃圾邮件发送者的利益。所以这是一个“头脑风暴”的想法,我不知道如何实现这一点的所有技术细节。我不得不做一些研究,但根据我目前的知识,值得调查其他建议的方法是否被拒绝。 您已在网站上使用闪存,那么为什么不使用闪存控件来协助或提交表单?控件可以使用密钥对或其他算法对Web服务器进行一些加密通信来散列值吗? 我想整个表格可能都在flash中?我个人会使用Java applet,因为那是我最喜欢的语言。

vvelit

赞同来自:

已经发布了一些其他/更好的解决方案,但为了完整性,我想我会提到这个: 如果您的主要关注点是性能下降,并且您正在寻找真正的锤击,那么您实际上正在处理DoS攻击,您应该尝试相应地处理它。一种常见的方法是在每秒/分钟/等数量的连接之后简单地从防火墙中的IP丢弃数据包。例如,标准Linux防火墙iptables具有标准操作匹配功能'hashlimit',可用于将每个时间单元的连接请求与IP地址相关联。 虽然,这个问题可能更适合上次SO-podcast中提到的下一个SO衍生物,它还没有推出,所以我想可以回答:) 编辑:的结果, 正如novatrust所指出的,仍然有ISP实际上没有为他们的客户分配IP,因此有效地,这样的ISP的脚本客户将禁用来自该ISP的所有客户。

ksit

赞同来自:

如何提出一种方法来识别机器人,可能是基于IP的,但不阻止他们访问网站,只是不允许他们实际购买任何东西。也就是说,如果他们购买,他们实际上并没有得到它,因为机器人违反了使用条款。

gut

赞同来自:

  1. 提供RSS源,但不提供 占用你的带宽。
  2. 购买时, 让每个人随机等待 最长45秒的时间 什么的,取决于什么 你正在寻找。究竟 你的时间限制是什么?
  3. 给每个人1分钟的时间将他们的名字用于绘图,然后随机选择人物。我认为这是最公平的方式。
  4. 监控帐户(在会话中包含一些时间并存储它?)并为帐户添加延迟,使其看起来低于人工速度阈值。这将至少使机器人被编程为减速并与人类竞争。

a_et

赞同来自:

我有一个(可能)没有列出的解决方案(因为我还没有读完所有这些......) 您可以通过浏览器的用户代理字符串跟踪唯一用户。基本上,通过检查哪些信息是“唯一的”,您将能够获得足够的信息来区分不同的人(即使在相同的IP地址上)。 查看由EFF撰写的这篇文章 以及this site(也是EFF)将根据您在浏览器中的User Agent“测试”您的独特内容。 为了获得更好的独特性,您可以对来自唯一性和IP地址的信息进行比较,从而真正将可能性提供给违规者/机器人。


还要结帐此pdf from EFF

et_est

赞同来自:

无论纳粹认为他们的通信有多么安全,盟友往往会打破他们的信息。无论您如何阻止机器人使用您的网站,机器人所有者都会找到解决方法。如果那让你成为纳粹,我很抱歉:-) 我认为需要一种不同的心态

  • 请勿尝试阻止漫游器使用您的网站
  • 不要寻求立即行动的修复,玩长游戏
进入这种心态,无论您的网站的客户是人还是机器人都无关紧要,两者都只是付费客户;但是一个人比另一个人有不公平的优势。一些没有太多社交生活(隐士)的用户可能会像您的网站其他用户一样烦恼。 记录您发布报价的时间以及帐户选择购买报价的时间。
This gives you a record of how quickly the client is buying stuff.
改变您发布优惠的时间。
For example, have a 3 hour window starting at some obscure time of the day (midnight?) Only bots and hermits will constantly refresh a page for 3 hours just to get an order in within seconds. Never vary the base time, only the size of the window.
随着时间的推移,将出现一幅画面。 01:您可以看到哪些帐户在产品上市后的几秒钟内定期购买产品。建议他们可能是机器人。 02:您还可以查看优惠所用的时间窗口,如果窗口是1小时,那么一些早期买家将是人类。但是人类很少会刷新4小时。如果发布/购买之间的经过时间非常一致,无论窗口持续时间如何,那么这就是机器人。如果小窗口的发布/购买时间很短,而大窗户的发布/购买时间更长,那就是隐士! 现在,您没有停止机器人使用您的网站,而是有足够的信息告诉您机器人当然使用了哪些帐户,以及隐士可能会使用哪些帐户。你对这些信息的处理取决于你,但你当然可以使用它来使你的网站更有生命力。 我认为禁止机器人帐户将是毫无意义的,这类似于打电话给希特勒并说“感谢你的U艇的位置!”不知何故,您需要以帐户所有者不会意识到的方式使用这些信息。让我们看看我是否可以梦想...... 处理队列中的订单: 当客户下订单时,他们会立即收到一封确认电子邮件,告知他们订单已放入队列中,并在处理完毕后收到通知。我在亚马逊上通过订单/发送体验这种事情,它根本不会打扰我,我不介意在几天后收到一封电子邮件,告诉我我的订单已经发送,只要我立即收到一封电子邮件告诉我亚马逊知道我想要这本书。在你的情况下,它将是一封电子邮件
  1. 您的订单已下达并已排队。
  2. 您的订单已处理完毕。
  3. 您的订单已发送。
用户认为他们在公平的队列中。每隔1小时处理一次队列,以便普通用户也会遇到队列,以免引起怀疑。只有在他们进入“平均人工订购时间+ x小时”的队列中时才处理来自机器人和隐士帐户的订单。有效减少人体的机器人。

punde

赞同来自:

您可以通过同时更新RSS和HTML来减轻服务器的负载,因此机器人无法筛选您的网站。当然,这给了机器人和购买装备的优势。 如果您只接受通过信用卡付款(可能是这种情况,可能不是,但它显示了我的思路)只允许用户使用相同的帐户和/或信用卡每10次销售一次购买中银。脚本小子很容易获得一大堆IP,他们不太容易将一大堆信用卡放在一起。正如你所说的,知识产权真的很难禁止,而临时禁止信用卡应该是在公园里散步。 你可以让每个人都知道这个限制是什么,或者你可以告诉他们,由于需求量大和/或机器人的兴趣,在购买时实施了限制,而对机制没有特别说明。 在节流期间的每次购买尝试都可能引发指数退避 - 您购买中国银行,您必须在再次尝试之前通过10次销售。无论如何你在下一次销售时再试一次,现在你必须等待20次销售,然后是40次,然后是80次...... 如果人类用户真的不太可能在不到10个销售中获得两次BOC,那么这才真正有用。根据需要调整数字。

est_ut

赞同来自:

我将描述的方法有两个要求。 1)强制执行Javascript 2)具有有效http://msdn.microsoft.com/en-us/library/bb894287.aspx浏览器会话的Web浏览器。 没有其中任何一个你是“设计”运气不好。互联网是按照设计构建的,允许匿名客户查看内容。使用简单的HTML无法解决这个问题。哦,我只是想说简单的,基于图像的CAPTCHA可以很容易地被击败,即使作者也承认这一点。 继续讨论问题和解决方案。问题分为两部分。首先,你不能阻止个人“做坏事”。要解决此问题,您需要设置一个方法,该方法接受浏览器有效会话并生成md5sum + salt + hash(您自己的私有设备)并将其发送回浏览器。然后,浏览器必须在每次发布/获取期间返回该哈希密钥。如果您没有获得有效的浏览器会话,那么您回复“请使用有效的网络浏览器等等等等”。所有流行的浏览器都有有效的浏览器会话ID。 现在我们至少为该浏览器会话拥有一个身份(我知道它不会永久锁定,但通过简单的脚本来“更新”浏览器会话非常困难)我们可以有效地锁定一个会话(即;使它成为非常难以让脚本人员真正访问您的网站而不会对有效用户造成任何惩罚)。 现在,下一部分是它需要javascript的原因。在客户端上,您为来自键盘的每个字符和textarea中的文本值构建一个简单的哈希。该有效密钥作为简单哈希传递给服务器,并且必须进行验证。虽然这种方法可以很容易地进行逆向工程,但它确实使它成为个人在提交数据之前必须经历的额外环节。请注意,这只会阻止自动发布数据,而不是DOS不断访问网站。如果您甚至可以访问ajax,则可以通过线路发送salt和hash密钥,并使用javascript来构建通过线路发送的onkeypress字符“有效令牌”。是的,就像我说它可以很容易地被逆向设计,但你有希望看到我在这里。 现在,以防止通过交通持续滥用。在给定有效会话ID的情况下,有一些方法可以建立模式。这些模式(即使Random用于抵消请求时间)具有比人们试图重现相同误差范围时更低的epsilon。由于你有一个会话ID,并且你有一个“似乎是一个机器人”的模式,那么你可以用一个20字节而不是200000字节的简单轻量级响应阻止该会话。 你看到这里,目标是1)使匿名非匿名(即使它只是每个会话)和2)开发一种方法来识别机器人与正常人通过建立他们使用你的系统的方式模式。你不能说后者是不可能的,因为我以前做过。虽然我的实现是用于跟踪视频游戏机器人,但我似乎认为用于识别机器人与用户的那些算法可以推广到网站访问的形式。如果减少机器人消耗的流量,则可以减少系统负载。请注意,这仍然不能阻止DOS攻击,但它确实减少了机器人在系统上产生的压力。

xest

赞同来自:

前期警告: 我不是文字识字; 我这里没有读过很多其他的评论。 今天早上我从Woot描述中偶然发现了这一点。我认为来自woot网站的温和用户(以及BOC的两次手动购买者)的一些评论可能会有所帮助。 Woot处于一个独特的位置,它既是一个商业网站,也是一个拥有忠实用户的目的地,我理解这种平衡的微妙之处。但就我个人而言,我觉得你对Crap-CAPCHA(“CRAPCHA” - 不知何故我怀疑我是第一个对用户造成这种噱头)的“负面用户影响”的担忧被夸大了。作为用户,我很乐意证明我是人。而且我相信Woot让这个过程变得有趣和有趣,并将其整合到整体体验中。 这会导致“军备竞赛”假定吗?我不知道,但它只会有所帮助。例如,如果要购买的关键信息包含在产品图像中或隐含在产品描述中(每次都以不同的方式),那么脚本可以做的最好的事情就是在检测到C字时打开购买页面。实际上,我觉得这很好:你仍然需要在线,先到先得的服务仍然适用 - Wootalyzer和类似的工具只是提高意识而不是在我睡觉或工作时自动购买。 祝你好运,并保持良好的工作。 JGM

xporro

赞同来自:

问:你如何阻止脚本编写者每秒数百次关闭你的网站?
答:你没有。外部代理无法阻止此行为。 您可以使用大量技术来分析传入的请求,然后尝试确定谁是人而不是人......但它会失败。最终,如果没有立即。 唯一可行的长期解决方案是改变游戏,使网站不是机器人友好的,或者对脚本编写者不那么有吸引力。 你是怎样做的?嗯,这是一个不同的问题! ;-) ... 好的,上面已经给出(并拒绝)了一些选项。我对你的网站并不十分熟悉,只看过一次,但由于人们可以阅读图片中的文字而机器人不能轻易做到这一点,所以将公告更改为图像。不是CAPTCHA,只是一张图片 -

  • 在请求页面时生成图像(当然是缓存)
  • 保持图像源名称相同,这样就不会让游戏消失
  • 大部分时间图片中都包含普通文字,并且对齐后似乎是内嵌HTML网页的一部分
  • 当游戏“开启”时,图像会变为公告文字
  • 公告文本显示必须手动输入以获取奖品的网址和/或代码。如果你愿意,可以使用CAPTCHA代码,但这可能不是必需的。
  • 为了提高安全性,代码可以是专门为请求/ IP /代理生成的一次性令牌,以便重复请求生成不同的代码。或者,如果按需生成过于繁重,您可以预先生成一堆随机代码(一次性填充)。
对真实的人做出响应的时间试验,忽略(“哎呀,发生错误,抱歉!请再试一次”)响应的速度比(比如说)这段时间的一半要快。此事件还应触发开发人员警告至少一个机器人已经找到代码/游戏,因此是时候更改代码/游戏了。 无论如何,即使没有机器人触发它,也要继续定期更改游戏,只是为了浪费脚本编写者的时间。最终脚本编写者应该厌倦游戏并去其他地方...我们希望;-) 最后一个建议是:当您的主页请求进入时,将其放入队列并按顺序在单独的进程中响应请求(您可能必须破解/扩展Web服务器才能执行此操作,但它可能会值得)。如果第一个请求在队列中时来自同一IP /代理的另一个请求进入,则忽略它。这应该会自动减轻机器人的负担。 编辑:除了使用图像之外,另一个选择是使用javascript填写买/不买文;机器人很少解释javascript,所以他们不会看到它

fomnis

赞同来自:

所以问题实际上似乎是:机器人想要他们的“袋子”垃圾,因为它具有低感知价格的高感知价值。你有时提供这个项目和机器人潜伏,等待它是否可用,然后他们购买该项目。 由于看起来机器人所有者正在赚取利润​​(或潜在地赚取利润),所以诀窍是通过鼓励他们购买废话来使这对他们无利可图。 首先,总是提供“袋子'废话”。 其次,确保垃圾通常是垃圾。 第三,经常旋转垃圾。 简单,不是吗? 你需要一个永久的“为什么我们的废话有时会废话?”提供旁边的链接,向人们解释正在发生的事情。 当机器人看到有废话并且废话被自动购买时,收件人会非常不安,因为他们已经为破牙签支付了10美元。然后是一个空的垃圾袋。然后是鞋底的一些污垢。 如果他们在相对较短的时间内购买了足够的废话(并且你在整个地方都有大量免责声明解释你为什么要这样做),那么他们将失去一个公平的“袋子”现金“” bag'o crap“。如果你经常旋转垃圾,即使是人为干预(检查以确保垃圾不是垃圾)也会失败。哎呀,也许机器人会注意到并且不会购买旋转时间太短的任何东西,但这意味着人类将购买非垃圾。 哎呀,你的老顾客可能会觉得很有趣,你可以把它变成一个巨大的营销胜利。开始发布有多少“垃圾”鲤鱼被出售。人们会回来看看机器人被咬的有多难。 更新:我希望你可能会在人们抱怨的情况下预先打几个电话。我认为你不能完全阻止它。但是,如果这会杀死机器人,您可以随时停止它并在以后重新启动它。

uid

赞同来自:

我的解决方案是营销变革和技术变革的结合。 目前,销售部分袋装促销的技术方面作为正常的销售处理。销售开始,人们竞相购买,所有商品都被出售。用于日常销售的相同统计图表被用于废话销售。 涉及几个市场目标:

  • 让客户每天访问该网站一次(购买隐形)。看到一袋垃圾销售的可能性是原因/奖励。
  • 网络/病毒/八卦效果,如果客户看到一袋垃圾销售,他们将通过IM / EMail /电话给他们的朋友。
  • 我还称之为“善意”。 Woot是一个非常酷的地方,因为它偶尔以惊人的销售(包括平板电视的垃圾袋)奖励其客户......并且它以公平的“先到先得”的方式完成。
前两个似乎是最重要的。大量的访问者会影响正常交易的卖出(或卖出)的速度。传统上,新客户通过口耳相传被吸引,并且让客户将他们的朋友发送到woot.com是一种胜利。 所以...我的解决方案是将促销交付更改为更多的彩票。 有时,用户可以做一些有趣的事情,看看他们是否可以获得一袋垃圾。有趣的事情可能是一个愚蠢的Flash游戏,沿着“打猴子”或Orbitz迷你投球,棒球,曲棍球。这里的目标是机器人不能编写脚本的游戏,因此需要相当多的关注。我们的目标也不仅仅是向游戏获胜者颁发奖品,而是向所有游戏玩家奖励。 该游戏的技术核心是在游戏结束时向服务器发出请求,该服务器进行“即时抽奖”以确定用户是否赢得了一袋垃圾销售机会。服务器请求将需要包括由游戏本身计算的内容(粗略地说“哈希现金”......复杂的,CPU周期消耗,计算,并且希望难以重现)。这是为了防止机器人重复进入彩票,只需查询彩票服务器/服务即可。 游戏本身可以随着时间而改变。你可以为万圣节,圣诞节,美食,复活节等做特殊的活动游戏。有很多有趣的营销理念,可以匹配woot的“wootiness”。 如果用户获胜,他们可以购买N袋垃圾(在限时窗口内)......但是他们也可以向N个朋友发送限时邀请购买一袋垃圾(24小时有效)。这提供了超强的网络效果......客户肯定会告诉他们的朋友。或者您也可以将其作为“买1送1”...让客户购买总共N,但强制每秒钟将其运送给朋友。这里的关键是使网络/八卦效应成为一个完整的部分...帮助客户告诉世界woot的精彩。 包括废话销售概念在内的宣传材料也需要进行改造。一袋垃圾售罄的速度与图表不再相关的图表。在这个月,人们有机会购买的频率是多少。有多少人告诉他们的朋友。灵活应该微妙地强调每日游走访问是一个好主意。 你还可以宣传为什么垃圾袋销售正在发生变化。特别是你雇佣了最好的垃圾顾问袋免费提供。

rut

赞同来自:

2件事: 服务器层解决方案:mod_evasive(如果你使用apache) http://www.zdziarski.com/projects/mod_evasive/ 前层解决方案:反向验证码,或其他非侵入式验证码 http://www.ccs.uottawa.ca/webmaster/reverse-captcha.html

fearum

赞同来自:

使用屏幕阅读器的人可以牺牲可用性,在90%的页面上使用未标记的,不可登录的图片按钮。定期旋转图片并使用随机发生器和随机排序来布置两个按钮,说“我想要这个”和“我是一个机器人”。将它们按不同顺序排列。在每个阶段,用户可以向目标进展,但机器人更有可能犯错误(50%*步数)。这就像每个阶段的捕获对用户来说更容易,对于需要在每一步都提示他们的主人的机器人来说更慢。将价格,确认按钮,项目描述放在图片中。它很糟糕但可能更成功。

peum

赞同来自:

如何向每个用户销售RSA密钥:)嘿,如果他们可以为WoW做,你们应该能够做到。 我希望BoC能够得到答案;)

zin

赞同来自:

这里重要的是更改系统以从服务器中删除负载,防止机器人赢得垃圾袋而不让机器人知道您正在游戏他们或他们将修改他们的策略。如果没有一些处理,我认为没有办法做到这一点。 所以你在主页上记录点击量。每当有人点击页面时将连接与其最后一次点击进行比较,如果它太快,则会发送没有该提议的页面版本。这可以通过某种负载平衡机制来完成,该机制将机器人(命中太快)发送到服务器,该服务器只提供主页的缓存版本;真实的人被送到好的服务器。这会减轻主服务器的负担,并使机器人认为它们仍在正确地为页面提供服务。 如果报价可以某种方式下降,那就更好了。然后你仍然可以在虚拟服务器上提供优惠,但当机器人填写表格时说“抱歉,你不够快”:)然后他们肯定会认为他们还在游戏中。

mest

赞同来自:

通过服务器上的iptables(如果是基于Linux)或使用专用的“路由器”,对每个IP地址使用并发连接限制

inisi

赞同来自:

而不是阻止可疑的IP,当它的命中/分钟上升时,减少你给地址的数据量可能是有效的。因此,如果机器人击中你超过秘密随机改变的阈值,它将无法看到数据。登录用户始终会看到数据。经常登录服务器的用户将被迫重新进行身份验证,或者获得验证码。

bea

赞同来自:

首先,让我回顾一下我们在这里需要做的事情。我意识到我只是在解释原来的问题,但重要的是我们100%直接得到这个,因为有很多很好的建议可以让4个中的2个或3个正确,但正如我将证明的那样,你需要一个多方面的方法来涵盖所有要求。 要求1:摆脱'bot slamming': 首页的快速“猛烈抨击”正在损害您网站的性能,并且是问题的核心。 'slamming'既来自单核机器人,也来自 - 据说也来自僵尸网络。我们想摆脱两者。 要求2:不要惹恼用户体验: 我们可以通过实施令人讨厌的验证程序来非常有效地修复机器人情况,例如打电话给人类操作员,解决一堆CAPTCHA或类似问题,但这就像迫使每个无辜的飞机乘客跳过疯狂的安全箍而只是为了渺茫的机会抓住非常愚蠢的恐怖分子。哦等等 - 我们实际上是这样做的。但是,让我们看看我们是否不能在woot.com上这样做。 要求3:避免“军备竞赛”: 正如你所提到的,你不想陷入spambot军备竞赛。因此,您不能使用隐藏或混乱的表单字段,数学问题等简单的调整,因为它们本质上是默默无闻的措施,可以轻易地自动检测和规避。 要求4:阻止“警报”机器人: 这可能是您最难的要求。即使我们能够进行有效的人工验证挑战,机器人仍然可以轮询您的首页,并在有新的优惠时提醒脚本编写者。我们想让这些机器人也不可行。这是第一个要求的更强版本,因为不仅机器人不能发出对性能有害的快速请求 - 他们甚至无法发出足够的重复请求以及时向脚本编写者发送“警报”以获胜报价。


好的,如果我们能满足所有四个要求,那就让我们来吧。首先,正如我所提到的,没有任何措施可以做到这一点。你将不得不结合几个技巧来实现它,你将不得不吞下两个烦恼:
  1. 少数用户需要跳过篮球
  2. 少数用户将无法获得特别优惠
我意识到这些很烦人,但是如果我们可以让“小”数字足够小,我希望你会同意积极因素超过负面因素。 第一项措施:基于用户的限制:
This one is a no-brainer, and I'm sure you do it already. If a user is logged in, and keeps refreshing 600 times a second (or something), you stop responding and tell him to cool it. In fact, you probably throttle his requests significantly sooner than that, but you get the idea. This way, a logged-in bot will get banned/throttled as soon as it starts polling your site. This is the easy part. The unauthenticated bots are our real problem, so on to them:
第二项措施:几乎每个人都建议采用某种形式的IP限制:
No matter what, you will have to do some IP based throttling to thwart the 'bot slamming'. Since it seems important to you to allow unauthenticated (non-logged-in) visitors to get the special offers, you only have IPs to go by initially, and although they're not perfect, they do work against single-IP bots. Botnets are a different beast, but I'll come back to those. For now, we will do some simple throttling to beat rapid-fire single-IP bots. The performance hit is negligable if you run the IP check before all other processing, use a proxy server for the throttling logic, and store the IPs in a memcached lookup-optimized tree structure.
第三项措施:使用缓存响应隐藏油门:
With rapid-fire single-IP bots throttled, we still have to address slow single-IP bots, ie. bots that are specifically tweaked to 'fly under the radar' by spacing requests slightly further apart than the throttling prevents. To instantly render slow single-IP bots useless, simply use the strategy suggested by abelenky: serve 10-minute-old cached pages to all IPs that have been spotted in the last 24 hours (or so). That way, every IP gets one 'chance' per day/hour/week (depending on the period you choose), and there will be no visible annoyance to real users who are just hitting 'reload', except that they don't win the offer. The beauty of this measure is that is also thwarts 'alarm bots', as long as they don't originate from a botnet. (I know you would probably prefer it if real users were allowed to refresh over and over, but there is no way to tell a refresh-spamming human from a request-spamming bot apart without a CAPTCHA or similar)
第四项措施:reCAPTCHA:
You are right that CAPTCHAs hurt the user experience and should be avoided. However, in _one_ situation they can be your best friend: If you've designed a very restrictive system to thwart bots, that - because of its restrictiveness - also catches a number of false positives; then a CAPTCHA served as a last resort will allow those real users who get caught to slip by your throttling (thus avoiding annoying DoS situations). The sweet spot, of course, is when ALL the bots get caught in your net, while extremely few real users get bothered by the CAPTCHA. If you, when serving up the 10-minute-old cached pages, also offer an alternative, optional, CAPTCHA-verified 'front page refresher', then humans who really want to keep refreshing, can still do so without getting the old cached page, but at the cost of having to solve a CAPTCHA for each refresh. That is an annoyance, but an optional one just for the die-hard users, who tend to be more forgiving because they know they're gaming the system to improve their chances, and that improved chances don't come free.
第五招:诱饵废话:
Christopher Mahan had an idea that I rather liked, but I would put a different spin on it. Every time you are preparing a new offer, prepare two other 'offers' as well, that no human would pick, like a 12mm wingnut for $20. When the offer appears on the front page, put all three 'offers' in the same picture, with numbers corresponding to each offer. When the user/bot actually goes on to order the item, they will have to pick (a radio button) which offer they want, and since most bots would merely be guessing, in two out of three cases, the bots would be buying worthless junk. Naturally, this doesn't address 'alarm bots', and there is a (slim) chance that someone could build a bot that was able to pick the correct item. However, the risk of accidentally buying junk should make scripters turn entirely from the fully automated bots.
第六项措施:僵尸网络节流:
[deleted]
好的............我现在已经花了很多时间来考虑这个问题,尝试不同的方法......全球延迟......基于cookie的代币......排队服务...... '陌生人扼杀'......它只是不起作用。它没有。我意识到你没有接受任何答案的主要原因是没有人提出阻止分布式/僵尸网络/僵尸网络攻击的方法......所以我真的想破解它。我相信我在different thread中破解了身份验证的僵尸网络问题,所以我对你的问题寄予厚望。但我的方法并未转化为此。您只能拥有IP,并且在任何基于IP地址的分析中都没有足够大的僵尸网络。 所以你有它:我的第六个措施是徒劳的。没有。压缩。除非僵尸网络很小和/或足够快以至于陷入通常的IP限制,否则我看不到任何针对僵尸网络的有效措施,这些措施不涉及明确的人工验证,例如CAPTHA。对不起,我认为结合上述五项措施是最好的选择。而且你可能只用abelenky的10分钟缓存技巧就可以了。

xet

赞同来自:

我的想法(我没有检查所有其他的,所以我不知道它是否是小说) 处理蜂拥而至:

  1. 将每天的首页内容转换为flash / flex对象。
    • 是的,有些人会抱怨,但我们在这里寻找常见的案例,而非理想。
    • 您还应该随机化Flash对象的名称,因此它们没有任何可预测的名称模式。
  2. 使用Akamai或其他CDN,将此Flash对象提前部署到外部世界。 Akamai会生成看似随机的URL,因此很难预测。
  3. 当需要进行新的销售时,您只需在本地更改您的网址以引用Akamai中的相应对象,人们就会从中获取Flash对象,以发现该交易是否为BoC。
最终 - 您现在可以让Akamai处理您的午夜交通 处理自动购买
  1. 您创建的每个Flash对象都可以隐藏许多内容 - 图像,链接,任意ID,包括千分之一的“废话包”。你也应该能够混淆闪光灯。
  2. 当flash对象“上线”时,人们会开始攻击它。但是有很多误报,简单的字符串扫描是无用的 - 他们必须模拟本地运行闪存。
  3. 但闪光灯不写文字。它绘制线条和形状。不同颜色的形状,都连接到定时器,使它们在不同的时间出现和消失。
    • 如果你看过科尔伯特报告,你就会知道这个介绍有多少词汇描述了科尔伯特。想象一下你的介绍类似的东西,它总是包括Bag O Crap。
    • 现在,想象介绍需要花费任意时间 - 有时几秒钟,有时长达一分钟或更长时间(让它变得有趣)
    • 与此同时,“Bag O Crap”不断出现,但很明显,作为介绍的一部分。
    • 最后,显示当天的实际交易,具有活跃的“微光”效果,使得画布的任何单个快照难以显示实际的产品名称。这是浮动在动画背景之上,仍然说'袋子o垃圾'并且一直在运动
    • 再一次,所有这些都是用线条和形状处理的,而不是用文本字符串处理
最终结果 - 您的黑客被迫拍摄大量的交易图像快照,找出如何分离所有误报并确定实际交易。同时,人类只是看着它,在眼睛疲劳和我们填补文本空白的能力之间,我们可以按原样阅读。 这不会永远有效,但它会工作一段时间。 另一个想法是简单地限制人们购买BoCs,除非他们之前用该帐户购买过东西,并且绝不让他们再次购买BoC。

nqui

赞同来自:

两种解决方案,一种是高科技,一种是低科技。 首先是高科技:BOC产品在几秒钟内售罄,因为机器人在最初的几毫秒内获得了很多。因此,不要试图击败机器人,而是将他们正在扫描的东西卖给他们:一袋垃圾。当然是无用的废话:Rosie O'Donnell弯曲的纸夹和玷污的照片。然后在服务器上内置随机延迟几秒钟。随着销售的继续,销售产品的实际价值将增加,而销售价格则不会。这样,第一批购买者(前几毫秒的机器人)将获得比他们支付的价格低得多的东西(棕色洋葱蛋糕?),下一个购买者(慢速机器人或更快的人类)会获得不值得注意的东西,但值得购买价格(在寄售中购买?),最后的购买者(几乎所有人类)将获得价值超过购买价格的东西(打破香槟?)。那台平板电视可能是最后购买的BOC。 任何等待时间过长的人都会错过,但与此同时,任何购买太快的人都会受到冲击。诀窍是等待一段时间......但不要太多。有一些运气,这是应该的。 低技术解决方案是将BOC的名称改为人类可以解释的东西,但机器人不能。排泄物的Wineskin?麻袋含有气味?与各种商品相邻的拓扑平面?切勿使用相同的名称两次,使用略有不同的图片,并在产品说明中说明实际销售的内容。

hquia

赞同来自:

目标的可能解决方案,不一定是问题标题: 而不是向每个人提供特殊交易,一次将其提供给随机的IP地址集。例如,将IP空间划分为256个唯一块,并且在时间= 0时,仅允许第一个块中具有ip地址的人,并且在时间= 5秒时,允许来自第一个块和第二个块的人...直到最后一个时间段到来,并允许每个人看到交易。随机化它的一个想法是根据交易采取其IP的md5 / sha的最低有效位加上一些盐。 这将允许脚本编写者仍然具有优势,因为它们具有接近零的响应时间,并且具有多个IP地址的强度,但这意味着给定的机器人不会比另一个客户具有任何优势。因为他们的IP地址,他们比他们“幸运”。 将此与其他一些想法相结合似乎是一个好主意。

ksequi

赞同来自:

  1. Sell the item to non-scripting humans.
  2. Keep the site running at a speed not slowed by bots.
  3. Don't hassle the 'normal' users with any tasks to complete to prove they're human.
你可能不想听到这个,但#1和#3是相互排斥的。 On the Internet, nobody knows you're a dog 好吧,没有人知道你也是一个机器人。没有编程方式来判断连接的另一端是否有人,而不需要该人做某事。防止脚本/机器人在网上做东西是CAPTCHAs发明的全部原因。这并不是说这是一个没有花费大量精力的新问题。如果有一个更好的方法,一个不涉及CAPTCHA真正用户的麻烦,每个人都会使用它。 我认为你需要面对这样一个事实:如果你想让机器人关闭你的订购页面,一个好的CAPTCHA是唯一的方法。如果对你的随机垃圾的需求足够高,人们愿意花这些时间来获得它,合法用户不会被CAPTCHA推迟。

ut_est

赞同来自:

我认为沙盒某些IP值得研究。一旦IP超过阈值,当它们到达您的站点时,将它们重定向到具有多秒延迟的Web服务器,然后再提供文件。我编写的Linux服务器可以处理几乎没有任何CPU的开放50K连接,因此减慢大量机器人的速度并不难。所有服务器都需要做的是保持连接打开N秒,然后作为常规站点的代理。这仍然可以让普通用户使用该网站,即使他们非常积极,只是稍微降低了体验。 您可以使用描述here的memcached来便宜地跟踪每个IP的命中数。

bsit

赞同来自:

你怎么知道有脚本编写订单? 您的问题的关键在于您无法将脚本编写者与合法用户分开,因此无法阻止它们,那么您如何知道脚本编写者呢? 如果您有办法回答这个问题,那么您可以使用一组特征来过滤脚本编写器。

funde

赞同来自:

为了解决机器人猛击头版的第一个问题,尝试将蜜罐与真正的垃圾袋完全相同。使首页的html标记包含相同的标记,就好像它是一袋垃圾一样,但是让它隐藏起来。这会强制机器人包含CSS引擎,以确定是否显示或隐藏了一揽子代码。或者,你只能在真正的垃圾袋上升之前随机输出这个'假'袋的垃圾html随机时间(小时?)。这会导致机器人过早发出警报(但不知道多久)。 要涵盖实际购买垃圾袋的第二步,添加简单的问题。我更喜欢上面提到的数学问题的常识问题。像“冰热还是冷?”之类的东西。 “蚂蚁是大还是小”?当然,这些需要随机化并从永无止境的问题中提取,否则机器人可以编程来回答它们。然而,这些问题仍然比CAPTCHA更令人烦恼。

xid

赞同来自:

你知道,如果你使用pubsubhubbub发布你的RSS源,人们就不必一遍又一遍地看到你的网页以查看Woot-off中的下一个内容,他们只是等待它出现在他们的Google上读者。

yvitae

赞同来自:

一个相当简单的解决方案是跟踪渲染表单和获得响应之间的时间差:机器人通常具有极短的毫秒响应时间,用户无法做到这一点;或几个小时的极长响应时间。 有一个django代码片段,以及更详细的描述: Alternative to Captchas (Without Human Interaction)

uet

赞同来自:

为了保证只向非脚本人销售商品,您是否可以检测首页上显示的商品与正在发出的订单之间的非人快速反应?这会使延迟战术变为现实,而不是通过0.5秒的延迟人为地阻止每个人,尽可能快地允许请求并打击显然超人的机器人:) 用户点击和做出决定的速度有一些物理上的限制,并且通过在所有请求完成后检测(而不是故意减慢所有交互),您不会影响非脚本人的性能。 如果只使用CAPTCHA的某些时间是可以接受的,你可以增加快速人类的延迟时间(而不是超人),并且如果有人点击非常快,则需要确认后验证。类似于某些网站如果有人快速发布多个帖子,需要如何确认CAPTCHA。 可悲的是,我不知道有什么好方法可以阻止你的产品清单的屏幕刮刀:(

et_et

赞同来自:

限制您发布优惠的时间: 例如:从一小时开始仅过去7分钟到8分钟。不要偏离这一点,并对发布时间前半小时检查很多IP的几秒钟的罚款进行处罚。然后,对于机器人所有者而言,每小时只扫描几分钟而不是全部。的。时间。此外,因为正常人每小时可以检查一次网站而不是每秒检查一次,所以你可以让普通人更加平稳地使用机器人。 饼干: 使用仅由唯一ID(数据库表的键)组成的跟踪cookie。向没有cookie的客户提供“释放延迟”,无效的cookie,使用来自新IP的相同cookie的客户端,或者使用高频率的cookie。 识别可能的机器人: Cookie会导致僵尸程序为其控制的每个IP请求多个cookie,这是可以跟踪的行为。仅包含一个已发布cookie的IP很可能是普通客户端。具有许多已发布cookie的IP可以是大型NAT网络,也可以是机器人。我不确定你如何区分这些,但公司可能更有可能拥有DNS服务器,网页和这种性质的东西。

tut

赞同来自:

延迟页面如何用户必须等待图像中显示的延迟? 如果他们在图像中指定的足够短的时间内点击,您只能从他们到达的页面进行排序,也许图像可能在动画gif或非常小的javascript或flash计时器中进行倒计时。 如果他们在时间限制之外跳转到详细信息页面,他们会看到之前答案中讨论的昂贵项目。

kaut

赞同来自:

使用JavaScript将信息动态写入页面。没有JS渲染引擎,肯定是屏幕刮板和放大器。机器人将无法读取信息。

noptio

赞同来自:

我在这里与OP达成一致 - 没有验证码的请求 - 这不是一个非常糟糕的做事方式。 首先设置几个bot陷阱。我会更频繁地在主页上提到BOC,因为机器人不聪明,因此机器人陷入困境,所以每次都会有不同的措辞,例如“中银抱怨了!” - 所以机器人只是扫描关键字将被困。 但是,我认为这里的真正问题是双重的,首先是您需要解决的性能问题,今天是机器人导致问题,但它向我表明存在性能问题需要解决。 其次,这是一个商业机会,可以转移一些真正的垃圾获利。所以我会保持整体的woot风格,并说“我们检查机器人。如果我们认为你是机器人,你将得到一盒botcrap。” 机器人检查将在销售完成后的某个时间离线完成,使用机器人陷阱,IP编号,cookie,会话,浏览器字符串等。对您购买者的数据进行一些严肃的分析,以确定谁获得了botcrap。如果您决定运送botcrap - 那么您可以释放一些正常的垃圾卖给别人。