阻止脚本攻击你的网站

我已经接受了一个答案,但遗憾的是,我相信我们被困在了最初最坏的情况:验证码每个人对购买尝试的垃圾。简单的解释:缓存/网络农场使得跟踪点击是不可能的,任何解决方案(发送一个非缓存的网络信标,写入一个统一的表等)都会比机器人更慢地减慢网站的速度。思科(Cisco)或类似公司的一些昂贵硬件可能会在较高的水平上提供帮助,但如果每个人都要验证码,就很难证明成本是合理的。稍后我将尝试更全面的解释,并为将来的搜索者清理(尽管欢迎其他人尝试,因为这是社区wiki)。

情况

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

可用性是我工作的重要组成部分,而让网站变得令人兴奋和有趣则是剩下的大部分工作。这就是下面三个目标的来源。验证码损害了可用性,机器人从我们的垃圾销售中偷走了乐趣和兴奋。

机器人一秒钟就会在我们的首页上猛击数十次屏幕抓取(和/或扫描我们的RSS),以寻找随机垃圾销售。他们一看到这个,就会触发程序的第二阶段登录,点击“我要一个”,填好表格,然后买下这些垃圾。

评价

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

在Woot上,匿名(未登录)用户可以查看我们的主页。换句话说,撞击机器人可以不经过身份验证(除了IP地址之外基本上无法跟踪)。

所以我们又回到了扫描IP, a)在这个云网络和垃圾邮件僵尸的时代是相当无用的,b)考虑到来自一个IP地址的业务数量,捕获了太多无辜的人(更不用说非静态IP isp的问题和试图跟踪它的潜在性能影响)。

还有,让别人给我们打电话是最糟糕的情况。我们能让他们给你打电话吗?

BradC: Ned Batchelder的方法看起来很酷,但他们非常坚定地设计来击败为网站网络构建的机器人。我们的问题是机器人是专门用来破坏我们网站的。其中一些方法可能只在很短的时间内有效,直到脚本编写人员将他们的机器人进化为忽略蜜罐,从屏幕上抓取附近的标签名称而不是表单id,并使用支持javascript的浏览器控件。

 

lc再次:“除非,当然,炒作是你营销计划的一部分。”是的,绝对是。当物品出现时的惊喜,以及当你设法得到一件物品时的兴奋,可能比你实际得到的垃圾一样重要,甚至更重要。任何消除先到/先得的东西都不利于“赢”的快感。

 

novatrust:就我个人而言,欢迎我们新的机器人霸主。我们实际上提供RSSfeeds,允许第三方应用程序扫描我们的网站的产品信息,但不是在主站HTML之前。如果我的理解正确的话,你的解决方案通过完全牺牲目标1来帮助目标2(性能问题),并放弃机器人将购买大部分垃圾的事实。我给你的回答投了赞成票,因为你最后一段的悲观情绪对我来说是准确的。这里似乎没有什么灵丹妙药。

其余的响应通常依赖于IP跟踪,这似乎是无用的(僵尸网络/僵尸/云网络)和有害的(捕获许多来自相同IP目的地的无辜的人)。

还有其他方法/想法吗?我的开发人员一直在说“让我们只做captcha”。但我希望对所有想要我们的垃圾的人来说,有更少侵入性的方法。

最初的问题

假设你卖的东西很便宜,但有很高的感知价值,而你的数量非常有限。没有人确切地知道你什么时候会卖这个东西。超过一百万人经常来看你卖什么。

你最终会发现脚本和机器人试图通过编程方式[a]找出你何时出售该道具,[b]确保他们是第一批购买该道具的人。这很糟糕,有两个原因:

  1. 你的网站被非人类攻击,拖慢了所有人的速度。
  2. 编剧最终“赢得”了产品,让常客感到被骗了。

一个看似显而易见的解决方案是为用户在下单前设置一些障碍,但这至少有三个问题:

  • 用户体验对人类来说很糟糕,因为他们必须破译验证码,挑选猫,或者解决数学问题。
  • 如果感知到的利益足够高,人群足够大,一些群体就会找到绕过任何调整的方法,从而导致军备竞赛。(游戏邦注:调整越简单,情况就越明显;隐藏的“评论”表单,重新排列表单元素,错误地标记它们,隐藏的“gotcha”文本都将一次性工作,然后需要进行更改,以对抗针对这个特定的表单。)
  • 即使脚本人员不能“解决”你的调整,也不能阻止他们点击你的首页,然后提醒脚本人员手动填写订单。考虑到他们从解决[a]中获得了优势,他们可能仍然会赢得[b],因为他们将是第一个到达订单页面的人类。此外,1。这种情况仍然会发生,导致服务器错误并降低每个人的性能。

另一种解决方案是经常监视ip攻击,阻止它们进入防火墙,或以其他方式阻止它们排序。这个可以解2。和阻止[b],但扫描ip对性能的影响是巨大的,可能会导致更多像1这样的问题。比编剧自己造成的还要严重。此外,云网络和垃圾邮件僵尸的可能性使得IP检查相当无用。

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

目标

  1. 将道具卖给非脚本人。
  2. 保持网站运行的速度不被机器人减慢。
  3. 不要让“正常”用户完成任何任务来证明他们是人类。
90648 次浏览

您可以尝试让脚本更难阅读价格。最简单的方法是将其转换为图像,但文本识别算法仍然可以解决这个问题。如果有足够多的脚本编写人员能够解决这个问题,您可以尝试对该图像应用类似验证码的东西,但显然是以牺牲用户体验为代价的。而不是图像,价格可以在一个flash应用程序。

或者,您可以尝试设计一种方法,以某种不影响呈现的方式在页面中“洗牌”HTML。我一时想不出一个好的例子,但我确信它在某种程度上是可行的。

如何像SO那样实现captcha呢?

如果你正常使用这个网站,你可能永远不会看到它。如果你经常重载同一个页面,过快地连续发布评论,或者其他触发警报的事情,让他们证明他们是人。在您的情况下,这可能是不断地重新加载同一页面,快速地跟踪页面上的每个链接,或者快速地填写订单。

如果他们连续x次检查失败(比如2次或3次),给该IP一个超时或其他类似的措施。然后在超时结束时,再次将它们转储回检查。


因为你有未注册的用户访问网站,所以你只有ip地址可以继续。如果愿意,您可以向每个浏览器发出会话并以这种方式跟踪。当然,如果连续(重新)创建了太多会话,还要进行人工检查(以防机器人不断删除cookie)。

至于发现太多无辜的人,你可以在人工检查页面上发布免责声明:“如果有太多匿名用户从同一位置查看我们的网站,也可能出现此页面。我们鼓励你注册或登录以避免这种情况。”(适当调整措辞。)

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


编辑:另一种选择是,如果他们失败了太多次,而你对产品的需求有信心,阻止他们,让他们亲自打电话给你来消除阻碍。

让人们打电话似乎是一个愚蠢的措施,但它确保电脑后面有人。关键是要让块只在一个几乎不应该发生的情况下出现,除非它是一个机器人(例如,连续多次检查失败)。然后它强迫人类互动——拿起电话。

对于让他们打电话给我的评论,这里显然有一个权衡。你是否担心你的用户会在打折时接几个电话?如果我如此关心产品是否能被人类用户使用,我就必须做出这个决定,可能会在这个过程中牺牲(一小部分)我的时间。

既然你似乎决心不让机器人占据上风/抨击你的网站,我相信手机可能是一个不错的选择。因为我没有从你们的产品中获利,所以我没有兴趣接这些电话。然而,如果你分享一些利润,我可能会感兴趣。因为这是你的产品,你必须决定你有多关心和相应的实现。


其他释放阻塞的方式都不那么有效:超时(但他们会再次关闭你的网站,冲洗-重复),长时间超时(如果真的有人试图购买你的产品,他们会被SOL并因检查失败而受到惩罚),电子邮件(很容易由机器人完成),传真(相同),或蜗牛邮件(花费太长时间)。

当然,您也可以在每个IP每次超时时增加超时时间。只要确保你不是在不经意间惩罚真正的人类。

我说使用API公开价格信息。这是一个不太直观的解决方案,但它确实能让你控制局面。为API添加一些限制,使其功能略低于网站。

您可以对订购进行同样的操作。您可以尝试对API功能/性能进行小的更改,直到获得所需的效果。

有代理和僵尸网络来挫败IP检查。有一些验证码读取脚本非常好。在印度,甚至有一些团队的工作人员可以花很少的钱来破解验证码。任何你能想到的解决方案都有可能被击败。即使是Ned Batchelder的解决方案也可以通过使用WebBrowser控件或其他与僵尸网络或代理列表相结合的模拟浏览器来超越。

看看这是ned Batchelder的文章。他的文章是关于阻止垃圾邮件机器人的,但是同样的技术可以很容易地应用到您的站点。

而不是阻止机器人 人们可以识别自己,我们可以 通过增加难度来阻止机器人 为了让他们的帖子成功,或者 通过让他们无意中识别 他们自己就是机器人。这将删除 负担从人而来,而离去 评论形式免费可见的反垃圾邮件 措施。< / p > 这个技巧就是我如何预防的 这个网站上的垃圾邮件。它的工作原理。的 这里描述的方法不查看

其他一些想法:

  • 创建官方自动通知机制(RSS提要?Twitter?)当你的产品上市时,人们可以订阅它。这减少了人们制作脚本的需要
  • 改变你的混淆技巧之前一个新项目开始出售。因此,即使编剧可以升级军备竞赛,他们也总是落后一天。

编辑:为了完全清楚,Ned在上面的文章中描述了通过防止BOT通过表单提交订单来防止自动购买物品的方法。他的技术并不能阻止机器人通过抓取主页来判断什么时候有Bandoleer of carrot出售。我不确定防止这种情况是否真的可能。

关于你对内德策略有效性的评论:是的,他讨论了蜜罐,但我不认为那是他最强的策略。他对微调控制项的讨论是我提到他的文章的最初原因。对不起,我在最初的帖子中没有说清楚:

spinner是一个隐藏字段,用于 一些东西:它将A哈希在一起 防止的值的数目 篡改和重播,并已习惯 模糊的字段名。旋转器是 MD5哈希值:

  • 时间戳,
  • 客户端的IP地址,
  • 被评论的博客条目的条目id,以及
  • 一个秘密。

以下是你如何在WOOT.com上实现它:

改变“秘密”;每当有新商品出售时,该值都被用作散列的一部分。这意味着如果有人要设计一个BOT来自动购买物品,它只会在下一件商品打折前有效!!

即使有人能够快速重建他们的机器人,所有其他实际用户都已经购买了BOC,你的问题就解决了!

他讨论的另一个策略是不时地改变蜜罐技术(同样,当新商品上市时改变它):

  • 使用CSS类(当然是随机的)来设置字段或包含元素来显示:none。
  • 字段的颜色与页面背景相同(或非常相似)。
  • 使用定位将字段移出页面的可见区域。
  • 使一个元素太小,无法显示包含的蜜罐字段。
  • 保持字段可见,但使用定位用模糊元素覆盖它们。
  • 使用Javascript来实现这些更改,要求机器人拥有完整的Javascript引擎。
  • 让蜜罐像其他字段一样显示,但告诉人们不要输入任何东西。

我想我的总体想法是在每个新产品上市时改变形式设计。或者至少,当一款新的中行上市时,它会有所改变。

一个月几次吗?

免责声明:这个答案完全与编程无关。但是,它确实试图从一开始就攻击使用脚本的原因。

另一个想法是,如果你的销售数量确实有限,为什么不改变先到先得的方法呢?当然,除非炒作是你营销计划的一部分。

还有很多其他的选择,我相信其他人也能想到一些不同的选择:

  • 一个排序队列(预定系统)——有些脚本可能仍然排在队列的前面,但是手动输入信息可能更快。

  • 抽奖系统(每个尝试订购的人都将进入系统)——这样,拥有脚本的人与没有脚本的人拥有相同的机会。

  • 抢手优先队列——如果真的有很高的感知价值,人们可能愿意支付更多。实现一个排序队列,但允许人们支付更多的钱以排在队列的更高位置。

  • 拍卖(这是David Schmitt的功劳,评论是我自己的)——人们仍然可以在最后一刻使用脚本来狙击,但它不仅改变了定价结构,人们还希望与他人竞争。你还可以限制特定时间段内的出价数量,让人们提前打电话索取授权码等等。

对每分钟发出如此多请求的用户代理进行计时。例如,如果有人在10分钟内每5秒请求一个页面,他们可能不是用户。但要做到这一点可能很棘手。

如果他们触发警报,将每个请求重定向到一个静态页面,尽可能少地使用DB-IO,并发送消息让他们知道他们将在X分钟内被允许返回。

重要的是,你应该只在页面请求上应用这个,忽略所有的媒体请求(js,图像等)。

引入一种需要人类互动的延迟,就像一种“验证码游戏”。例如,这可能是一款Flash小游戏,玩家必须在30秒内爆开格子球,并避免爆开实心球(避免色盲问题!)游戏将获得一个随机数种子,游戏将向服务器传输点击点的坐标和时间戳,以及使用的种子。

在服务器上,你可以使用种子来模拟游戏机制,看看点击是否真的会击破球。如果他们这样做了,他们不仅是人类,而且还会花30秒来验证自己。给他们一个会话id。

你让会话id做它喜欢做的事情,但是如果发出太多请求,它们就不能继续,除非再次播放。

已经发布了一些其他/更好的解决方案,但为了完整起见,我想我会提到这个:

如果你主要关心的是性能下降,并且你看到的是真正的锤击,那么你实际上是在处理DoS攻击,你可能应该尝试相应地处理它。一种常见的方法是,在每秒/分钟等多次连接之后,将来自某个IP的数据包丢弃在防火墙中。例如,标准的Linux防火墙iptables有一个标准的操作匹配函数'hashlimit',它可以用来将每个时间单位的连接请求与ip地址关联起来。

虽然,这个问题可能更适合于上一个so播客中提到的下一个so衍生产品,它还没有推出,所以我想可以回答:)

< p > 编辑: < br > 正如novatrust所指出的,仍然有ISP实际上没有分配ip给他们的客户,因此有效地,这样一个ISP的脚本客户将禁用该ISP的所有客户
    提供一个RSS提要,这样他们就不会 Eat up your bandwidth. <李>购买时, 让每个人都等一个随机 时间最长可达45秒 或者别的什么,取决于什么 你要找的正是。完全 你的时间限制是什么?李< / >
  1. 给每个人一分钟的时间把他们的名字写在画上,然后随机选择人。我认为这是最公平的办法。
  2. 监视帐户(包括会话中的一些时间并存储它?),并向似乎低于人类速度阈值的帐户添加延迟。这至少会让机器人的速度放慢,与人类竞争。

我没有看到你声称检查传入ip有多大负担。相反,我曾经为我的一个客户做过一个项目,该项目每五分钟分析一次HTTP访问日志(本可以是实时的,但出于某些我从未完全理解的原因,他不想这样做),并创建防火墙规则来阻止来自任何产生过多请求的IP地址的连接,除非该地址可以被确认属于合法的搜索引擎(谷歌,yahoo等)。

此客户端运行一个web托管服务,并在三台服务器上运行此应用程序,这三台服务器总共处理800-900个域。峰值活动在每秒1000次的范围内,从来没有性能问题-防火墙在从黑名单地址丢弃数据包时非常有效。

是的,DDOS技术确实存在,可以击败这个计划,但他没有看到这种情况在现实世界中发生。相反,他说这大大降低了他服务器的负载。

防止DoS会挫败@davebug上面所概述的第二个目标,“保持网站的速度不被机器人减慢”,但不一定能解决第一个目标,“把项目卖给非脚本编制的人”。

我敢肯定,脚本编写人员可以编写一些东西来在过度的限制下滑行,这仍然比人类完成排序表单的速度要快。

Q:你如何阻止脚本写手在一秒钟内攻击你的网站数百次?< br > A:你不需要。外部代理无法防止此行为

你可以使用大量的技术来分析传入的请求,并尝试启发式地确定谁是人,谁不是人……但它会失败。最终,即使不是马上。

唯一可行的长期解决方案是改变游戏规则,这样站点就不是机器人友好的,或者对脚本编写人员不那么有吸引力。

你是怎么做到的?那是另一个问题了!: -)

...

好吧,上面已经给出了一些选项(并拒绝了)。我对你的网站不是很熟悉,只看过一次,但由于人们可以阅读图像中的文本,而机器人无法轻松做到这一点,所以将公告更改为图像。不是验证码,只是一个图像-

  • 在请求页面时生成图像(当然是缓存的)
  • 保持图像源名称相同,这样就不会泄露秘密
  • 大多数情况下,图像将包含普通文本,并将其对齐以显示为内联HTML页面的一部分
  • 当游戏“开启”时,图像将变成公告文本
  • 公告文本显示了一个url和/或代码必须手动输入来获得奖品。验证码,如果你喜欢,但这可能是不必要的。
  • 为了增加安全性,代码可以是专门为请求/IP/代理生成的一次性令牌,这样重复的请求就会生成不同的代码。或者,如果按需生成太麻烦,您可以预先生成一堆随机代码(一次性填充)。

运行真实的人对这个问题的响应的时间试验,并忽略('哎呀,发生错误,对不起!请再试一次’)的反应比一半的时间要快。此事件还应该触发警报,提醒开发者至少有一个机器人已经弄清楚了代码/游戏,所以是时候修改代码/游戏了。

继续定期地改变游戏,即使没有机器人触发它,这只是在浪费编剧的时间。最终,编剧会厌倦这款游戏,去别的地方……我们希望;-)

最后一个建议:当你的主页请求进入时,把它放到队列中,并在一个单独的进程中按顺序响应请求(你可能不得不入侵/扩展web服务器来做到这一点,但这可能是值得的)。如果来自同一IP/代理的另一个请求进入,而第一个请求在队列中,忽略它。这将自动减轻机器人的负载。

编辑:另一种选择,除了使用图像,是使用javascript来填写购买/不购买的文本;机器人很少解释javascript,所以他们不会看到它

与其阻止可疑的ip,不如随着点击率/分钟的上升而减少你提供给一个地址的数据量。因此,如果机器人击中你超过一个秘密随机变化的阈值,它将不会看到数据。登录的用户总是能看到这些数据。经常访问服务器的登录用户将被迫重新验证身份,或者被给予验证码。

我不知道这是否可行:……主动出击。

搞清楚机器人在扫描什么数据。给他们提供他们正在寻找的数据,当你不卖垃圾时。以一种不会打扰或迷惑人类用户的方式进行此操作。当机器人触发第二阶段时,他们将登录并填写表格,购买100美元的roomba,而不是BOC。当然,这是假设机器人不是特别健壮。

另一个想法是在促销期间随机降价。当你明确声明它只值20美元时,谁会花150美元买一袋垃圾?没有人,只有狂热的机器人。但9分钟后就变成了35美元…17分钟后是9美元。之类的。

当然,僵尸国王能够做出反应。关键是要让他们的错误变得非常昂贵(并让他们付钱给你来与他们战斗)。

所有这些都假设你想要惹恼一些机器人领主,这可能不是100%可取的。

好吧,所以垃圾邮件发送者在和普通人竞争赢得“垃圾沼泽”拍卖?为什么不让下一次拍卖变成一堆垃圾呢?垃圾邮件发送者可以花大钱买一袋狗屎,我们都嘲笑他们。

这个问题的解决方案可能是在登录和购买操作中附加一些客户端处理。处理量可以忽略不计,因此个人不会受到影响,但多次尝试执行任务的机器人将受到额外工作负载的阻碍。

处理过程可以是一个用javascript解决的简单方程,除非你不想在你的网站上需要javascript。

嗯,我记得读过“Linux防火墙”攻击检测和响应… 那里的情况似乎非常相似。有人也这么说过。只是暂时阻止客户或逐步限制他们。如果它是真yl从几个网站,这必须是相当有效的

问候

你需要想办法让机器人购买价格过高的东西:12毫米的坚果:20美元。看看有多少机器人在编剧认为你在耍他们之前抢了过来。

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

Woot用来解决这个问题的方法正在改变游戏。当他们展示一种非常受欢迎的商品出售时,他们会让用户玩电子游戏来订购它。

这不仅成功地打击了机器人(他们可以很容易地对游戏进行一些小的改变以避免自动玩家,甚至为每次销售提供一个新游戏),而且还给用户留下了“获胜”的印象。想要的项目,同时减缓订购过程。

它仍然很快就卖光了,但我认为解决方案是好的——重新评估问题和改变参数导致了一个成功的战略,而严格的技术解决方案根本不存在。


你的整个商业模式都是基于“先到先得”。你不能像广播电台那样(他们不再把第一个打电话的人视为赢家,而是把第5个、第20个或第13个打电话的人视为赢家)——这与你的主要特点不匹配。

不,如果不改变实际用户的订购体验,就无法做到这一点。

假设你实施了所有这些策略。如果我认为这很重要,我就会找100个人和我一起工作,我们会在100台不同的电脑上构建软件,每秒访问你的网站20次(每个用户/cookie/帐户/IP地址访问间隔5秒)。

你有两个阶段:

  1. 看头版
  2. 订购

你不能用验证码屏蔽#1 -那样会失去真正的客户(什么?我必须解决验证码每次我想看到最新的woot?!?”)。

所以我的小组一起观察,计时,所以我们每秒得到大约20次检查,第一个看到变化的人会提醒所有其他人(自动),他们将再次加载首页,遵循订单链接,并执行交易(这也可能是自动发生的,除非你实现验证码并为每次wootoff/boc更改它)。

你可以把验证码放在第2条前面,虽然你不愿意这么做,但这可能是确保即使机器人看首页,真正的用户也能得到产品的唯一方法。

但即使有验证码,我的100个小团队仍然有显著的先发优势——而且你无法分辨我们不是人类。如果你开始计时我们的访问,我们只会增加一些抖动。我们可以随机选择要刷新的计算机,这样访问顺序就会不断变化,但看起来仍然足够像人类。

首先,摆脱简单的机器人

你需要有一个自适应防火墙来监视请求,如果有人在做明显的愚蠢的事情——在同一个IP上每秒刷新一次以上,那么就采用策略来减慢他们的速度(丢弃数据包,发回拒绝或500个错误,等等)。

这将显著降低你的流量,并改变机器人用户使用的策略。

第二,让服务器非常快。

你真的不想听这个…但是…

我认为你需要的是一个完全自定义的解决方案。

您不需要打乱TCP/IP堆栈,但是您可能需要开发一个非常、非常、非常快的定制服务器,该服务器是专门用于关联用户连接并对各种攻击做出适当反应的。

Apache, lighthttpd等都很灵活,但你运行的是一个单一用途的网站,你真的需要能够做的比当前服务器所能做的更多(无论是在处理流量,还是在适当地打击机器人)。

通过在自定义服务器上提供一个基本静态的网页(大约每30秒更新一次),你不仅能够处理10倍的请求和流量(因为服务器除了接收请求和将页面从内存中读取到TCP/IP缓冲区之外什么也不做),而且它还可以让你访问可能帮助你减缓机器人的指标。例如,通过关联IP地址,您可以在每个IP每秒阻止多个连接。人类不能比这更快,即使人们使用相同的NATed IP地址也不会经常被阻止。你会想要做一个缓慢的阻塞——在正式终止会话之前,让连接保持完整的一秒钟。这可以加入防火墙,为特别恶劣的违规者提供更长期的封锁。

但现实是,无论你做什么,当机器人是由人类为单一目的定制时,都无法将人类与机器人区分开来。机器人只是人类的代理。

结论

在一天结束的时候,你不能通过看头版来区分人类和计算机。您可以在订购步骤停止机器人,但机器人用户仍然具有先发优势,并且您仍然需要管理巨大的负载。

你可以为简单的机器人添加块,这将提高标准,更少的人会为它烦恼。这也许就足够了。

但如果不改变你的基本模型,你就不走运了。你能做的最好的事情就是处理好简单的情况,让服务器快速到普通用户注意不到的程度,并出售大量道具,即使你有数百万个机器人,许多想要它们的普通用户也会得到它们。

你可能会考虑建立一个蜜罐,并将用户帐户标记为机器人用户,但这将引起巨大的负面社区反弹。

每次我想到“好吧,这样做怎么样?”我总是可以用合适的机器人策略来对抗它。

即使你在首页做了一个验证码来进入订购页面(“这个项目的订购按钮是蓝色的,带粉红色的火花,在这个页面的某个地方”),机器人会简单地打开页面上的所有链接,并使用任何一个返回的订购页面。这根本不可能赢。

提高服务器的速度,在订购页面上输入reCaptcha(这是我发现的唯一一个不容易被愚弄的方法,但对你的应用程序来说可能太慢了),并考虑如何稍微改变模型,让普通用户有和机器人用户一样好的机会。

亚当

我的解决方案是,通过为“机器人和脚本”设置大约10分钟的延迟,让屏幕抓取变得毫无价值。

以下是我的做法:

  • 记录并识别任何重复作案的人。

你不需要记录每次点击的每个IP地址。大概每20次点击只录一次。一个惯犯仍然会在随机的偶尔跟踪中出现。

  • < p > 保留大约10分钟前页面的缓存。

  • < p > 当重复攻击者/机器人攻击您的网站时,给他们10分钟前的缓存页面。

他们不会马上意识到他们得到的是一个旧网站。他们可以勉强凑合,但他们再也不会赢得任何比赛了,因为“真正的人”;会有10分钟的领先时间。

好处:

  • 没有麻烦或问题的用户(如验证码)。
  • 完全在服务器端实现。(不依赖Javascript/Flash)
  • 提供一个较旧的缓存页面的性能强度应该小于活动页面。这样实际上可以减少服务器的负载!

缺点

  • 需要跟踪一些IP地址
  • 需要保持和维护旧页面的缓存。

我们目前正在使用F5的最新一代BigIP负载均衡器来实现这一点。BigIP具有先进的流量管理功能,可以根据频率和使用模式识别抓取者和机器人,甚至可以从单个IP后面的一组源中识别。然后,它可以限制这些内容,为它们提供替代内容,或者简单地用标题或cookie标记它们,以便您可以在应用程序代码中识别它们。

我的方法是专注于非技术解决方案(否则你就会陷入一场军备竞赛,你会输掉,或者至少要花费大量的时间和金钱)。我将专注于计费/运输部分-您可以通过查找同一地址的多次交付或通过单一支付方式的多次收费来找到机器人。你甚至可以在数周内完成这一过程,所以如果用户获得了之前的道具(通过快速响应),那么他这次可能会被赋予某种“障碍”。

这也会有一个副作用(我认为是有益的,但从营销角度来看,我可能是错误的),可能会扩大幸运的人的圈子,购买woot。

首先,根据定义,它不可能支持无状态,即真正匿名的事务,同时还能够将机器人与合法用户分开。

如果我们可以接受这样一个前提,即我们可以在一个全新的woot访问者的第一页点击上强加一些成本,我想我有一个可能的解决方案。由于没有更好的名称,我将粗略地称这种解决方案为“访问DMV”。

假设有一家汽车经销商每天提供一辆不同的新车,在某些日子里,你可以以每辆5美元的价格购买一辆异国情调的跑车(最多3辆),外加5美元的目的地费。

问题是,经销商要求你去经销商处并出示有效的驾驶执照,然后你才能被允许通过门查看正在出售的汽车。此外,你必须说有效的驾驶执照才能购买。

因此,第一次来这家汽车经销商的游客(让我们叫他鲍勃)会被拒绝进入,并被推荐到DMV办公室(就在隔壁,很方便)获得驾驶执照。

其他持有效驾驶执照的旅客出示驾驶执照后,方可进入。一个整天在店里闲逛、纠缠推销员、抢宣传册、喝光免费赠送的咖啡和饼干的人最终会被拒之门外。

现在,回到没有驾照的鲍勃,他所要做的就是忍受一次车管所的访问。在那之后,他可以随时去经销商那里买车,除非他不小心把钱包落在家里了,或者他的驾照被销毁或吊销了。

在这个世界上,驾照几乎是不可能伪造的。

去车管所首先要在“从这里开始”的队列处领取申请表。Bob必须把填好的申请拿到窗口1,在那里,许多脾气暴躁的公务员中的第一个会拿着他的申请,处理它,如果一切正常,就在窗口的申请上盖章,然后把他送到下一个窗口。于是,鲍勃从一个窗口走到另一个窗口,等待他的申请的每一步通过,直到最后他拿到了他的驾驶执照。

试图“短路”车管所是没有意义的。如果表单一式三份没有正确填写,或者在任何窗口中给出错误的答案,应用程序将被销毁,倒霉的客户将被送回起点。

有趣的是,无论办公室是满是空,每个窗口的服务时间都差不多。即使你是唯一一个排队的人,工作人员似乎也喜欢让你在黄线后面等一分钟,然后才说:“下一个!”

然而,车管所的情况并没有那么糟糕。当所有的等待和获得许可证的过程正在进行时,你可以在DMV大厅观看一个非常有趣和有信息的汽车经销商的电视购物。事实上,该信息购物的运行时间仅够覆盖您获得许可证所花费的时间。

更专业一点的解释是:

正如我在最上面所说的,在客户机-服务器关系上有一定的状态性是必要的,它允许您将人类与机器人分开。您希望以一种不会过度惩罚匿名(未经过身份验证)人类访问者的方式进行操作。

这种方法可能需要AJAX-y客户端处理。一个全新的woot访问者会看到一个“欢迎新用户!”页面,其中充满了文本和图形(通过适当的服务器端调整),需要几秒钟才能完全加载。在此过程中(访问者可能正忙着阅读欢迎页面),他的标识令牌正在慢慢地组装起来。

为了便于讨论,我们假设令牌(又名“驾照”)由20个块组成。为了获得每个连续的块,客户端代码必须向服务器提交有效的请求。在发送下一个数据块和进行下一个数据块请求所需的“戳”(即从一个DMV窗口到下一个DMV窗口所需的戳)之前,服务器包含了一个故意的延迟(假设为200毫秒)。总的来说,大约需要4秒的时间来完成块-挑战-响应-块-挑战-响应-…-chunk-challenge-response-completion过程。

在这个过程的最后,访问者拥有一个令牌,该令牌允许他进入产品描述页面,然后进入购买页面。令牌是每个访问者的唯一ID,可以用来限制他的活动。

在服务器端,您只接受来自具有有效令牌的客户机的页面视图。或者,如果每个人最终都能看到页面很重要,那么对缺少有效令牌的请求设置时间惩罚。

现在,为了使这对合法的人类访问者来说相对无害,我们不要让令牌发行过程在后台相对非侵入性地发生。因此,欢迎页面需要带有有趣的文字和故意放慢速度的图形。

这种方法迫使机器人要么使用现有的令牌,要么使用最少的设置时间来获得新的令牌。当然,这对使用分布式假访问者网络的复杂攻击没有太大帮助。

不管纳粹认为他们的通信有多安全,盟军经常会破坏他们的信息。无论你如何试图阻止机器人使用你的网站,机器人所有者都会想出一个方法来解决它。如果这让你成为纳粹,我很抱歉:-)

我认为需要一种不同的心态

  • 不要试图阻止机器人使用你的网站
  • 不去寻求立即见效的解决办法,打持久战

要有这样一种心态:不管你网站的客户是真人还是机器人,他们都只是付费客户;但其中一个比另一个有不公平的优势。一些没有太多社交生活的用户(隐士)可能会像机器人一样让你的网站的其他用户讨厌。

记录您发布报价的时间和帐户选择购买的时间。

这给你一个速度的记录

改变你发布优惠的时间。

例如,有一个3小时的窗口 从某个不知名的时间开始 天(午夜?)只有机器人和隐士 会不断刷新一个页面3 好几个小时才拿到订单 秒。不要改变基准时间, 只有窗口大小。

随着时间的推移,一幅图景就会浮现出来。

01:你可以看到哪些账户经常在产品上线后几秒钟内购买产品。这表明他们可能是机器人。

02:你也可以看看促销的时间窗口,如果窗口是1小时,那么一些早期买家将是人类。然而,人类很少会在4小时内恢复精神。如果发布/购买之间的运行时间相当一致,而不考虑窗口持续时间,那么这就是一个bot。如果发布/购买时间对于小窗口很短,而对于大窗口很长,那就是隐士!

现在不是阻止机器人使用你的网站,你有足够的信息告诉你哪些账户肯定被机器人使用,哪些账户可能被隐士使用。你如何处理这些信息取决于你,但你当然可以用它来让你的网站对有生活的人更公平。

我认为禁止机器人账户是毫无意义的,这就像打电话给希特勒说“谢谢你的u艇的位置!”你需要以一种账户所有者不会意识到的方式使用这些信息。让我们看看我是否能想出什么.....

在队列中处理订单:

当客户下订单时,他们会立即收到一封确认电子邮件,告诉他们他们的订单已被放入队列中,并将在处理完毕时收到通知。我在亚马逊上的订单/发货就经历过这种事情,这一点也不困扰我,我不介意几天后收到一封电子邮件,告诉我我的订单已经发货了,只要我立即收到一封电子邮件,告诉我亚马逊知道我想要这本书。在你的情况下,这将是一封电子邮件

  1. 您的订单已经下单,正在排队。
  2. 您的订单已经处理完毕。
  3. 您的订单已发出。

用户认为他们排在一个公平的队列中。每1小时处理一次队列,让普通用户也经历一次队列,以免引起怀疑。只有在机器人和隐士账户排队超过“人类平均下单时间+ x小时”后,才会处理他们的订单。有效地减少机器人对人类的影响。

这里最重要的事情是改变系统,从你的服务器上移除负载,防止机器人在不让奶瓶商知道你在和他们玩游戏的情况下赢得这袋垃圾,否则他们会修改他们的策略。我认为如果你们不进行一些处理,就没有办法做到这一点。

所以你在主页上记录点击率。每当有人点击该页面时,该连接就会与上次点击进行比较,如果速度太快,则会发送一个没有提供该页面的版本。这可以通过某种负载平衡机制来实现,该机制将机器人(速度太快的点击)发送到一个服务器,该服务器只是提供您的主页的缓存版本;真实的人被送到好的服务器。这减轻了主服务器的负载,并使机器人认为它们仍然在正确地提供页面。

如果这个提议能以某种方式被拒绝就更好了。然后你仍然可以在假服务器上提供报价,但当机器人填写表格时,说“对不起,你不够快”:)然后他们肯定会认为他们还在游戏中。

使用JavaScript动态地将信息写入页面。如果没有JS渲染引擎,屏幕刮削器和amp;机器人无法读取信息。

我将要描述的方法有两个要求。1) Javascript被强制执行2)一个具有有效http://msdn.microsoft.com/en-us/library/bb894287.aspx浏览器会话的web浏览器。

如果没有其中任何一个,你就是“故意”倒霉的。互联网被设计成允许匿名客户查看内容。简单的HTML没有办法解决这个问题。哦,我只是想说,简单的,基于图像的验证码很容易被击败,甚至作者也承认这一点。

接下来是问题和解决方案。问题有两个方面。首先,你不能因为一个人“做了坏事”而屏蔽他。要解决这个问题,您可以设置一个方法,该方法接受浏览器的有效会话,并生成md5sum + salt +哈希(您自己的私有设备)并将其发送回浏览器。然后在每次post / get期间,浏览器被要求返回该散列键。如果你从来没有得到一个有效的浏览器会话,然后你回复“请使用一个有效的网络浏览器等等等等”。所有流行的浏览器都有有效的浏览器会话id。

现在我们至少有了该浏览器会话的标识(我知道它不会永久锁定,但是通过简单的脚本很难“更新”一个浏览器会话),我们可以有效地锁定一个会话(例如;让脚本编写人员很难访问你的网站,而不会对有效用户造成任何惩罚)。

下一部分是为什么它需要javascript。在客户机上,为来自键盘的每个字符与文本区域中的文本值构建一个简单的散列。该有效密钥作为简单的散列传输到服务器,必须进行验证。虽然这种方法可以很容易地进行逆向工程,但它确实使个人在提交数据之前必须经历一个额外的障碍。请注意,这只是防止自动发布数据,而不是DOS不断访问网站。如果你甚至可以访问ajax,有一种方法可以跨线发送盐和散列键,并使用javascript与它一起构建onkeypress字符“有效令牌”,通过线发送。是的,就像我说的,它可以很容易地进行逆向工程,但你看到我的希望。

现在为了防止不断的交通滥用。有几种方法可以在给定有效的会话id后建立模式。这些模式(即使使用Random来抵消请求时间)的epsilon比人类试图重现相同的误差范围时要低。由于您有一个会话ID,并且您有一个“看起来像一个bot”的模式,那么您可以用一个简单的轻量级响应屏蔽该会话,该响应是20字节而不是200000字节。

在这里,我们的目标是:1)使匿名变为非匿名(即使只是在每个会话中);2)开发一种方法,通过建立机器人使用系统的模式来识别机器人与正常人。你不能说后者是不可能的,因为我以前做过。虽然我的实现是用于跟踪视频游戏机器人,但我似乎认为那些用于识别机器人和用户的算法可以推广到网站访问的形式。如果你减少了机器人消耗的流量,你就减少了系统的负载。请注意,这仍然不能防止DOS攻击,但它确实减少了bot对系统产生的压力。

  1. 将道具卖给非脚本人。

  2. 保持网站运行的速度不被机器人减慢。

  3. 不要让“正常”用户完成任何任务来证明他们是人类。

你可能不想听这个,但是第一条和第三条是相互排斥的。

在互联网上,没有人知道你're a dog

也没人知道你是机器人。如果不要求这个人做些什么,就没有程序方法来告诉连接的另一端是否有人。防止脚本/机器人在网络上做事情是验证码被发明的全部原因。这并不是一个没有花费大量精力的新问题。如果有一种更好的方法,一种不像验证码那样给真实用户带来麻烦的方法,每个人都已经在使用它了。

我认为你需要面对这样一个事实,如果你想让机器人远离你的订购页面,一个好的验证码是唯一的方法。如果对你的随机垃圾的需求足够高,人们愿意付出这些代价来获得它,合法用户就不会被验证码吓跑。

我认为某些ip的沙箱是值得研究的。一旦一个IP超过了一个阈值,当他们攻击你的网站时,将他们重定向到一个网络服务器,在提供文件之前有几秒钟的延迟。我编写的Linux服务器可以处理开放的50K连接,几乎不需要任何CPU,所以减慢大量的机器人并不太难。服务器所需要做的就是在充当常规站点的代理之前保持连接打开N秒。这仍然可以让普通用户使用该网站,即使他们非常激进,只是体验略有下降。

你可以像在这里那样使用memcached来跟踪每个IP的点击率。

要解决第一个问题,机器人猛击你的首页,尝试使蜜罐完全相同的一个真正的垃圾袋。让首页的html标记包含相同的标记,就好像它是一袋垃圾一样,但要把它隐藏起来。这将迫使机器人包含CSS引擎,以确定这堆垃圾代码是显示还是隐藏。或者,你只能输出这个“假的”垃圾html的随机时间(小时?)之前,一个真正的垃圾包。这将导致机器人过早地发出警报(但不知道多快)。

第二步是真正购买一袋垃圾,添加一些简单的问题。比起上面提到的数学问题,我更喜欢常识问题。比如,“冰是热的还是冷的?”“蚂蚁是大还是小?”当然,这些问题需要随机抽取,从无穷无尽的问题中抽取,否则机器人可以通过编程来回答这些问题。不过,这些问题仍然远没有验证码那么烦人。

那么使用Flash呢?

是的,我知道使用Flash的开销,加上一些用户将无法购买这些垃圾(即iPhone用户),这可能会造成不利影响,但在我看来,Flash可以防止屏幕抓取或至少使其变得困难。

我错了吗?

编辑添加

在你的提交表单上添加几个“隐藏”字段怎么样,就像我下面发现的那样:

实际上,最好的做法似乎是 使用两个隐藏字段,其中一个带有 初始值和非初始值。这是 罕见的可以忽略两者的机器人 字段。检查一个字段是否为 空白,而其他的要有了 初始值。然后用 CSS,而不是让它们“隐藏” 字段:< / p >

.important { 显示:无;} < / p > < p >请

bot倾向于喜欢有名字的字段 像“地址”。在 段落是为那些少有的人准备的 拥有非css能力的人 浏览器。如果你不担心 他们,你可以把它去掉。

在处理表单的逻辑中, 你可以这样做:

if (address2 == "xyzzy" and address3 == "") {/* OK to send /} else {/ probably have a bot */}

  • 瞄准资金流。这比追踪IP端简单多了。几次让机器人支付过高的费用(白底白文的公告和各种形式的公告)很快就会扼杀他们的商业案例。您应该仔细准备,并充分利用机器人的优势:速度。你有没有试过间隔几秒发几千个假通告?如果它们的速度是10次/秒,你可以跑得更快。只要他们继续购买,你就想保持这种状态,所以仔细考虑一下你想在一天或一周的什么时候开始这样做。理想情况下,他们会停止付款,这样你就可以把你的箱子交给银行了。
  • 确保您的网站是完全生成的,并且每次页面访问返回不同的页面内容(html, javascript和css)。解析比生成更困难,而且很容易构建超出机器人开发人员处理能力的变化。不断改变内容和生成内容的方式。
  • 您需要知道机器人能够多快地适应您所做的更改,以及它们所处的时区。它是一个僵尸网络还是多个,它们是在同一个时区,还是不同的时区,或者它是一个全球开发人员网络?你希望你的反击时机正确。
  • 目前最先进的机器人需要人类输入验证码(针对色情/游戏)。
  • 让快速反应变得毫无吸引力。
  • 使用哈希和蜜罐,正如Ned Batchelder解释的那样。
< p >[编辑] 你不能防御僵尸网络的说法是不对的。特别是我的第二个建议提供了充分的防御自动买家。不过,这需要你彻底重新思考你所使用的技术。您可能想用Seaside做一些实验,或者直接在c.

你不能完全阻止机器人,即使有验证码。但是,您可以让编写和维护机器人变得痛苦,从而减少机器人的数量。特别是强迫他们每天更新他们的机器人,你会让大多数人失去兴趣。

下面是一些让机器人更难编写的想法:

  • 需要运行一个javascript函数。Javascript使得编写机器人变得更加痛苦。可能需要一个验证码,如果他们没有运行javascript,仍然允许实际的非javascript用户(最少)。

  • 在输入表单时计时击键(同样是通过javascript)。如果它不像人类,那就拒绝它。在机器人上模仿人类打字是一件痛苦的事。

  • 编写代码,每天用一个新的随机值更新字段ID。这将迫使他们每天更新他们的机器人,这是一个痛苦。

  • 编写代码以每天重新排序字段(显然在某种程度上,这对用户来说不是随机的)。如果他们依赖于现场订单,这将使他们陷入困境,并再次迫使他们的机器人代码进行日常维护。

  • 你甚至可以进一步使用Flash内容。在Flash上编写机器人是一件非常痛苦的事情。

一般来说,如果你开始采取一种不阻止他们的心态,而是让他们更加努力,你可能会实现你正在寻找的目标。

大多数纯技术解决方案已经提供。因此,我将提出这个问题的另一种看法。

据我所知,这些机器人是由那些想买你卖的包的人设置的。问题是——

  1. 其他不操作机器人的人应该有购买的机会,而你提供的是有限数量的包。
  2. 你想要吸引人们到你的网站,而只是销售包包。

你可以让潜在的包包买家订阅电子邮件,甚至短信更新,以便在交易发生时收到通知,而不是试图避开机器人。你甚至可以给他们一到两分钟的时间(一个销售开始的特殊URL,随机生成,并随邮件/短信发送)。

当这些买家去购买他们在你的网站上,你可以向他们展示你想要的任何东西。那些运行机器人将更喜欢简单地注册到您的通知服务。

机器人运行者可能仍然会在你的通知中运行机器人以更快地完成购买。一些解决方案可以提供一键购买。

顺便说一下,你提到你的用户不是注册的,但听起来那些购买这些包的人不是随机的买家,而是期待这些销售的人。因此,他们可能愿意注册,以便在试图“赢得”一个包时获得优势。

从本质上讲,我的建议是试着把这个问题看作一个社会问题,而不是一个技术问题。

Asaf

假定原则:

第一个屏幕必须是非常简单的低开销HTML,带有一个易于识别的按钮(游戏邦注:无论是机器人还是玩家),以明确表示“我想要我的垃圾”。因为我们假设了最坏的情况-你有来自机器人和非机器人组合的DOS攻击,所有人都首先点击网站(就可识别性而言)。所以让我们尽快把这些从缓存,良性回声机器人等中分发出去。

(注:就追求者而言,这就是发生的事情;这对用户和Woot来说都是痛苦的,所以任何有助于吸收或缓解首次屏幕获取的内容都符合三方的利益。)

然后,对于非机器人来说,这个过程不需要比现在更糟糕,对于正版机器人来说,不需要额外的步骤(或痛苦)。(关于当前设计的背景说明:当前的wooters通常已经签约,或者可以在购买过程中签约。新买家需要在购买时进行注册。所以实际上已经注册和已经登录会更快。)

为了完成垃圾销售,需要导航一系列交易屏幕(比如5个正负,取决于具体情况)。获胜者是第一个完成全部导航的人。当前进程奖励那些最快完成整个5个屏幕序列的机器人(或其他人);但整个进程都偏向于快速响应(即机器人)。

毫无疑问,机器人将在第一个屏幕上占据优势;无论他们在这一点上取得了什么优势,他们都会在剩下的屏幕上保持下去,再加上身体在其他阶段提供的任何优势。


如果Woot有意地在第一个屏幕之后解耦排队过程,并将从该点开始的每个会话提供给一个固定的最小时间步骤序列,会怎样?第二个屏幕直到30秒后才出现;提交后,下面的屏幕也一样。我敢打赌,如果wooters被告知,在第一个屏幕之后,他们将在队列中等待(这已经是事实),这将以一种不会比以前更长的方式分散负载,更健壮,并有助于清除机器人,那么他们就不会有任何问题。在这一点上,你可以加入上面列出的一些机器人减速带(DOM对象的微妙变化等),只是从Woot对事情的控制更多的感知中受益会有所帮助。

如果有更多的BOC玩家能够在第一次命中(或接近命中)时进入一个不太适合机器人的非时间关键过程,而不是重新尝试,那么能够度过这一阶段的玩家就会更有信心。可以肯定的是,它不会像现在这样充满敌意。它可能会减少背景噪声-环境-机器人速率,即使是在正常的Woot-Off环境下。机器人会离开主页,与其他机器人(以及其他所有人)一起坐在队列中,在那里它们没有任何优势。

人力资源> < p > < 嗯…我想到了“公寓-线程”的概念。我想知道这个模式是否大致有用?
这里一个有用的核心概念是,在第一个屏幕之后,能够跟踪队列中累计的总时间,并能够调整到标准。作为一种减缓机器人的策略,你将拥有一些灵活性,可能会将最早的会话延迟5-10秒;这样做可能不会被发现,但会带来更丰富的非机器人购买组合。我相信你有数据来帮助评估这种事后事件。
只是为了好玩,你可以(至少为了一个人)把你所见过的最好的功能组合在一起,然后在前一天分发给每个人。这样至少每个人都有同等的武器。(然后……传入…)

我喜欢BradC的回答(使用Ned Batchelder的文章中的建议),但我想给它添加另一个级别。你不仅可以随机字段名,还可以随机字段位置和让他们隐形的密码

现在,最后一点是困难的部分,我不知道确切地如何做到这一点,但有更多JavaScript和CSS经验的人可能能够解决它。当然,您不能一直保持相同的位置,因为脚本编写人员只会发现位置为(x,y)的元素是实元素。您必须有一些代码来改变表单元素相对于其他元素的位置,以便将它们移出页面,将它们相互覆盖,等等。然后引入一些随机性的混淆执行此操作的代码。在新项目可用之前,每天自动更改混淆。其思想是,如果没有适当的CSS和JavaScript实现(以及像人类一样读取页面布局的代码),机器人将无法找出正在向用户显示哪些元素。当然,服务器端代码知道哪些字段是真实的,哪些是虚假的。

总而言之:

  • 字段名是随机的
  • 字段顺序是随机的
  • 字段隐藏代码很复杂
  • 字段隐藏代码是随机混淆的
  • 服务器端代码每天自动更改随机因子

在你给出的限制条件下,我不认为有办法避免某种形式的“军备竞赛”,但这并不意味着一切都完了。如果你能在军备竞赛中实现自动化,而编剧不能,那么你每次都能获胜。

在应用程序前面的apache服务器上写一个反向代理,它实现了Tarpit (维基百科文章)来惩罚机器人。它将简单地管理最近几秒内连接的IP地址列表。您检测到来自单个IP地址的请求爆发,然后在响应之前以指数方式延迟这些请求。

当然,如果多人使用NAT网络连接,他们可以来自同一个IP地址,但人类不太可能介意你的响应时间从2毫秒到4毫秒(甚至400毫秒),而机器人则会很快受到不断增加的延迟的阻碍。

让机器人用户无利可图,他们很快就会离开——也就是说,偶尔会卖一些人类不可能想要的东西(可能是一袋文字垃圾)。

我想唯一能做的就是让努力超过垃圾邮件发送者的收益。所以这是一个“头脑风暴”的想法,我不知道如何实现的所有技术细节。我必须做一些研究,但根据我目前的知识,如果其他建议的方法被拒绝,就值得调查一下。

你已经在你的网站上使用flash,那么为什么不使用一个flash控件来协助或完成表单提交呢?控件可以使用密钥对或其他算法与web服务器进行加密通信来散列值?

我想整个形式可以在闪光?就我个人而言,我会使用Java小程序,因为那是我最喜欢的语言。

目标的一个可能的解决方案,不一定是问题的标题:

与其向每个人提供特殊服务,不如一次将其提供给随机的ip地址集。例如,将IP空间划分为256个唯一的块,当time=0时,只允许IP地址在第一个块中的人,当time=5秒时,允许来自第一个块和第二个块的人……直到最后一个时段到来,并让每个人都看到交易。随机化的一个想法是将他们的IP的md5/sha的最低有效位加上一些基于交易的盐。

这将允许脚本编写人员拥有接近于零的响应时间,以及拥有多个ip地址的优势,但这将意味着给定的机器人与其他因ip地址而比他们“幸运”的客户相比没有任何优势。

将这一点与其他一些想法结合起来似乎是个好主意。

首先,让我回顾一下我们需要做的事情。我意识到我只是在转述最初的问题,但重要的是我们要百分之百地理解这个问题,因为有很多很好的建议,4个中有2个或3个是正确的,但正如我将演示的那样,您将需要一个多方面的方法来满足所有的需求。

要求1:摆脱“机器人抨击”:

首页的快速“猛击”正在损害网站的性能,这是问题的核心。这种“猛击”既来自单ip机器人,也可能来自僵尸网络。我们想把两者都去掉。

要求二:不要破坏用户体验:

我们可以通过实施一个讨厌的验证程序来有效地解决机器人的情况,比如打电话给操作员,解决一堆验证码,或类似的问题,但这就像强迫每个无辜的飞机乘客跳过疯狂的安全圈,只是为了抓住最愚蠢的恐怖分子的渺茫机会。哦,等等,我们真的这么做了。但是让我们看看是否能在woot.com上做到这一点。

要求三:避免“军备竞赛”

正如您所提到的,您不希望卷入垃圾邮件机器人军备竞赛。因此,您不能使用隐藏或混乱的表单字段、数学问题等简单的调整,因为它们本质上是可以简单地自动检测和规避的模糊度量。

需求4:挫败“警报”机器人:

这可能是您的要求中最困难的。即使我们可以进行有效的人类验证挑战,机器人仍然可以在你的首页上投票,并在有新报价时提醒编剧。我们也想让那些机器人变得不可行。这是第一个需求的更强版本,因为机器人不仅不能发出破坏性能的快速请求——它们甚至不能发出足够多的重复请求来及时向脚本人员发送“警报”以赢得报价。


好,让我们看看是否能满足这四个条件。首先,正如我提到的,没有一种测量方法能达到目的。你将不得不结合一些技巧来实现它,你将不得不忍受两个烦恼:

  1. 少数用户将被要求经历重重考验
  2. 少数用户将无法获得特别优惠

我知道这些很烦人,但如果我们能让这个“小”数字足够小,我希望你会同意利大于弊。

第一个措施:基于用户的节流:

这个很简单,我相信你已经做过了。如果用户已登录,并保持每秒刷新600次(或其他),您将停止响应并告诉他冷却。事实上,你可能会更早地限制他的请求,但你明白我的意思。这样,一个登录的机器人将被禁止/节流一旦它开始投票你的网站。这是简单的部分。那些未经验证的机器人才是我们真正的问题,下面就来谈谈它们:

第二个措施:某种形式的知识产权限制,正如几乎所有人都建议的那样:

无论如何,你必须做一些基于IP的节流来阻止“机器人抨击”。由于允许未经身份验证(未登录)的访问者获得特殊优惠对您来说似乎很重要,因此您最初只有ip可供参考,尽管它们并不完美,但它们适用于单ip机器人。僵尸网络是另一种野兽,但我将回到它们。现在,我们将做一些简单的节流来击败快速发射的单ip机器人。

如果在所有其他处理之前运行IP检查,使用代理服务器进行节流逻辑,并将IP存储在memcached查找优化的树结构中,那么性能损失可以忽略不计。

第三种方法:用缓存的响应掩盖油门:

随着快速单ip机器人的限制,我们仍然必须解决缓慢的单ip机器人,即。机器人被专门调整为“在雷达下飞行”,通过将请求间隔得比节流防止的距离略远。

要立即使缓慢的单ip机器人无用,只需使用abelenky建议的策略:将10分钟前的缓存页面提供给过去24小时内(大约)发现的所有ip。这样,每个IP每天/小时/周都有一次“机会”(取决于你选择的时间段),对于那些只是点击“重新加载”的真正用户来说,他们不会有明显的烦恼,除非他们没有赢得这个优惠。

这种措施的美妙之处在于,可以阻止“警报机器人”,只要它们不是来自僵尸网络。

(我知道你可能更喜欢允许真实用户反复刷新,但如果没有验证码或类似的东西,就无法区分发送刷新垃圾信息的人与发送请求垃圾信息的机器人)

第四项措施:

你说的对,验证码会损害用户体验,应该避免。然而,在_one_情况下,它们可以是你最好的朋友:如果你设计了一个非常限制性的系统来阻止机器人,那-由于其限制性-也会捕获一些假阳性;那么一个验证码服务作为最后的手段将允许那些被抓到的真实用户通过你的节流(从而避免恼人的DoS情况)。

当然,当所有的机器人都被你的网络捕获时,很少有真正的用户被CAPTCHA所困扰。

如果你在提供10分钟前的缓存页面时,也提供了一个替代方案,可选, CAPTCHA验证的“首页刷新器”,那么那些真的想要保持刷新的人,仍然可以这样做,而不需要得到旧的缓存页面,但代价是必须为每次刷新解决CAPTCHA。是一种烦恼,但这是可选的只适合死忠用户,他们往往更宽容,因为他们知道他们是在游戏系统来提高他们的机会,而这种机会的提高不是免费的。

第五种方法:诱饵废话:

克里斯托弗·马汉(Christopher Mahan)有一个我很喜欢的想法,但我会对它进行不同的解读。每次你准备一个新的报价时,还要准备另外两个没有人会选择的“报价”,比如一个12毫米的20美元的坚果。当报价出现在首页时,把三个“报价”放在同一张图片上,每个报价都有对应的数字。当用户/机器人实际继续订购商品时,他们将不得不选择(一个单选按钮)他们想要的产品,由于大多数机器人只是猜测,在三分之二的情况下,机器人将购买毫无价值的垃圾。

当然,这并不能解决“警报机器人”的问题,也有可能有人能够创造一个能够选择正确物品的机器人。然而,不小心买到垃圾的风险应该会让脚本编写人员完全放弃全自动机器人。

第六项措施:僵尸网络节流:

(删除)

好吧 ............我现在花了我晚上的大部分时间思考这个问题,尝试不同的方法....全球延误…基于cookie的令牌. .排队服务……“陌生人节流”……但这根本不管用。它不是。我意识到你还没有接受任何答案的主要原因是没有人提出一种方法来阻止分布式/僵尸网络/僵尸网络攻击....所以我真的很想破解它我相信我在不同的线程中破解了僵尸网络认证问题,所以我对你的问题也寄予厚望。但我的方法并不适用于此。你只有IP地址,一个足够大的僵尸网络不会在任何基于IP地址的分析中暴露自己。

结果出来了:我的第六个度量是零。没什么。邮政编码。除非僵尸网络足够小和/或快到被通常的IP节流捕获,否则我看不到< em > < / em >有效的措施来对抗僵尸网络,不涉及显式的人为验证,如CAPTHAs。我很抱歉,但我认为结合以上五种方法是你最好的选择。你可能只需要abelenky的10分钟缓存技巧就可以了。

用户必须等待图像中显示的延迟的延迟页面如何?

你只有在他们在图像中指定的足够短的时间内点击时才会从他们到达的页面进行排序,也许图像可以在动画gif或非常小的javascript或flash计时器中进行倒计时。

如果他们在时间限制之外跳转到详细信息页面,他们会看到在之前的回答中讨论过的昂贵物品。

对未注册用户延迟5分钟发布所有产品公告。休闲用户不会真正注意到这一点,而非休闲用户还是会注册。

我不能百分之百地确定这是否可行,至少不尝试一下是不行的。

尽管技术上很有挑战性,但似乎应该可以编写一个服务器端HTML/CSS扰码器,它将一个正常的HTML页面+相关文件作为输入,并输出一个或多或少空白的HTML页面,以及一个能够重构页面的模糊javascript文件。javascript当然不能直接打印出DOM节点……但它可以吐出一组复杂的重叠,绝对定位的div和段落,每个包含一个字母,所以它完全可读。

机器人将无法阅读它,除非它们使用完整的渲染引擎和足够的人工智能来重建人类将看到的内容。

然后,因为这是一个自动化的过程,您可以根据您的计算能力经常重新打乱站点-每分钟,或每十分钟,或每小时,甚至每次页面加载。

当然,写这样一篇含糊不清的文章会很困难,而且可能不值得。但这只是一个想法。

没有完全修复,但我在这里还没看到。

跟踪“砰砰”声;地址,并张贴免责声明,说BOC/项目将不会被运送到任何地址,不遵循你的TOS。

这将对一些人产生心理影响,而其他想要利用您的站点的人将不得不切换方法,但您将否定他们的一个途径。

这样怎么样:创建一个表单,如果有新商品正在出售,就会收到一封电子邮件,并添加一个捕捉系统,将相同的内容发送给任何在X秒内刷新的人。

这样你就赢得了所有的场景:你摆脱了刮刮器(他们可以刮掉他们的电子邮件帐户),你给了那些不会在你的网站上买东西的人机会!如果我真的想买东西,我肯定会在我的手机里收到电子邮件并登录购买。

这里有很多建议,所以如果这已经发布了,请原谅我。

我要做的第一件事是把订购分成两步。第一步将在记录IP地址时传回一个GUID。第二步将接收GUID,并将其与已记录的IP地址进行比较。结合阻止IP地址是垃圾邮件的网站(IE:快于人类可以点击刷新),这种技术可以阻止垃圾邮件发送者成功购买,从而解决1 &3.

第二项是有问题的,但我会保持一个常规用户IP地址的运行列表,并限制任何新用户的流量。这可能会让首次访问者和拨号用户(由于IP地址的变化)受到冷落,但我认为这只是通过优先考虑回头客而在糟糕的情况下做出最好的选择……而拨号用户,即使没有任何垃圾邮件发送者,他们是否会“获胜”也是值得怀疑的。

你们为什么不封杀那些被你们认定为机器人的用户的信用卡呢?

  1. 在你的网站上发布使用机器人是非法的
  2. 找到识别机器人的某些启发式方法(例如,可以通过短期IP跟踪或通过它们检查表单所需的时间来完成)
  3. 如果你标记为机器人的人购买了该商品,冻结他的信用卡以备将来使用
  4. 下次他想买东西的时候,不让他买,把商品退回库存

我想即使是专业人士最终也会用完信用卡的。

一旦装瓶者放弃你,你的服务器负载就会随着时间而减少。另一个想法是在不同的服务器之间分离页面——例如,RSS提要在一个服务器上,主页在另一个服务器上,结帐在另一个服务器上。

祝你好运。

如上所述,我在非验证码表单上做了一些工作,方法是使用存储在表单中的结果的预期值的预计算散列。这个想法适用于两个Wordpress反垃圾邮件插件:WP-MorphWP-HashCash。唯一的缺点是客户端浏览器必须能够解释JavaScript。

你怎么知道有编剧在下命令?

问题的关键在于您无法将脚本编写者与合法用户分开,因此无法阻止他们,那么您是如何知道存在脚本编写者的呢?

如果您有办法回答这个问题,那么您就有了一组可以用来筛选脚本程序的特征。

所以你的问题是生意太多了?有人在抢你的生意?这是假设这些编剧能产生合格的销售吗?问题是他们抢在别人之前把你的产品抢购一空?

你为“脚本”创建一个完整的web服务API如何?然后给他们一点折扣或额外津贴,让他们遵守你的规则。你的业务翻倍,有你的网络销售和API销售。

要么这样做,要么获得更多的库存——你无法对抗它——拥抱并适应它。

我很确定你的服务器已经记录了所有传入请求的ip(大多数都是这样)——所以数据已经在那里了。

也许你可以:

只需验证“获胜者”,验证它的IP在日志中显示的值小于某个阈值(我使用“grep | wc -l”来获得计数)。如果它超过你的阈值,暂时阻止该IP(一个小时左右?)

取消任何与“上一位”中奖者有相同收货地址或付款信息的“中奖者”的资格,或者在一定时间内中奖的“中奖者”,以分散“中奖”。

机器人不会把他们弄到那里的。

把刮刀惹毛: 当“随机垃圾”条目出现时,通过“代码混淆器”运行该页面的HMTL输出……这不会改变页面的“显示”…只是用随机生成的id打乱代码等

更阴险的:

根据获胜IP在日志中出现的次数,增加“获胜”项目的价格。即使机器人赢了,你也赢了。: -)

试图针对bot本身解决不了问题——不管是谁写的,他们都会想出一种新的方法来绕过你所设置的任何地方。然而,强迫用户在购买前三思才是更有效的解决方案。我能想到的最好的办法是进行荷兰式拍卖。起价要高(是你在商店购买价格的两倍),然后逐渐降低价格。第一个点击购买的人就能拿到。我不认为任何机器人都有足够的智能来计算商品的最佳价格。

限制你释放报盘的时间: 例如:只从一个小时开始的7分钟到8分钟。不要偏离这一点,对那些在游戏发布前半小时进行大量检查的ip给予几秒钟的惩罚。对于机器人所有者来说,每小时只刷几分钟屏幕就变得很有利。的。时间。此外,因为一个正常人可以每小时检查一次网站,但不是每秒钟一次,你把正常人放在一个更公平的基础上与机器人

< >强饼干: 使用仅由唯一ID(数据库表的键)组成的跟踪cookie。对没有cookie的客户端、无效cookie的客户端、使用新IP的相同cookie的客户端或使用频率较高的cookie的客户端给予“释放延迟”

识别可能的机器人: cookie将导致机器人为它们控制的每个IP请求多个cookie,这是可以跟踪的行为。只有一个发出的cookie的ip很可能是普通的客户端。有许多发出cookie的ip要么是大型NAT-ed网络,要么是一个机器人。我不知道你会如何区分这些,但公司可能更有可能拥有DNS服务器、网页等性质的东西

也许你需要一种解决方案,让机器人完全无法区分垃圾销售和所有其他内容。

这是验证码主题的一种变体,但不是用户通过解决验证码来验证自己,验证码是销售的描述,以一种视觉上令人愉悦的方式呈现(但可能有些被背景掩盖)。

  1. 将道具卖给非脚本人。
  2. 不要让“正常”用户完成任何任务来证明他们是人类。

所以基本上你想知道一个特定的用户是否是一个人,而不需要他们证明。据我所知,这在网上是不可能的,抱歉。

我建议将机制改为拍卖。

以下是我的看法。攻击机器人所有者的投资回报率,这样他们就会做你想让他们做的合法事情,而不是欺骗。让我们从他们的角度来看。他们的资产是什么?显然,无数的一次性机器、IP地址,甚至可能还有大量不熟练的人愿意做无聊的工作。他们想要什么?总是在其他合法的人得到它之前得到你提供的特别交易。

好消息是,他们赢得这场竞赛的时间有限。我不认为他们拥有无限数量的聪明人,他们随时待命,在你启动交易的那一刻对你的网站进行逆向工程。所以,如果你能让他们跳过一个他们很难理解,但对你的合法客户来说是自动的(他们甚至不知道它在那里),你就可以延迟他们的努力,让他们被大量渴望得到你的热门交易的真人打败。

第一步是让你的身份验证概念是非二进制的,我的意思是,对于任何给定的用户,你都有一个分配给他们的概率,他们是真人还是机器人。您可以使用许多提示来建立这种可能性,其中许多已经在本线程中讨论过:可疑的率活动,IP地址,外国地理位置,cookie等。我最喜欢的是只关注他们正在使用的窗口的确切版本。更重要的是,你可以给你的长期客户一个明确的认证方式,通过强烈的提示:参与网站,购买,在论坛上投稿等等。这并不要求你做这些事情,但如果你做了,那么当你看到特别优惠的时候,你会有一点优势。

每当您被要求做出身份验证决定时,使用这种概率使您正在谈论的计算机在您给它们想要的东西之前或多或少地工作。例如,也许你站点上的一些javascript需要客户端在后台执行一个计算成本很高的任务,只有当该任务完成时,你才会让他们知道这个特殊交易。对于普通客户来说,这是非常快速和无痛的,但对于骗子来说,这意味着他们需要更多的计算机来保持稳定的覆盖(因为每台计算机都必须做更多的工作)。然后你可以使用上面的概率分数来增加他们必须做的工作量。

为了确保这种延迟不会导致任何公平性问题,我建议将其设置为某种加密任务,其中包括来自该用户计算机的当前时间。由于骗子不知道交易开始的时间,他不能只是编造一些东西,他必须使用接近当天的真实时间(你可以忽略任何声称在交易开始前到达的请求)。然后你可以利用这些时间来调整先到先得的规则,而不需要真正的人知道它。

最后一个想法是更改生成工作所需的算法,无论何时发布新交易(以及在随机的其他时间)。每次你这么做,正常人都不会受到影响,但机器人就会停止工作。他们得找个人来做逆向工程,希望这比你的交易窗口时间要长。更好的是,你永远不告诉他们是否提交了正确的结果,这样他们就不会得到任何形式的警告,他们做错了事情。为了击败这个解决方案,他们将不得不真正自动化一个真正的浏览器(或者至少是一个真正的javascript解释器),然后你就真的提高了欺诈的成本。此外,使用真正的浏览器,您可以像本文其他地方建议的那样做一些技巧,如计时每个条目的击键,并查找其他可疑行为。

因此,对于任何您以前见过的人(公共IP、会话、cookie等),您都有一种方法使每个请求稍微昂贵一些。这意味着骗子总是想给你一个最困难的例子——一个你从未见过的全新电脑/浏览器/IP组合。但是通过投入额外的工作去了解他们的机器人是否能够正常工作,你便会迫使他们浪费大量宝贵的资源。尽管他们可能真的有无限的数量,但产生他们并不是没有成本的,而且你再次推高了他们投资回报率方程中的成本部分。最终,对他们来说,做你想做的事会更有利可图:)

希望这对你们有帮助,

埃里克

使用hashcash

Hashcash是一种拒绝服务计数器度量工具。它目前的主要用途是帮助hashcash用户避免由于基于内容和基于黑名单的反垃圾邮件系统而丢失电子邮件。

我认为你最好的选择是关注即将到来的IP,但要从几个方面缓解你提到的问题。首先,使用概率散列(例如,布隆过滤器)来标记之前见过的IP。这类算法非常快,并且可以很好地扩展到绝对庞大的集合大小。其次,使用渐变响应,即服务器延迟添加到每个请求中,根据您“最近”看到该IP的次数来预测。

以牺牲屏幕阅读器的可用性为代价,你可以在90%的页面上使用未标记的、不可否认的图片按钮。定期旋转图片,使用随机生成器和随机排序设置两个按钮,分别表示“我想要这个”和“我是一个机器人”。将它们按不同的顺序并排排列。在每个阶段,用户都可以朝着目标前进,但机器人更有可能出错(50% *步数)。这就像每个阶段的捕捉,对用户来说更容易,对机器人来说更慢,因为他们需要在每一步都提示他们的主人。把价格、确认按钮、商品描述放在图片上。它很糟糕,但可能更成功。

为什么不将内容设置为CAPTCHA?

在你展示奖品的页面上,总是在相同的位置有一个同名的图像文件,当一个包或垃圾销售上,动态生成和加载一个文本等广告奖品的图像,当没有销售时,只需要一些默认的图像,与网站很好地集成。好像和验证码是一个概念…如果机器人不能弄清楚图像的含义,他们就不能“赢得”它,如果他们能,他们就能弄清楚你的CAPTCHA图像。

让机器人在公平的场地上竞争。加密时间戳并将其粘贴在隐藏表单字段中。当您收到提交文件时,解密它并查看已经过了多长时间。如果它超过了人类打字能力的阈值,则拒绝它。现在机器人和人类只能以同样的速度购买这袋垃圾。

如果你不能打败他们……改变规则!

为什么不提供一个比编剧为自己创造的更好的系统呢?< br > 修改你的网站,让不使用机器人脚本的人更公平。人们注册(CAPTCHA或电子邮件验证),并有效地进入彩票比赛中获胜!< / p >

“获胜”让游戏更有趣。每个人支付一小笔报名费,获胜者就能以更低的价格获得产品

我不是一个网页开发人员,所以对此持保留态度,但这是我的建议-

每个用户都有一个cookie(包含一串随机数据),决定他们是否看到当前的垃圾销售。

(如果你没有饼干,你就看不到它们。因此,不启用cookie的用户永远不会看到糟糕的销量;新用户在第一次浏览页面时永远不会看到它们,但之后会看到)。

每次用户刷新网站时,他都会将当前的cookie传递给服务器,服务器会根据这个cookie来决定是给他一个新的cookie还是保持当前的cookie不变;并以此为基础,决定是否在页面上展示垃圾促销。

为了保持服务器端的简单性,你可以说在任何时候,只有一个cookie会让你看到糟糕的销售情况;还有一些其他的cookie被标记为“在最近2秒内生成的”,这些cookie将始终保持不变。因此,如果刷新页面的速度快于此,则无法获得新的页面。

(…啊,好吧,我想这并不能阻止机器人恢复旧的饼干并把它传给你。不过,也许在某个地方还是有解决方案的。)

停止所有的机器人将是相当困难的,特别是没有使用验证码。我认为您应该从实现各种各样的措施的立场来处理这个问题,使脚本编写人员的生活更加困难。

我相信这是一项可以淘汰其中一些人的措施:

你可以尝试随机化id和类名你的标签与每个响应。这将迫使机器人依赖于重要标签的位置和上下文,这需要一个更复杂的机器人。此外,如果你想在CSS中使用相对或绝对定位,你可以随机化标签的位置。

这种方法最大的缺点是你必须采取措施确保你的CSS文件不是客户端缓存的,因为它当然需要包含随机id &类名。克服这个问题的一种方法是不使用外部CSS文件,而是将带有随机选择器的CSS放在页面的<head></head>部分中。这将允许随机化的CSS与页面的其余部分一起被客户端缓存。

步骤:

(结合了另一张海报和GIF垃圾邮件制造者的想法)

  • 显示整个提供页面为图像,广告副本和所有。

  • 加密URL中的价格。

攻击:

  1. < p > 机器人前往URL查看结帐页面上的价格

    • 将结帐价格标签转换为图像,或

    • 在用户进入订单页面之前应用验证码

    • 李< / ul > < / >
    • < p > 占用带宽

      • 使用图像提供特别优惠,使用HTML的普通优惠
      • 李< / ul > < / >
      • < p > 不计后果的机器人订购

        • 一些特殊的“形象”优惠实际上是正常价格。
        • 李< / ul > < / >
        • < p > RSS刮

          • RSS提要必须通过hashcash或验证码支付

          • 这必须建立在每个请求的基础上。

          • 可以是预付费,例如用户可以输入20个验证码 为200 RSS查找

          • 一旦DDOS威胁被缓解,您就可以 实现offer的电子邮件通知

          • 李< / ul > < / >

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

CAPTCHA的问题在于,当你在Woot上看到垃圾促销时,作为消费者,如果你希望收到你的垃圾包,你就必须迅速采取行动。所以,如果你要使用一种形式的验证码,对客户来说必须非常快。

如果你有一张大图,比如600 x 600,只是一个白色背景和不同颜色或图案的点随机放置在图像上。图像上有一个图像映射。这个映射将有一个链接映射到图像的小块。比如说,10 × 10块。用户只需点击特定类型的圆点即可。对于最终用户来说,这将是快速的,而对于机器人开发人员来说,编写代码有些困难。但对于一个优秀的机器人创造者来说,单凭这一点可能并不难。我会添加加密url。

以前我在开发一个系统,可以对url进行加密。如果这些页面上的每个URL都用随机的IV加密,那么它们对机器人来说都是唯一的。我设计这个是为了迷惑探测机器人。我还没有完成的技术,但我有一个小网站编码,功能在这个庄园。

虽然这些建议并不是一个完整的解决方案,但它们会使构建一个工作机器人变得更加困难,同时仍然易于人类使用。

可能没有好的解决方案,只要这袋垃圾的意外分布只与一个时间点挂钩——因为机器人有足够的时间和资源,以短时间间隔不断撞击网站。

我认为你必须添加一个额外的标准,即机器人不能从它们的一端进行屏幕抓取或操作。例如,在任何时候,有5000人每分钟多次访问页面,寻找这袋垃圾,每秒钟有50个机器人敲打页面。在它出现后的几秒钟内,50个机器人就会把它抢购一空。

因此,您可以添加一个条件,即垃圾首先出现在任何用户的整数IP的模量30是一个随机数,比如17。也许每秒钟都会添加一个随机数,所以这些废话会在30秒内逐步向所有客户端显示。

现在想象一下前几秒钟会发生什么:目前,所有50个机器人都能立即抢购所有垃圾,而人类得到0。在这个方案下,6秒后只有10个机器人通过了,而1000个人类通过了,大部分垃圾都流向了人类。你可以根据用户数量和可用单位调整时间和随机模数来优化间隔。

这不是一个完美的解决方案,但却是一个进步。好处是受益的人要比机器人多得多。有几个缺点,主要是不是每个人在特定的一天都有平等的机会——尽管他们现在没有太多的机会,而且我猜即使没有机器人,大多数人也会被随机拒之门外,除非它们碰巧在正确的时刻刷新。而且,它不会工作在僵尸网络大量的分布式ip。不知道是否有人真的使用僵尸网络只是为了废话。

你的最终目标是让更多的用户购买你的产品。

如果您在一两个小时内释放w00t包,并在一系列IP地址上释放它们,而不是同时将它们释放到任何IP地址,会怎么样呢?

假设你有255袋w00t。1.0.0.0可以在第一分钟购买,2.0.0.0可以在第二分钟购买(可能有2袋w00t可用),等等。

然后,在255分钟之后,你已经为每个人提供了几袋w00t,尽管很可能不是所有255袋w00t都剩下了。

这将真正的攻击限制在拥有>255台计算机的用户,尽管机器人用户可能能够“拥有”分配给他们的IP范围的w00t包。

没有要求你匹配包的IP公平(你肯定应该使用某种类型的MD5 /随机种子的东西)…如果你增量地分配10袋w00t,你只需要确保它在你的人群中均匀地分配。

如果IP不好,那么您可以使用cookie,并排除向未经过cookie的用户提供一袋w00t的用例。

如果您注意到某个特定的IP、cookie或地址范围具有非常大的流量,请按比例在稍后/最后向它们提供w00t包,以便偶尔/稳定/缓慢的访问者在重度/快速/可能的bot用户之前获得机会。

——罗伯特。

让我们把问题转到另一个方向——你让机器人买你想让真人买的东西,如何让机器人有机会买你想让真人买的东西。

有一个随机的机会,一些非显示的html,抓取机器人会认为是真实的情况,但现实的人不会看到(不要忘记,现实的人包括盲人,所以考虑屏幕阅读器等),这通过购买一些非常昂贵的东西(或不进行实际购买,但获得付款细节,让你放在列表上)。

即使机器人切换到“提醒用户”而不是“购买”,如果你能得到足够多的假警报,你可能就能让人们(也许不是所有人,但减少一些诈骗总比没有强)不去打扰它。

我不知道是否有人建议这样做,但与其保留机器人的IP列表,还不如设置一个cookie或会话变量来跟踪机器人呢?下面是一个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
?>

我没有检查语法错误,但您可以理解。

我建议使用基于防火墙的解决方案。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

请注意,此限制将独立应用于每个访问者,因此一个用户滥用网站不会影响其他访问者。

希望这能有所帮助!

您可以通过同时更新RSS和HTML来减少服务器上的负载,这样机器人就不会对您的站点进行屏幕抓取。当然,这给了机器人和购买你的装备的优势。

如果你只接受信用卡支付(可能是这样,也可能不是,但这显示了我的思路),只允许用户每10次使用同一个账户和/或信用卡购买一次BOC。对一个脚本小子来说,搞到一大堆ip很容易,但搞到一大堆信用卡就不那么容易了。正如你所说的,ip很难被禁止,而暂时禁止信用卡应该是在公园里散步。

你可以让每个人都知道限制是什么,或者你可以告诉他们,因为高需求和/或机器人的兴趣,在不具体说明机制的情况下,对购买实施了限制。

在节流期间的每一次购买尝试都可能引发指数级的倒退——你买了一个BOC,在你再次尝试之前,你必须通过10次销售。不管怎样,你还是会在下一次促销时再次尝试,现在你不得不等待20次、40次、80次……

只有在人类用户不太可能在不到10次销售中获得两次BOC的情况下,这才真正有用。适当地调整数字。

根据您想要进入的复杂程度,您可以采取一些解决方案。

这些都是基于IP跟踪,在僵尸网络和云计算下有些崩溃,但应该能挫败绝大多数的僵尸。乔·兰登拥有大量机器人的可能性远远低于他只是运行一个从某处下载的Woot机器人来获取他的垃圾的可能性。

普通的节流

在非常基本、粗略的水平上,您可以在每个时间段限制每个IP的请求。进行一些分析,确定合法用户每小时访问站点的次数不超过X次。将每小时每个IP的请求限制在这个数字上,机器人将不得不大幅降低轮询频率,否则它们将在接下来的58分钟内将自己锁在外面,完全失明。这本身并不能解决机器人问题,但它确实减少了负载,并增加了合法用户尝试该项目的机会。

自适应调节

该解决方案的一种变体可能是实现负载平衡队列,其中最近发出的请求数量与您在队列中的位置相对应。也就是说,如果你一直关闭网站,你的请求优先级就会降低。在高流量的情况下,如垃圾销售袋,这将给合法用户的优势,相对于机器人,他们将有更高的连接优先级,并将更快地返回页面,而机器人继续等待,等待,直到流量下降到足够多,他们的数量上升。

废料验证码

第三,虽然您不想为验证码而烦恼,但在流程的最后,即事务完成之前设置验证码可能不是一个坏主意。在这一点上,人们已经承诺了出售,并且很可能会完成它,即使有轻微的额外烦恼。它可以阻止机器人完成销售,这意味着它们所能做的至少是敲打你的网站,试图尽快提醒人们有关销售的信息。这并不能解决问题,但它确实意味着,目前人类获得销售的机会比机器人大得多。这不是一个解决方案,但它是一种进步。

以上的组合

实施基本的、慷慨的限制来阻止最滥用的机器人,同时考虑到单个公司IP背后的多个合法用户的潜力。截止数字将非常高-你引用了bot攻击你的网站10倍/秒,即216万请求/小时,这显然是高于任何合法使用,即使是最大的公司网络或共享ip。

实现负载平衡队列,这样如果占用的服务器连接和带宽超过自己的份额,就会受到惩罚。这将惩罚共享公司池中的人,但不会阻止他们使用站点,而且他们的违规行为应该远没有您的装瓶者那么可怕,因此他们的惩罚应该不那么严重。

最后,如果您超过了每小时请求的某个阈值(这个阈值可能远远低于“自动断开连接”的截止值),那么就要求用户使用验证码进行验证。

这样,合法使用网站的用户每小时只有84个请求,即使他们非常兴奋,也不会注意到网站速度变慢了。然而,乔·波特发现自己陷入了两难境地。他可以:

  • 吹出他的请求配额与他当前的行为,并不能访问网站,
  • 请求足够不吹请求配额,这给了他在较低的流量水平的实时信息,但导致他在高流量时间的请求之间有大量的延迟,这严重损害了他在库存耗尽之前完成销售的能力,
  • 请求比一般用户更多的请求,并最终陷入验证码后面,
  • 请求不超过一般用户,因此对一般用户没有优势。

只有滥用的用户才会受到服务降级或复杂性增加的影响。合法用户不会注意到任何变化,除了他们更容易购买他们的垃圾包。

齿顶高

以远低于注册用户的速率限制未注册用户的请求。这样,机器人所有者就必须通过一个经过身份验证的帐户来运行机器人,以通过应该是相对严格的节流率。

然后,有创造力的装瓶者将注册多个用户id,并使用这些id来实现他们想要的查询率;您可以通过将给定时间段内来自同一IP的任何ID视为相同的ID,并接受共享节流来解决这个问题。

这使得装瓶商别无选择,只能运行一个机器人网络,每个IP一个机器人,每个机器人注册一个Woot账户。不幸的是,这实际上无法与大量未关联的合法用户区分开来。

您可以将此策略与上述一种或多种策略结合使用,目的是为没有滥用使用模式的注册用户提供最佳服务,同时根据他们的状态(匿名或已注册)以及由流量指标决定的滥用程度逐步惩罚其他用户,包括注册用户和未注册用户。

这总是很困难,我为你避免使用验证码的愿望鼓掌。我建议首先根据他们的行为来阻止他们,你可以通过HTTP请求来确定。看看这个被称为坏的行为的工具,在我在几个网站上使用它的这一年里,它还没有阻止一个真正的人。大多数机器人都不能很好地伪装成一个网络浏览器。我还推荐使用项目蜜罐API。

其次,随机更改表单,包括标签。这不是为了愚弄机器人,这是为了让你发现他们的IP地址/代理。xx次搞砸条目的东西应该在这个列表上。

最后,如果你发现自己处于一个必须使用某种人工验证过程的位置,可以尝试这样的方法:

[ image of a pig ]


The image above is a: [ ] dog  [ ] house [ ] pig

这对人类来说不会很烦人。

简而言之,你的问题没有“一个”解决方案,不要期望100%的成功。把你的目标设定为把烦恼变成无聊的咆哮,你应该能很快做到。

我的第一个想法是,你说机器人正在抓取你的网页,这意味着他们只抓取HTML内容。因此,让您的订单屏幕验证(从http-logs),报价相关的图形是从bot加载的

开发一个首页组件和购物车,它们不能在浏览器中本机运行。如果你使用Flex/Flash或Silverlight之类的东西,就很难抓取,而且你可以完全控制服务器通信,因此可以完全屏蔽脚本编写者的内容。

只有当机器人用户用无效的信用卡付款时,这才会成为问题。那么,一个非技术的解决方案如何?

只要他们的付款是有效的,就将机器人用户视为普通用户,并确保你有足够的库存来满足总需求。

结果是:销量增加。你做生意是为了赚钱,对吧?

为了保证只向没有脚本的人销售商品,您能否检测到在首页上显示的商品和下达的订单之间不人道的快速响应?这完全改变了延迟策略,而不是人为地通过0.5秒的延迟来限制每个人,而是尽可能快地允许请求,并打击明显是超人的机器人:)

用户点击和做出决定的速度有一些物理限制,通过检测所有请求已经通过(而不是故意减慢所有交互),你不会影响非脚本人类的性能。

如果只使用验证码一些的时间是可接受的,你可以将延迟时间增加到fast-human(而不是superhuman),如果有人点击非常快,就要求确认验证码。类似于一些网站要求验证码确认,如果有人快速发布多个帖子。

遗憾的是,我不知道有什么好方法来阻止你的产品列表的屏幕抓取:(

我只是想知道有没有简单的解决办法。

我假设表明垃圾销售的消息是通过文本发布的,这就是刮刮器寻找的信息。

如果你用图片来代替广告呢?这样做可能会带来一些设计问题,但它们可以被克服,并可能成为一些巧妙创意的动力。

Issue #1
必须有一些设计空间专门用于图像。(想耍点花招吗?通过这个插槽旋转一个本地广告。当然,图像的名称需要是静态的,以避免给刮刀的气味。这是一个永远不用担心广告盲目性的位置…)

问题#2
RSS。我不确定是否每个人都可以在他们的提要阅读器中查看图像。如果有足够多的用户可以这样做,那么您可以开始发送包含图像的每日提要更新。你可以在大多数日子里发送任何你想要的杂七杂四的东西,然后根据需要将其转换为你的垃圾销售警报

我不知道……他们会不会只是编程让他们的机器人在每次feed项目出去的时候都攻击你的网站?

其他问题吗?可能很多。也许这将有助于头脑风暴。

保重,
布莱恩< / p >

以下是你可以做的一些合理假设:

  • 任何自动化解决方案都可能被打破。
  • 使网站完全需要人工输入(如CAPTCHA)将大大增加登录/退房等的难度。
  • 你有有限数量的卷心菜绷带出售。
  • 您可以通过客户端cookie跟踪用户会话。
  • 你在这里面对的不是极端顽固的罪犯;这些人只是技术人员,他们在违反法律,而不是违反法律。通过机器人成功订购的订单将被送到用户家中,而不太可能是第三方邮件投递。

解决方案不是技术上的。这是一个政策问题。

  • 在web服务器上记录所有客户端会话id。
  • 制定“限制机器人”政策;比如,每X秒刮一次屏幕,让使用普通浏览器的用户能够点击刷新。任何被发现超过这个限制的用户都不会被开除。
  • 接下来,向已知的机器人所有者发送一堆leakfrog。

以下是我的做法:

  1. 要求所有竞标者为袋垃圾销售注册网站。
  2. 当你想开始销售时,在你的主页上发布“BOC销售即将开始,检查你的电子邮件,看看你是否有资格”。
  3. 向随机选择的注册玩家发出邀请,并在销售开始时提供该特定销售的唯一url。
  4. 确保每个销售活动使用的URL不同。
  5. 调整随机选择邀请算法拉下频繁赢家的资格,基于信用卡用于购买,贝宝帐户,或送货地址。

这可以阻止机器人,因为你的主页只显示未决的BOC事件。机器人在没有收到邮件的情况下无法访问URL,也不能保证他们会收到。

如果你担心销售影响,你也可以通过为每笔销售赠送一到两个BOC来激励参与者。如果你在给定的时间间隔内没有看到足够的宣传,你会自动邮寄额外的注册用户,增加每个宣传的参与者池。

中提琴。公平的竞争环境,没有大量的启发式和网络流量分析。系统仍然可以通过设置大量电子邮件帐户的人来游戏,但通过CC#, paypal帐户,送货地址来调整参与者选择标准可以缓解这一点。

首先,不要试图用技术来打败技术。

你的问题:

  1. 网站的可用性
  2. 列出使网站令人兴奋和有趣的内容
  3. 由脚本导致的服务器负载。

你的目标:

  1. 保持网站运行的速度不被机器人减慢。
  2. 将道具卖给非脚本人。
  3. 不要让“正常”用户完成任何任务来证明他们是人类。

目标#1:保持网站运行的速度不被机器人减慢。

这其实很简单。让其他人托管页面。首页不是托管在服务器上,而是由Amazon S3 / Akamai托管页面。无论如何,页面的大部分都是“静态的”。每5分钟左右重新生成页面,以刷新更动态的项目。(如果你想的话,可以每1分钟重新生成一次)。但是现在这些机器人攻击的不是你的服务器,而是Akamai的CDN,它当然可以承担负载。

当然,RSS订阅也可以这样做。没有理由其他服务不能为你承担带宽/负载的冲击。在相关的说明中,所有的图像都由Akamai等提供。为什么要承担这个责任?

目标#2:将道具卖给非脚本人员

我同意其他人的意见,让脚本没有真正的优势。然而,编写脚本也是一个热情的客户的标志,所以你也不想成为一个*洞。

所以我会说,让他们购买,但让他们支付一个膨胀的金额(或者更好),只是放慢他们的速度,这样其他人就有机会了。

所以每当用户访问网站时,就会以29.99美元的价格提供这袋垃圾,并有一个计时器以随机速度降低或提高价格。有一个图像或其他指标,告诉人们如果他们有耐心,价格是否会下降。

用户有一个“立即购买”按钮,当他们看到价格/#商品是他们想要的时,他们就会点击这个按钮。

例子:

用户:

  • 0秒$29.99(1项)图像 说:“等待一个更低的价格!”李< / >
  • 7秒$31.99(1项)图像 说:“等待一个更低的价格!”李< / >
  • 13秒$27.99(1项)图像 说:“我打赌你能做得更好!”李< / >
  • 16秒$1.99(0项)图像说:“你 你会傻到付钱给我们吗 没有什么!”李< / >
  • 21秒$4.99(两项)图像 说:“越来越好了!”李< / >
  • 24秒$4.99 (tres itemos)图像 他说:“没有比这更好的了 那!”李< / >
  • 26秒$8.99(2项)图像 说:“我打赌你能做得更好!”李< / >

重复……

在一个逐渐收紧的周期中,正确的“$4.99 (tres itemos)”会显示出来

如果机器人点击刷新,循环就会重新开始。如果用户错过并选择了错误的道具/价格,你便需要决定是否让他们以该价格购买游戏。

例如,如果他们“过度消费”,他们为3件物品支付24.99美元,woot只会向他们收取4.99美元,然后在下次woot购买时提供20美元的优惠券。

目标#3:不要让“普通”用户完成任何任务来证明他们是人类。

你在这里犯了一个逻辑谬误。你假设任何图灵测试(http://en.wikipedia.org/wiki/Turing_test)都是恼人的。这不是真的!

以下是一些建议:

  1. 创造游戏。玩游戏的奖励是下次订购时获得5美元的折扣券。
  2. 配对2个随机用户,让他们互相聊天。每个用户被要求回答另一个用户两个问题:“问你的头发是什么颜色?”和“你下周末打算做什么?”一些用户会与一个非常随机的句子生成器配对。然后,每个用户都会被问及另一个用户是否是人类。如果一个用户说woot随机句子生成器是人类,那么回答“不,我不是,可能你也是来自火星。”你想再试一次吗?”
  3. 简单的flash游戏,需要用户机动通过障碍课程,以获得折扣券。
  4. 问他们在哪个城市。反向地理编码ip地址,看看他们是否接近正确。
  5. 问一些愚蠢的问题——“你认为约翰·麦凯恩是一位伟大的总统吗?”“你驾照上的照片是谁的?”

只问三次,因为你真正想做的是放慢脚本节奏。

那么ASP.net AJAX控件工具箱中的NoBot控件呢?

它做了一些自动javascript请求和计时技巧,以防止机器人在没有用户交互的情况下访问网站。

抱歉,如果这不符合某些要求,我只需要调用
tl;博士> D < / p >

将页面的某些部分转换为图像,这样机器人就无法理解它们。

例如,创建整数0-9、美元符号和小数点的小图像。当页面加载时将图像缓存到客户端计算机上…然后显示价格使用通过运行服务器端代码选择的图像。大多数人类用户不会注意到其中的差别,机器人也不知道任何商品的价格。

作为一个长期的WOOTer,我的看法

我很高兴在订购时有一个验证码,仅为BOC打开。我想大多数观众都会同意。此外,99.9%的情况下你甚至没有进入订单界面,因为它卖得太快了,所以几乎没有人知道!!

如果你让验证码成为一个非常难的数学问题,我终于可以向我妈妈解释这么多年学习数学的实际好处了。

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

所以问题似乎是:机器人想要他们的“一袋垃圾”,因为它有很高的感知价值,以较低的感知价格。有时候你提供这个道具,机器人就会潜伏,等着看它是否可用,然后它们就会购买这个道具。

因为看起来机器人所有者正在赚钱(或潜在地赚钱),诀窍是通过鼓励他们购买垃圾来让他们无利可图。

首先,总是提供“bag 'o crap”。

其次,确保那些废话通常都是废话。

第三,频繁地轮换垃圾。

简单的,不是吗?

你需要一个永久的“为什么我们的垃圾有时是垃圾?”链接,以向人类解释发生了什么。

当机器人看到有垃圾并且自动购买垃圾时,接收者会因为他们花了10美元买了一根坏牙签而非常沮丧。然后是一个空垃圾袋。然后是你鞋底的泥土。

如果他们在相对较短的时间内购买了足够多的这些垃圾(并且你到处都有大量的免责声明来解释你为什么要这么做),他们将会在你的“垃圾”上损失一大笔钱。即使是他们的人为干预(检查以确保这些垃圾不是垃圾)也可能失败,如果你经常轮换这些垃圾的话。见鬼,也许机器人会注意到,不会购买任何在轮换时间过短的东西,但这意味着人类会购买非垃圾的东西。

见鬼,你的老客户可能会很开心,因为你可以把这变成一个巨大的营销胜利。开始发布“垃圾”鲤鱼卖了多少。人们会回来看看机器人被咬得有多厉害。

更新:我预计你可能会接到一些人抱怨的电话。我不认为你能完全停止。然而,如果这杀死了机器人,你总是可以停止它,并在以后重新启动它。

  1. 限定。将页面浏览量限制在每秒1次不会打扰人类用户。
  2. 通过JavaScript链接。简单的机器人不喜欢这个。 至于可用性,统计数据显示,不到1%的用户不使用JS。 2 a。以上的硬核版本。Flash中的链接。李< / >
  3. 参数存储在会话,而不是在查询字符串。大多数机器人是无状态的。

从没想过我会推荐闪光灯,但是闪光灯呢?不管是不是交易时间,让服务器发送异步加密内容到flash文件信号。只要响应是相同大小的交易或没有交易,机器人就不能分辨它是哪一个。

在更一般的层面上,您需要关注人类和浏览器拥有的资源,而脚本机器人没有,并利用对人类/浏览器来说容易而对机器人来说很难的东西。验证码显然是一个简单的尝试,但不适合你的网站,因为你说。Flash将淘汰大量的机器人,只留下驱动真正浏览器的(较慢的)机器人。解决方案可能比验证码简单得多,如果它只需要用户点击正确的位置。

利用人类的大规模并行图像处理能力!

让浏览网站变得昂贵。

没有办法,我知道,可以保持一个机器人出你的网站。我甚至知道一种服务,有人为你扫描网站。你会怎么处理?

对于机器人来说,最糟糕的事情是,当站点发生变化时。过了一段时间,让机器人继续运行会变得昂贵或无聊。你的网站上可能有更新,看起来像一个新产品,但实际上不是。如果你的更新不规律且不可预测,那么对于机器人来说,事情就会变得非常困难。

禁用IP可能是一种对策,只要它是一个已知的IP。违法者需要使用代理。我所知道的代理工作得很好,但会大大减慢您的速度。

我的想法(我还没有检查所有其他的,所以我不知道它是否新颖)

处理蜂群:

  1. 将每天的头版内容转换为一个flash/flex对象。

    • 是的,有些人会抱怨,但我们在这里寻找的是常见情况,而不是理想情况。
    • 你还应该随机化flash对象的名称,这样它们就不会出现任何可预测的名称模式。
    • 李< / ul > < / >
    • 使用Akamai或其他CDN,提前将这个flash对象部署到外部世界。Akamai生成的url看起来是随机的,因此很难预测。

    • 当有新的促销活动时,你只需要在本地更改URL,以引用Akamai的适当对象,人们就会从他们那里获取flash对象,以发现该交易是否是BoC。

一天结束-你现在有Akamai处理你的午夜交通蜂群

处理购车事宜

  1. 你创建的每一个flash对象都可以有很多很多的内容隐藏在里面——图像、链接、任意的id,包括在成千上万的地方的“一袋垃圾”。你应该能够混淆闪光以及。
  2. 当闪光对象“启动”时,人们就会开始攻击它。但是有太多的假阳性,一个简单的字符串扫描是无用的-他们将不得不模拟本地运行闪存。
  3. 但是flash不写入文本。它能画出线条和形状。不同颜色的形状,都与计时器相连,使它们在不同的时间出现和消失。
    • 如果你看过科尔伯特报告,你就知道它的介绍用了几百个词来描述科尔伯特。想象在你的介绍中也会出现这样的内容,其中总是会包含Bag O Crap。
    • 现在,想象一下,介绍需要任意的时间——有时几秒钟,有时长达一分钟或更长时间(让它变得有趣)。
    • 与此同时,“Bag O Crap”不断出现,但再次明显地作为介绍的一部分。
    • 最后,当天的实际交易被显示出来,带有活跃的“微光”效果,使得画布上的任何单个快照都难以显示实际的产品名称。这是漂浮在一个动画背景,仍然说“袋O屎”,并不断在运动
    • 同样,所有这些都是用线条和形状处理的,而不是用文本字符串
    • 李< / ul > < / >

最终的结果是——你的黑客被迫拍摄交易的大量图像快照,弄清楚如何分离所有的假阳性和识别实际交易。与此同时,人类只是看着它,由于眼睛疲劳和我们填补文本空白的能力,我们可以原原本本地阅读交易。

这不会永远有效,但会在一段时间内有效。

另一个想法是简单地限制人们购买中行,除非他们以前用该账户购买过东西,并且永远不让他们再购买中行。

我同意上面的海报,他说有时卖的真的是一袋垃圾。

你似乎已经提出了一种商业模式,它受到你试图交付它的技术的极大限制。然而,像大多数有技术头脑的人一样(不是批评,毕竟这是这个网站的目的),你正试图提出一个技术解决方案。但这是一个商业问题。这是由技术上的失败引起的,但这并不意味着技术就是答案。任何人提出的大多数解决方案(有很多选择)最终都会被那些决心“自动购买”(因为缺乏更好的简短描述)你的“一袋垃圾”的人所绕过。

恕我直言,你问了错误的人错误的问题,你将在错误的解决方案上浪费大量的时间和资源。

  1. 通过IP或其他机制识别机器人。

  2. 总是把那些被识别为机器人的页面放在正常的首页。

被误识别为机器人的真人将得不到这些优惠,但他们也不会注意到。

机器人所有者不会意识到你已经识别了他们,所以他们会停止改编脚本。

我的解决方案是市场变革和技术变革的结合。

目前,销售垃圾促销袋部分的技术方面被处理为正常的woot销售。促销开始了,人们争相购买,所有的商品都卖光了。用于日常销售的相同统计图表都是用过的垃圾销售。

这里涉及到几个市场目标:

  • 让客户每天访问网站一次(促进购买)。看到一袋垃圾销售的可能性是原因/奖励。
  • 网络/病毒式传播/八卦效应,当客户看到一袋垃圾正在促销时,他们会即时消息/电子邮件/打电话给他们的朋友。
  • 还有一种我称之为普遍的“善意”。Woot是一个非常酷的地方,因为它偶尔会以惊人的销量奖励客户(包括平板电视在内的一袋垃圾)……而且是以“先到先得”的公平方式进行的。

前两个似乎是最重要的。纯粹的访客数量会影响正常交易的销售速度(或销售一空)。传统上,新客户主要是通过口口相传来吸引的,让客户把自己的朋友推荐到woot.com是一种胜利。

所以…我的解决方案是将促销活动的递送方式改为更多的抽奖方式。

偶尔用户可以做一些有趣的事情,看看他们是否有资格得到一袋垃圾。有趣的内容可以是类似“punch The monkey”或Orbitz迷你看球游戏、棒球或曲棍球的愚蠢flash游戏。这里的目标是机器人无法编写脚本的游戏,因此需要相当谨慎。我们的目标也不仅仅是给游戏赢家一袋垃圾……但对所有游戏玩家来说。

游戏的技术核心是在游戏结束时向服务器发出请求,服务器会进行“即时抽奖”,以确定用户是否赢得了一袋垃圾销售机会。服务器请求需要包含游戏本身计算出来的东西(粗略地说就是“散列现金”……一个复杂的,消耗CPU周期的计算,希望是一个难以再现的)。这是为了防止机器人在查询彩票服务器/服务时重复输入彩票。

游戏本身也会随着时间而改变。你可以为万圣节、圣诞节、情人节、复活节等制作特殊事件游戏。还有许多有趣的营销理念可以与woot的“wooiness”相匹配。

如果玩家获胜,他们可以购买N袋垃圾(在限定时间内)……但他们也可以向N个朋友发送限时邀请,购买一袋垃圾(24小时有效)。这提供了一个超强的网络效应…顾客肯定会告诉他们的朋友。或者你也可以这样做“买一送一”…让顾客最多购买N个,但每隔一秒就会有一个寄给朋友。这里的关键是让网络/八卦的影响成为一个完整的部分……帮助客户向世界讲述woot的美妙。

促销材料周围袋垃圾销售概念也将需要修改。一袋垃圾多快卖完的图表已经无关紧要了。比如每个月人们有多少次机会购买。有多少人告诉他们的朋友。材料应该微妙地强调这一点,每天去拜访是一个好主意。

你也可以宣传为什么一袋垃圾的销售正在改变。尤其是你免费雇佣了最烂的顾问。

老实说,我认为最好的解决方案是在Woot-Off期间只对登录用户可见,并限制每个登录用户每500毫秒左右刷新一次主页。(或者在Woot-Off期间只让未经认证的用户看到物品的图片,并确保你不总是使用相同的图片。)我认为Woot用户会愿意接受这一点,如果你将其作为一种帮助他们获得“奶油碗”的方法出售,你也可以指出这有助于他们更快地结账。其他任何东西——甚至使用验证码——都受制于典型的军备竞赛。

构建一个更好的机器人

市场告诉你一些事情。他们想要那袋垃圾。所以与其与脚本斗争(RIAA vs文件共享任何人?)构建一个更好的机器人。

为每个人提供一个安装的应用程序,它与脚本kidide可以组合的任何东西一样好,甚至更好。用户安装你的品牌的应用程序和每次提供的垃圾包。应用程序会自动尝试购买。如果错过了当前的b-o-c,应用程序就有一张“门票”,让它有更好的机会进行下一次b-o-c销售。因此,如果用户滚动自己的脚本,他们就无法获得下一个b-o-c销售的“门票”,而官方应用程序的用户则可以。

在b-o-c销售之间,应用程序可以显示当前出售的物品。见鬼,让用户可以告诉woot应用程序寻找“记忆棒”

当官方的woot b-o-c+脚本应用程序一样好或不好时,谁会构建自己的脚本?

此外,woot还有另一种与客户联系的方式。

你的客户告诉你他们想要什么。

让用户在原价和更高的价格之间做出选择。 你必须找到某种方法,将按钮与它们各自的价格联系起来——颜色、位置,也许还有按钮的“情感内涵”——这很难通过编程来确定,但只需要用户将按钮与价格联系起来。 对用户来说简单,直观,没有麻烦,但对脚本编写者来说困难,更重要的是,有风险——特别是如果你改变了关联的方法

我同意OP在这里-请不要验证码-这不是一个非常woot的做事方式。

首先设置一些机器人陷阱。我会在主页上更经常地提到BOC,让机器人看起来不智能,所以每次措辞都不同。“中行投诉上升!”所以扫描关键词的机器人会被困住。

然而,我认为真正的问题是双重的,首先是你需要解决的性能问题,今天是机器人造成了一个问题,但它向我表明,有一个性能问题需要解决。

其次,这是一个商业机会,可以把一些真正的垃圾转化为利润。所以我将保持整体woot风格并声明“我们检查机器人”。如果我们认为你是机器人,你就会得到一盒垃圾。”

机器人检查将在销售完成后的某个时间离线完成,使用机器人陷阱,IP号码,cookie,会话,浏览器字符串等。对你获得的购买者数据做一些认真的分析,以决定谁得到了废话。如果你决定发布垃圾,那么你就可以把一些正常的垃圾卖给别人。

一些想法:

  1. 很简单:不要把它命名为“随机废话”。每次都要更改物品的名称,这样机器人就很难识别它了。他们可能仍然会寻找1美元的商品,在这种情况下,我建议偶尔卖几分钟1美元的口香糖。5美元的运费应该值得你这么做。

  2. 更难的是:不要让用户做任何额外的事情——让用户的计算机做一些额外的事情。编写一个JavaScript函数,使用大量的处理能力执行密集的计算(比如,1000万分之一素数),并让用户的计算机计算该值并在接受订单之前将其传回(甚至可能创建“place order”URL)。改变每个BoC的函数,这样机器人就不能预先计算和缓存结果(但你可以)。计算开销可能会减慢机器人的速度,让它们远离你的麻烦——如果没有别的,它会减慢对服务器的攻击,让它们喘一口气。您还可以随机改变计算的深度(1000万分之一质数和1亿分之一质数),这样订购过程就不再严格地遵循先到先得的原则,并避免使用速度较慢的计算机来惩罚客户。

    • E
    • 李< / ul > < / >

如果你愿意让javascript成为强制性的,你可以使用hashcash方案来要求,例如,每个请求大约30秒的客户端计算。(当然,这在iPhone上可能是5分钟,在30台电脑组成的僵尸网络上可能是1秒:这是一个重大缺陷。)

您还可以通过使用(模糊的)javascript或(gag) flash生成页面来增加抓取的难度。

你也可以用不可见的(通过CSS和javascript)随机垃圾链接来寻找机器人。

你可以检测“类似机器人”的IP地址(通过速率和访问蜜罐链接),并将它们重定向到一个特殊的服务器(例如,一个额外的CC验证,如“由visa验证”-或只是一个验证码。)

但实际上,这是一场军备竞赛。:)你很可能最终不得不升级到验证码之外。

这让我想到:为什么不从先到先得的模式转变为抽签模式呢?在这种模式下,机器人对真正的购物者没有那么大的优势。

好吧,我有几个问题,而不是一个答案,因为我没有技术经验,不知道它是否可以工作或有帮助。

我们的目标是:
.

1.
.
. 2. 保持网站运行的速度不被机器人减慢 3.不要让“正常”用户完成任何任务来证明他们是人类。

我的问题是:
-。Flash应用程序、Java applet、Silverlight或类似的应用程序是否能够降低屏幕抓取的难度,从而减少机器人的影响?< br > 我很好奇这些是否像典型的javascript/html一样对外部操作开放。 虽然它不是web开发的标准,从SEO的角度来看可能并不“好”,但如果你有数百万用户,搜索可见性似乎不是你的问题。我相信其中任何一个都可以提供一个非常漂亮的界面,这样你的人就不会被设计吓跑了

-。你能把你所有的信息放在一张图片里吗?我也从未见过你所提到的woot部分,但我的建议是将人类需要知道的任何文本放在人类友好的图像中,而不是机器人友好的文本框中。

哦,还有在其他一些回答中提到的一些事情。不要错过你拥有的大好机会: 你有很多机器人的需求,那些拥有机器人的人真的会买,对吧?你还想要他们的钱吗?(因为如果没有,我就接受它)

这些拥有机器人的人有其他选择从你这里购买吗?把你的垃圾袋子拿出来。

为机器人建立一个woot子网站,让脚本写手获得很多乐趣,并为此付钱。卖给他们垃圾,让他们挑战其他编剧。这是一个完全不同的市场。

如果他们有另一种选择,可以赢得一些东西,并获得吹嘘的权利,他们可能不太倾向于殴打小老人。

如果这个答案已经提交,请原谅。有很多答案要试着去阅读。理解它们。

为什么你不能每隔一段时间改变你的采购API一次呢?难道这对人类用户来说不是完全透明的,并几乎杀死了大多数机器人购买者吗?

一种实现方法是更改用户在点击“I Want One”按钮后必须填写并提交的字段名称。你一年卖出多少次中行?不经常。因此,每次BOC发售时,编写、测试和准备使用不同的采购API不会是一个巨大的编程负担。

只要确保使用旧的和不正确的API的机器人不会使您的服务器瘫痪。每次也可以在不同的服务器上托管BOC购买API。这样,机器人就可以关闭一个服务器,而我们人类BOC购买者实际上并没有使用它。

如果我理解正确的话,你们最大的问题是屏幕抓取,而不是自动购买本身。

如果是这样,最有效的步骤是通过随机编码页面来击败屏幕抓取,这样它看起来是相同的(某种程度上),但在代码级别上总是不同的。(使用十六进制编码,Java编码,图片,改变周边代码结构…)

这将迫使他们不断重写抓取代码,从而使他们自动购买你的“垃圾”变得更加昂贵。如果他们能做到的话。他们可能会继续访问你的网站一段时间,直到他们意识到他们不能从中获得任何东西,然后放弃它。

把机器人搞得一团糟的缺点是,它也会把搜索引擎爬虫搞得一团糟。

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

只是一个旁注:在我看来,问题是,你的用户期望的行为非常类似于一个机器人(大波来,未经认证,点击每个按钮:)),所以验证码可能是唯一能够识别它的图灵测试:))。

你应该有一些最常购买中国银行的用户的记录,为什么不封杀这些账户或其他什么。当然,合法用户在这个过程中会被禁止,但你是一家提供产品的企业,如果你的产品被一群用户滥用,你有权拒绝向他们提供服务。你有很多关于你的用户的信息,包括paypal和银行账户,你可以禁止这些账户,迫使机器人用户获得新账户。当然,我可以想出一个一直购买BOC的脚本,或者直接从网上下载,但我的道德水平比这高。我从来没有真正成功地购买过BOC,我知道那些希望获得BOC以获得优惠的合法用户的挫败感。也许与其每隔一段时间提供一个BOC作为一个单独的项目,你可以每天将它提供给随机用户。当他们收到一个物品时,他们会收到一个小纸条和一个额外的物品,说他们也收到了一个BOC。那么,人们获得BOC的唯一方法是,他们合法购买了只有真正的人类才会想要的东西。除了你合法购买的东西,没有什么比买一个咖啡机或其他东西,还能收到一个42英寸的电视或其他东西更好的了。我认为大多数脚本kiddies将不再对你的网站感兴趣,如果为了得到一个BOC,他们还必须承诺购买超过10美元。

前期事项:

我不懂剧本; 我还没读到其他的评论。< / p >

我今早在伍特的描述中无意中发现了这个。我认为来自woot网站的一个中等用户(两次手动购买boc)的一些评论可能会有所帮助。

Woot处于一个独特的位置,它是一个商业网站和忠实用户的目的地,我理解这种平衡的微妙之处。但就我个人而言,我觉得你对蹩脚验证码(“蹩脚验证码”——我怀疑我是不是第一个说这个笑话的人)对用户的“负面用户影响”的担忧是言过其实了。作为用户,我很乐意证明我是人。我相信Woot会让这个过程变得有趣,并将其整合到整体体验中。

这会导致假定的“军备竞赛”吗?我不知道,但这能帮上忙。例如,如果购买的关键信息包含在产品图像中或暗示在产品描述中(每次都以不同的方式),那么脚本所能做的最好的事情就是在检测到c字时打开购买页面。实际上,我认为这是好的:你仍然需要在线,先到先得仍然适用——Wootalyzer和类似的工具只是增加意识,而不是在我睡觉或工作时自动购买。

祝你好运,继续努力。

JGM

把RSA密钥卖给每个用户怎么样:)嘿,如果他们能在《魔兽世界》中做到这一点,你们应该也能做到。

我希望我的答案是BoC;)

为什么不让首页只是一个图像映射图形(所有一张图片没有标签,标签等)?人类在几乎任何设备上都能轻松阅读和理解,但机器人却无法进行询问。从本质上讲,整个首页都是一个验证码。

你今天在灯上赚的钱足够支付思科的验证码程序了!!我们在购买演唱会门票和其他东西时都习惯了它们。这看起来很公平。今天的抽签方式让一些人感到不安,并提出了关于抽签或抽签的问题。我相信你在尝试之前已经调查过了,但这并不是一个有趣的购买boc的方式……这让所有的兴奋都消失了!

首先获得BOC或优秀的产品会吸引人们到Woot。如果没有理由在等待随机的BOC出现的同时购买大量你不需要的东西,销量就会下降。验证码可能是打败这些人的唯一方法,同时还能保持Woot的兴奋感。

我是上次第一个让它订购BOC的人之一,我的第一个订单被丢弃了,第二个订单通过了,但后来被从我的账户中扣除了。我很沮丧。我离开了Woot,没有像过去那样购买物品。我愿意今天再试一次,就这样。如果没有验证码,我估计以后也不会这么做了。

有许多网站试图成为Woot那样的网站。他们当然达不到你的水平。我发现自己阅读产品描述,不是因为我想要这个产品,而是为了好玩而查看。我不希望看到有人拿着一个更公平的项目进来,然后拿走你的大部分业务。

这只是我的意见。因为我是一名护士,所以我对机器人和电脑几乎一无所知。但我的建议是升级到更高的级别…带着机器人的人只需要和我们其他人站在一起,这就是它应该有的方式:) Lori < / p >

对于每个人的验证码,为什么不使用谷歌解决方案,只需要来自你怀疑是机器人的ip的验证码,甚至只是敲打网站的用户?我敢肯定,如果他们一直在敲打网站,那么在他们购买时要求验证码并不是那么糟糕,这和熬夜并反复按F5差不多。或者在敲打时需要定期验证码,比如每刷新100次(可能更小?)左右,以阻止警报机器人工作。您需要某种CAPTCHA来防止机器人,但您还需要考虑到真实用户会像机器人一样行事的事实。

作为Woot.com的长期用户(4年)和几袋垃圾的购买者,在我的车库中有许多其他的物品,似乎解决方案应该是Woot整体主题的一部分。

使用验证码,但要幽默。就像100万美元的促销一样,你也可以将自己当成一个人来做游戏。在过去,这使得中行的“售罄”推迟了一段合理的时间,而像我这样的人,则争先恐后地想出一个相当简单但幽默的谜题,输入优惠券代码。

此外,虽然人们不断抱怨服务器错误,但他们不会停止返回。在我看来,购买中行之所以令人兴奋,部分原因在于有无数人都想买。如果服务器抛出一个错误,或者一个奇怪的页面,这表明我是一群试图获得1500个产品中的一个的太多人中的一个。

如果你在构建谜题上投入了足够多的创造力,并且它足够新颖,它就会拖延机器人足够长的时间,给其他人一个机会。在“我想要一个”和购买页面之间放置一个临时页面,这需要一些独特的人类互动,你已经阻止了机器人,直到它们弄清楚需要发生什么。

你没有实现一个无聊的,有时是痛苦的难以阅读的验证码 •你让这个过程变得更有趣, •您已经减少了实际安全购买服务器的负载 •你将培训用户,他们需要“做”一些事情来获得BOC •你将在临时页面阻止机器人,推迟他们的购买,直到大多数人至少有机会尝试并解决有趣但并不太难的谜题 •因为随机是BOC的全部内容,所以随机且不断变化的谜题/任务将更符合BOC的整体基调

随着试验的进行,临时页面背后的技术可能会变得更加先进,可以捕获用于购买页面的随机信息。自

自05年5月31日以来,我已经购买了7个BOC,没有机器人的帮助,也没有任何脚本,除了wootalyzer,我觉得这是一个可以接受的帮助。最好的一个,我没有得到,是Please Please Me BOC。电池也很有趣,但我猜并没有难倒机器人,只是让普通用户感到沮丧。

有时候,技术问题的最佳解决方案并不是更多的技术。

两种解决方案,一种高科技,一种低科技。

首先是高科技:中行的产品在几秒钟内就售罄,因为机器人在最初几毫秒内就得到了其中许多产品。所以与其试图打败机器人,不如卖给他们他们正在扫描的东西:一袋垃圾。当然是毫无价值的垃圾:弯曲的回形针和罗西·奥唐纳(Rosie O'Donnell)被玷污的照片。然后在服务器上有内置的随机延迟,每次几秒钟。随着销售的继续,销售产品的实际价值会增加,而销售价格不会增加。这样,第一批买家(最初几毫秒出现的机器人)将得到价值远低于他们支付价格的东西(棕色洋葱蛋糕?),下一批买家(速度较慢的机器人或速度更快的人类)将得到一些不引人注目但值得购买价格的东西(委托购买?),最后一批买家(几乎所有人)将得到价值高于购买价格的东西(打开香槟?)那台平板电视可能是中行购买的最后一台。

任何等待太久的人都会错过机会,但与此同时,任何购买太快的人也会吃亏。诀窍在于等待一段时间……但不要太多。这里面有一些运气,这是应该的。

低技术含量的解决方案是将中国银行的名称改为人类可以理解但机器人不能理解的名称。酒皮屎?装着臭味的麻袋?与各种商品相邻的拓扑平面?不要重复使用相同的名称,使用稍微不同的图片,并在产品描述中解释实际销售的产品。

对于你的特定问题(而不是一般问题),一个潜在的解决方案是,如果用户想要看到“垃圾”,就要求他们登录。只向恰好登录的用户显示垃圾奖品。所有其他项目都可以对非登录用户保持可见,就像他们一直以来所做的那样。然后你的忠实用户就会优先考虑这些垃圾。

很明显,你必须通知你的用户这一点,也许会通知他们这是为了增加真正的用户发现垃圾的机会。

如果你的具体问题是机器人收集某种特定类型的物品,那么就采取限制性最小的替代方案,只防御这种特定的攻击。这个选项可以防止验证码和您所关心的可使用性问题。

如果机器人登录并开始发送垃圾邮件,您可以强制他们注销并锁定帐户。

如果他们只是为了得到一袋垃圾,他们会很快离开,你的页面不会受到大量的点击。忘掉那些高度技术性的解决方案吧。

2件事:

服务器层解决方案:mod_eveful(如果你使用apache)

http://www.zdziarski.com/projects/mod_evasive/

前端解决方案:反向验证码,或其他非侵入式验证码

http://www.ccs.uottawa.ca/webmaster/reverse-captcha.html

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

使整个该死的页面一个验证码!< br > 有点像芝麻街……

在屏幕上放9个项目,9个HTML表单,9个I WANT ONE按钮 (9只是一天的数字……选择任何你想要的数字,使布局看起来仍然很好。也许12。也许可以自定义一些加载浏览器的分辨率…)

并为每个人把它们打乱 确保BOC必须被“看到”才能知道它是哪一个…当然,这意味着其他8个也必须“只被看到”,以知道他们不是购买的项目 请确保您只使用疯狂的数字来引用页面源代码中幕后的所有内容。 好吧,BOT看到它的BOC时间…但要选择正确的HTML表单提交回处理,这将是一个大胆的猜测

可能没有一个神奇的银弹来照顾机器人,但这些建议的组合可能有助于阻止他们,并将他们减少到一个更容易管理的数量。< br > 如果您对这些建议有任何需要澄清的地方,请告诉我
  • 任何描述该项目的图像都应该总是相同的图像名称(例如"current_item.jpg"),或者应该是一个随机名称,每个请求都会更改。服务器应该知道当前项是什么,并将传递适当的图像。该图像还应该有随机数量的填充,以减少机器人比较图像大小。(可能会更改某种水印,以阻止更复杂的机器人)。
  • 从这些图像中删除ALT文本。这些文本通常是多余的信息,可以在页面的其他地方找到,或者使它们成为通用的alt文本(例如“当前项目图像将在这里”)。
  • 每次出现一袋垃圾时,描述都会改变。它可以(随机地)在一些不同的名称之间旋转:“Random Crap”,“BoC”,“Crappy Crap”等等……
  • Woot还可以以“随机垃圾”价格提供更多道具,或者将价格设置为0.95美元至1.05美元之间的随机金额(为了公平起见,每次垃圾出现时只更改一次价格,而不是针对每个用户)。
  • 价格、描述和其他区分BoC与其他woot的区域可以是图像,而不是文本。
  • 这些字段也可以是Java(不是javaScript)或Flash。虽然依赖于第三方插件,但它会使机器人更难以有用的方式窃取您的站点。
  • 使用图像、Java、Flash和其他技术的组合可能是另一种让机器人更难操作的方法。这将更难管理,因为管理员必须了解许多不同的平台。
  • 还有其他方法可以混淆这些信息。在不影响用户体验的情况下,使用客户端脚本(javascript等)和服务器端混淆(随机图像名称)的组合是最可能的方法。添加一些令人困惑的Java和/或Flash,或类似的东西会让它变得更困难,同时可能对一些用户的影响最小。
  • 将这些策略中的一些与上面提到的策略结合起来:如果一个页面每分钟重新加载超过x次,那么更改图像名称(如果您有上面建议的静态图像名称),或者给他们一个两分钟前的缓存页面。
  • 在用户行为跟踪的后端,你可以做一些非常复杂的事情,可能不需要太多的处理。您可以将该工作卸载到专用服务器,以最小化性能影响。从请求中获取一些数据,并将其发送到可以处理该数据的专用服务器。如果它发现一个可疑的机器人,根据它的行为,它可以发送一个钩子到另一个服务器(前端路由防火墙,服务器,路由器等或后端web或内容服务器),以增加一些额外的安全性给这些用户。可能会为这些用户添加Java applet,或者要求用户提供额外的信息(不要预先填充订单页面中的所有字段,每次随机清空一个不同的字段,等等)。

为什么你们不每次提供中行的时候都改一下名字和图片呢?看最新版本的BOC将成为追求乐趣的一部分。

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

你这条路走得太艰难了。我可能会踢自己,因为我刚刚赢得了一个BOC从网站今天与机器人网站,但只是把随机废话文本验证码在网站主页上。机器人都在寻找文本“随机垃圾”。所以你基本上一开始就避免触发它们。任何用眼睛看的人都会发现上面写着“随机的废话”。

一个相当简单的解决方案是跟踪呈现表单和获得响应之间的时间差:机器人通常只有极短的毫秒响应时间,没有用户可以做到这一点;或者响应时间极长,长达数小时。

这里有一个django代码片段,以及更详细的描述:

验证码的替代方案(无人工交互)

你知道,如果你使用pubsubhubbub发布你的RSS提要,人们就不必一遍又一遍地点击你的网页来查看Woot-off中的下一件事,他们只需要等待它出现在他们的谷歌Reader上。

我有一个解决方案(可能)没有列出(因为我还没有读完这里所有的……)

您可以通过浏览器的User Agent字符串跟踪唯一用户。从本质上讲,通过检查哪些信息是可用的“唯一”,你将能够获得足够的信息来区分不同的人(即使是在相同的IP地址上)。

查看本文由EFF撰写 以及这个网站(也是由EFF),它将“测试”你的唯一基于你的User Agent从浏览器

为了获得更好的唯一性,你可以在唯一性和ip地址的信息位之间进行比较,从而真正得到罪犯/机器人的可能性。


还签出这个pdf来自EFF

使用多个订购按钮(四个或更多)怎么样?文件将它们命名为image1image4,其中三个在视觉上是相同的图像(“不要点击这里”),一个是“点击这里”。

对于每个销售,为每个选项随机分配图像#。让它们相当大,这样用户就不会不小心点错了。图像将是相同的文件大小 一旦IP点击一个按钮,任何按钮,他们被带到适当的网页(订购过程,或“哎呀,你点击了错误的按钮”),并被给予2分钟的超时,从重新访问服务器

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

我可能没有完全理解这个问题,但我想到了这个主意。使用AJAX以固定的间隔绘制和更新动态内容,同时使用刷新故意减慢整个页面的加载速度。

例如,让整个页面在第一次访问时花整整15秒绘制,之后在设定的时间(比如5秒)后使用AJAX自动刷新动态内容。重载整个页面将是一个主要的缺点。页面可能会定期显示新信息(包括广告),但是使用重载重绘整个页面会慢得多。

脚本kiddies可以找出AJAX查询并将其自动化,但是,对来自同一IP的请求进行速率限制也很容易。由于标准人类用户没有从浏览器发起这些请求的典型方法,因此很明显,从同一IP向AJAX URL发起的高速率请求将由某种形式的自动化系统发起。