497

我已经接受了一个答案,但遗憾的是,我相信我们陷入了最初的最坏情况:CAPTCHA 每个人都在购买废话。简短说明:缓存/网络农场无法跟踪点击,任何解决方法(发送非缓存网络信标、写入统一表等)都会比机器人更慢地降低网站速度。可能有来自 Cisco 或类似公司的一些昂贵的硬件可以提供高水平的帮助,但如果每个人都可以进行 CAPTCHA 验证,则很难证明其成本是合理的。稍后我将尝试更完整的解释,并为将来的搜索者清理它(尽管欢迎其他人尝试,因为它是社区 wiki)。

情况

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

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

机器人会在第二次屏幕抓取(和/或扫描我们的 RSS)中猛烈抨击我们的首页数十次,以进行 Random Crap 销售。当他们看到这一点时,它会触发程序的第二阶段登录,点击我想要一个,填写表格,然后购买垃圾。

评估

lc:在使用此方法的 stackoverflow 和其他站点上,它们几乎总是与经过身份验证(登录)的用户打交道,因为正在尝试的任务需要这样做。

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

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

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

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

 

lc 再次:“当然,除非炒作是你营销计划的一部分。” 是的,绝对是。物品出现时的惊喜,以及如果你设法得到一件的兴奋,可能与你最终得到的废话一样重要或更重要。任何消除先到先得的行为都会损害“赢得”垃圾的快感。

 

novatrust:首先,我欢迎我们的新机器人霸主。实际上,我们确实提供 RSSfeeds 以允许 3rd 方应用程序扫描我们的站点以获取产品信息,但不会在主站点 HTML 之前。如果我的解释是正确的,那么您的解决方案确实通过完全牺牲目标 1 来帮助目标 2(性能问题),并且只是放弃机器人将购买大部分废话的事实。我对你的回答投了赞成票,因为你最后一段的悲观主义对我来说是准确的。这里似乎没有灵丹妙药。

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

还有其他方法/想法吗?我的开发人员一直在说“让我们做 CAPTCHA”,但我希望对于所有想要我们的废话的实际人类来说,有更少的侵入性方法。

原始问题

假设您正在销售具有很高感知价值的廉价商品,而您的数量非常有限。没有人确切知道您何时会出售此商品。超过 100 万人定期来看看你在卖什么。

您最终会遇到脚本编写者和机器人试图以编程方式 [a] 找出您何时出售所述物品,并 [b] 确保他们是第一批购买它的人。这很糟糕有两个原因:

  1. 您的网站遭到非人类的猛烈抨击,使所有人的一切都变慢了。
  2. 脚本编写者最终“赢得”了产品,导致常客感到受骗。

一个看似显而易见的解决方案是在下订单之前为您的用户创建一些跳线,但这至少存在三个问题:

  • 用户体验对人类来说很糟糕,因为他们必须破译验证码、挑选猫或解决数学问题。
  • 如果感知到的好处足够高,并且人群足够多,那么一些群体会找到解决任何调整的方法,从而导致军备竞赛。(更简单的调整尤其如此;隐藏的“评论”表单、​​重新排列表单元素、错误标记它们、隐藏的“陷阱”文本都将工作一次,然后需要进行更改以对抗针对此特定表单.)
  • 即使脚本编写者无法“解决”您的调整,也不会阻止他们猛击您的首页,然后发出警报让脚本编写者手动填写订单。鉴于他们从解决 [a] 中获得了优势,他们可能仍然会赢得 [b],因为他们将是第一个到达订单页面的人。此外,1. 仍然会发生,导致服务器错误和每个人的性能下降。

另一种解决方案是监视 IP 访问频率过高,阻止它们进入防火墙,或者以其他方式阻止它们排序。这可以解决 2. 并防止 [b] 但扫描 IP 对性能的影响是巨大的,并且可能会导致像 1. 这样的问题,而不是脚本编写者自己造成的问题。此外,云网络和垃圾邮件僵尸的可能性使得 IP 检查毫无用处。

第三个想法,强制加载订单表格一段时间(比如半秒)可能会减慢快速订单的进度,但同样,脚本编写者仍然是第一个进入的人,只要速度不损害实际用户。

目标

  1. 将项目出售给非脚本人员。
  2. 保持网站以不被机器人减慢的速度运行。
  3. 不要让“普通”用户完成任何任务来证明他们是人类。
4

129 回答 129

241

如何使用 CAPTCHA 实现类似 SO 的功能?

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

如果他们连续 x 次未通过检查(例如,2 或 3 次),则给该 IP 一个超时或其他此类措施。然后在超时结束时,再次将它们转储回检查。


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

至于抓到太多无辜者,您可以在人工检查页面上提出免责声明:“如果太多匿名用户从同一位置查看我们的网站,也可能会出现此页面。我们建议您注册或登录以避免这。” (适当调整措辞。)

此外,X 个人同时从一个 IP 加载相同页面的几率是多少?如果它们很高,那么您的机器人警报可能需要不同的触发机制。


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

让人们打电话似乎是一种愚蠢的措施,但它可以确保在计算机后面的某个地方有人。关键是只有在一个几乎永远不会发生的情况下才设置块,除非它是一个机器人(例如,连续多次失败检查)。然后它强制人机交互——拿起电话。

为了回应让他们给我打电话的评论,这里显然需要权衡取舍。您是否足够担心确保您的用户在打折时能够接听几个电话?如果我非常担心产品会接触到人类用户,我将不得不做出这个决定,也许会在此过程中牺牲我的一小部分时间。

由于您似乎决心不让机器人占上风/抨击您的网站,我相信手机可能是一个不错的选择。由于我没有从您的产品中获利,因此我没有兴趣接听这些电话。但是,如果您分享其中的一些利润,我可能会感兴趣。由于这是您的产品,因此您必须决定您关心的程度并相应地实施。


释放块的其他方法没有那么有效:超时(但他们会在之后再次抨击您的网站,冲洗重复),长时间超时(如果真的是人试图购买您的产品,他们将是 SOL 并因未通过检查而受到惩罚)、电子邮件(很容易由机器人完成)、传真(相同)或蜗牛邮件(花费太长时间)。

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

于 2009-01-16T16:02:02.993 回答
203

你需要想办法让机器人购买价格过高的东西:12 毫米翼形螺母:20 美元。看看有多少机器人在编剧决定你玩它们之前抢购一空。

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

于 2009-02-07T08:55:07.343 回答
164

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

这是我的做法:

  • 记录并识别任何重复击球手。

您不需要在每次点击时记录每个 IP 地址。每 20 次左右只跟踪一次。屡犯者仍会出现在随机的偶尔跟踪中。

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

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

他们不会立即知道他们正在获得一个旧网站。他们将能够刮掉它,以及一切,但他们将不再赢得任何比赛,因为“真正的人”将有 10 分钟的领先优势。

好处:

  • 对用户来说没有麻烦或问题(如验证码)。
  • 在服务器端完全实现。(不依赖 Javascript/Flash)
  • 提供较旧的缓存页面应该比实时页面的性能密集程度低。您实际上可以通过这种方式减少服务器上的负载!

缺点

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

你怎么看?

于 2009-02-07T09:19:27.997 回答
54

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

与其通过让人们识别自己来阻止机器人,我们可以通过让他们难以成功发布帖子或让他们无意中将自己识别为机器人来阻止机器人。这减轻了人们的负担,并使评论表单没有可见的反垃圾邮件措施。

这种技术是我防止此站点上的垃圾邮件程序的方法。有用。这里描述的方法根本不看内容。

其他一些想法:

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

编辑:为了完全清楚,上面 Ned 的文章描述了通过防止 BOT 通过表单提交订单来防止自动购买物品的方法。他的技术对于防止机器人抓取主页以确定何时出售胡萝卜带没有用处。我不确定阻止这是否真的有可能。

关于您对 Ned 策略有效性的评论:是的,他讨论了蜜罐,但我认为这不是他最强的策略。他对SPINNER的讨论是我提到他的文章的最初原因。对不起,我没有在我的原始帖子中说得更清楚:

微调器是一个隐藏字段,用于一些事情:它将许多防止篡改和重放的值散列在一起,并用于隐藏字段名称。微调器是一个 MD5 哈希:

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

以下是您在 WOOT.com 上实现该功能的方法:

每次新商品开始销售时,更改用作散列一部分的“秘密”值。这意味着如果有人要设计一个 BOT 来自动购买物品,它只能在下一个物品开始销售之前工作

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

他讨论的另一个策略是不时更改蜜罐技术(同样,在新产品上市时更改):

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

我想我的总体想法是在每件新商品上市时改变形式设计。或者至少,在新的 BOC 上市时更改它。

这是什么,几次/月?

如果你接受这个答案,你会在下一个到期时给我一个提示吗?:)

于 2009-01-16T16:09:27.003 回答
44

问:您将如何阻止脚本编写者每秒数百次抨击您的网站?
答:你没有。外部代理无法阻止这种行为。

您可以使用大量技术来分析传入的请求,并试探性地尝试确定谁是人类,谁不是人类……但它会失败。最终,如果不是立即。

唯一可行的长期解决方案是改变游戏,使网站不适合机器人,或者对脚本编写者的吸引力降低。

你是怎样做的?好吧,这是一个不同的问题!;-)

...

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

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

运行真实的人对此响应的时间试验,并忽略('哎呀,发生错误,对不起!请再试一次')响应快于(比方说)这个时间的一半。此事件还应该向开发人员发出警报,表明至少有一个机器人已经找出了代码/游戏,因此是时候更改代码/游戏了。

无论如何都要定期更改游戏,即使没有机器人触发它,也只是浪费脚本编写者的时间。最终脚本编写者应该厌倦了游戏并去其他地方......我们希望;-)

最后一个建议:当对您的主页的请求进入时,将其放入队列中并在单独的过程中按顺序响应请求(您可能必须破解/扩展网络服务器才能做到这一点,但它很可能是值得)。如果第一个请求在队列中时来自同一 IP/代理的另一个请求进入,则忽略它。这应该会自动减轻机器人的负担。

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

于 2009-02-07T04:22:32.200 回答
30

我不知道这是多么可行:……继续进攻。

找出机器人正在扫描的数据。当你不卖垃圾时,向他们提供他们正在寻找的数据。以不会打扰或混淆人类用户的方式执行此操作。当机器人触发第二阶段时,他们将登录并填写表格以购买 100 美元的 roombas 而不是 BOC。当然,这是假设机器人不是特别健壮。

另一个想法是在袋子或垃圾销售期间实施随机降价。当你明确表示它只值 20 美元时,谁会花 150 美元买一个随机包或垃圾?除了过分热心的机器人之外,没有人。但是 9 分钟后是 35 美元……然后 17 分钟后是 9 美元。管他呢。

当然,丧尸王也能做出反应。关键是要让他们的错误对他们来说代价高昂(并让他们付钱让你与他们作斗争)。

所有这一切都假设您想激怒一些机器人领主,这可能不是 100% 可取的。

于 2009-02-07T06:58:46.987 回答
22

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

由于看起来机器人所有者正在获利(或可能获利),因此诀窍是通过鼓励他们购买垃圾来使他们无利可图。

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

其次,确保废话通常是废话。

第三,经常轮换垃圾。

很简单,不是吗?

你需要一个永久的“为什么我们的废话有时是废话?” 报价旁边的链接,向人们解释正在发生的事情。

当机器人看到有垃圾并且垃圾被自动购买时,接收者会非常沮丧,因为他们为一根断牙签支付了 10 美元。然后是一个空垃圾袋。然后是鞋底的一些污垢。

如果他们在相对较短的时间内购买了足够多的这种垃圾(并且您到处都有大量的免责声明来解释您为什么这样做),他们将在您的“袋'o废话'。如果您经常旋转废话,即使是他们的人工干预(检查以确保废话不是废话)也可能会失败。哎呀,也许机器人会注意到并且不会购买任何在轮换中时间太短的东西,但这意味着人类会购买非废话。

哎呀,您的常客可能会很开心,以至于您可以将其转化为巨大的营销胜利。开始发布出售了多少“废话”鲤鱼。人们会回来看看机器人被咬的有多厉害。

更新: 我希望你可能会接到一些抱怨的电话。我不认为你可以完全阻止它。但是,如果这会杀死机器人,您可以随时停止它并稍后重新启动它。

于 2009-02-13T08:36:21.850 回答
17
  1. 将项目出售给非脚本人员。

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

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

你可能不想听到这个,但#1 和#3 是互斥的。

在互联网上,没人知道你是条狗

好吧,也没有人知道你是机器人。没有程序化的方式来判断连接的另一端是否有人,而不需要该人做某事。防止脚本/机器人在网络上做事是验证码被发明的全部原因。这并不是一个新的问题,还没有花费大量的精力。如果有更好的方法来做到这一点,一种不会像 CAPTCHA 那样给真实用户带来麻烦,那么每个人都已经在使用它了。

我认为你需要面对这样一个事实,如果你想让机器人远离你的订购页面,一个好的 CAPTCHA 是唯一的方法。如果对您的随机垃圾的需求足够高,以至于人们愿意竭尽全力去获取它,那么合法用户就不会被 CAPTCHA 推迟。

于 2009-02-07T16:56:39.120 回答
13

Woot 用来解决这个问题的方法正在改变游戏规则——从字面上看。当他们展示一个非常受欢迎的商品进行销售时,他们会让用户玩视频游戏来订购它。

这不仅可以成功地对抗机器人(它们可以轻松地对游戏进行微小的更改以避免自动玩家,甚至为每次销售提供一个新游戏),而且它还给用户留下了在减速的同时“赢得”所需物品的印象订购过程。

它仍然很快售罄,但我认为解决方案很好 - 重新评估问题并更改参数导致了一个成功的策略,其中根本不存在严格的技术解决方案。


您的整个商业模式都是基于“先到先得”。您不能做广播电台所做的事情(他们不再让第一个呼叫者成为赢家,而是让第 5 个或第 20 个或第 13 个呼叫者成为赢家) - 它与您的主要功能不匹配。

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

假设您实施了所有这些策略。如果我认为这很重要,我只需让 100 人与我一起工作,我们将构建软件以在我们的 100 台独立计算机上运行,​​并每秒访问您的站点 20 次(每个用户访问之间 5 秒/ cookie/帐户/IP 地址)。

你有两个阶段:

  1. 看首页
  2. 订购

您不能设置验证码阻止#1 - 这会失去真正的客户(“什么?每次我想看到最新的 woot 时我都必须解决验证码?!?”)。

所以我的小组一起看,定时在一起,所以我们每秒大约进行 20 次检查,谁首先看到更改(自动)提醒所有其他人,谁将再次加载首页,点击订单链接,并执行交易(这也可能会自动发生,除非您实施验证码并为每个 wootoff/boc 更改它)。

您可以在 #2 前面放置一个验证码,虽然您不愿意这样做,但这可能是确保即使机器人观看首页,真实用户也能获得产品的唯一方法。

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

首先,摆脱简单的机器人

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

这应该会显着降低您的流量并改变机器人用户使用的策略。

其次,使服务器速度极快。

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

我认为您需要的是自下而上的完全定制的解决方案。

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

Apache、lighthttpd 等都非常灵活,但您运行的是一个单一用途的网站,并且您确实需要能够做比当前服务器能够做的更多的事情(无论是在处理流量方面,还是在适当地打击机器人方面) )。

通过在自定义服务器上提供一个基本上是静态的网页(每 30 秒左右更新一次),您不仅应该能够处理 10 倍的请求和流量(因为服务器除了获取请求和阅读之外什么都不做)从内存到 TCP/IP 缓冲区的页面),但它还可以让您访问可能有助于减慢机器人速度的指标。例如,通过关联 IP 地址,您可以简单地阻止每个 IP 每秒一个以上的连接。人类无法比这更快,即使是使用相同 NATed IP 地址的人也只会偶尔被阻止。您想要做一个慢速阻塞 - 在正式终止会话之前让连接保持一秒钟。这可以馈入防火墙,为特别严重的罪犯提供更长期的阻止。

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

结论

归根结底,您无法通过观看首页来区分人和计算机。您可以在订购步骤停止机器人,但机器人用户仍然具有先发优势,您仍然需要管理大量负载。

您可以为简单的机器人添加块,这将提高标准并减少使用它的人。这可能就足够了。

但是如果不改变你的基本模型,你就不走运了。你能做的最好的就是处理简单的情况,让服务器变得如此之快,普通用户不会注意到,并出售如此多的物品,即使你有几百万个机器人,只要有多少普通用户想要他们就会得到它们.

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

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

即使您将首页设置为验证码以进入订购页面(“此商品的订购按钮是蓝色的,带有粉红色的闪光,位于此页面的某处”)机器人将简单地打开页面上的所有链接,并使用任何一个来返回订购页面。这只是没有办法赢得这个。

使服务器快速,在订购页面上放置一个 reCaptcha(我发现唯一一个不容易被愚弄的,但它可能对您的应用程序来说太慢了),并考虑稍微改变模型的方法所以普通用户与机器人用户一样有机会。

-亚当

于 2009-02-07T09:05:53.750 回答
11

我说使用 API 公开价格信息。这是不直观的解决方案,但它确实可以让您控制情况。为 API 添加一些限制,使其功能略逊于网站。

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

有代理和僵尸网络可以击败 IP 检查。有非常好的验证码阅读脚本。印度甚至有一群工人以低廉的价格击败了验证码。您可以提出的任何解决方案都可能被合理地击败。甚至 Ned Batchelder 的解决方案也可以通过使用 WebBrowser 控件或其他模拟浏览器结合僵尸网络或代理列表来跳过。

于 2009-01-16T16:08:35.630 回答
11

免责声明:这个答案完全与编程无关。但是,它确实首先尝试攻击脚本的原因。

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

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

  • 订购队列(预购系统) - 一些脚本可能仍会排在队列的最前面,但手动输入信息可能会更快。

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

  • 一个紧急优先队列——如果确实有很高的感知价值,人们可能愿意支付更多。实施订购队列,但允许人们支付更多费用以排在队列中的更高位置。

  • 拍卖(这要归功于 David Schmitt,评论是我自己的)——人们仍然可以在最后一分钟使用脚本进行狙击,但这不仅会改变定价结构,人们还期待与其他人争吵. 您还可以做一些事情来限制给定时间段内的出价数量,让人们提前打电话获取授权码等。

于 2009-01-16T16:12:26.653 回答
11

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

我认为需要不同的心态

  • 不要试图阻止机器人使用您的网站
  • 不要寻求立即起作用的修复,玩长时间的游戏

进入这样一种心态,即您网站的客户是人还是机器人都没有关系,两者都只是付费客户;但一个比另一个有不公平的优势。一些没有太多社交生活的用户(隐士)对于您网站的其他用户来说可能与机器人一样烦人。

记录您发布优惠的时间以及帐户选择购买的时间。

这可以让您记录客户购买东西的速度。

改变一天中发布优惠的时间。

例如,从一天中某个不知名的时间(午夜?)开始有一个 3 小时的窗口,只有机器人和隐士会不断刷新页面 3 小时,以便在几秒钟内获得订单。永远不要改变基准时间,只改变窗口的大小。

久而久之就会出现一张图。

01:您可以在产品上线后的几秒钟内查看哪些账户定期购买产品。暗示他们可能是机器人。

02:您也可以查看报价所用的时间窗口,如果窗口是 1 小时,那么一些早期购买者将是人类。不过,人类很少会刷新 4 小时。如果无论窗口持续时间如何,发布/购买之间经过的时间都非常一致,那么这就是机器人。如果小窗口的发布/购买时间短,大窗口的发布/购买时间长,那就是隐士!

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

我认为禁止机器人帐户毫无意义,这类似于给希特勒打电话并说“感谢您的 U 艇的位置!” 不知何故,您需要以帐户所有者不会意识到的方式使用这些信息。让我们看看我是否可以梦想任何东西......

在队列中处理订单:

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

  1. 您的订单已下达并正在排队。
  2. 您的订单已处理。
  3. 您的订单已派出。

用户认为他们在一个公平的队列中。每 1 小时处理一次队列,让普通用户也体验一次队列,以免引起怀疑。仅在“平均人工订购时间 + x 小时”的队列中处理来自机器人和隐士帐户的订单。有效地将机器人减少到人类。

于 2009-02-07T10:33:28.580 回答
8

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

于 2009-02-07T09:42:28.950 回答
7

首先,让我回顾一下我们需要在这里做什么。我意识到我只是在解释最初的问题,但重要的是我们要做到 100% 正确,因为有很多很棒的建议可以在 4 个中有 2 个或 3 个正确,但正如我将展示的那样,你需要一个涵盖所有需求的多方面方法。

要求1:摆脱'bot slamming':

首页的快速“猛烈抨击”正在损害您网站的性能,并且是问题的核心。“砰砰”声来自单 IP 机器人和——据说——也来自僵尸网络。我们想摆脱两者。

要求 2:不要扰乱用户体验:

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

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

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

要求 4:阻止“警报”机器人:

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


好的,让我们看看我们是否能满足所有四个要求。首先,正如我所提到的,没有任何一种措施可以解决问题。您将不得不结合一些技巧来实现它,并且您将不得不吞下两个烦恼:

  1. 少数用户将被要求跳过箍
  2. 少数用户将无法获得特别优惠

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

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

这个很简单,我相信你已经这样做了。如果用户登录并保持每秒刷新 600 次(或其他),您将停止响应并告诉他冷却它。事实上,你可能会比这更早地限制他的请求,但你明白了。这样,登录的机器人将在开始轮询您的网站后立即被禁止/限制。这是简单的部分。未经身份验证的机器人是我们真正的问题,因此对他们来说:

第二个措施:某种形式的 IP 限制,几乎每个人都建议:

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

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

第三个措施:用缓存的响应掩盖油门:

随着速射单 IP 机器人受到限制,我们仍然必须解决慢速单 IP 机器人,即。机器人经过专门调整以“在雷达下飞行”,将请求间隔得比节流所阻止的稍远。

要立即使缓慢的单 IP 机器人无用,只需使用 abelenky 建议的策略:将 10 分钟前的缓存页面提供给过去 24 小时(左右)内发现的所有 IP。这样,每个 IP 每天/每小时/每周都会获得一次“机会”(取决于您选择的时间段),并且对于刚刚点击“重新加载”的真实用户不会有明显的烦恼,除非他们没有获胜报价。

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

(我知道如果允许真实用户一遍又一遍地刷新,你可能会更喜欢它,但是如果没有验证码或类似的东西,就无法区分刷新垃圾邮件的人和发送垃圾邮件的机器人)

第四步:reCAPTCHA:

你是对的,验证码会损害用户体验,应该避免。但是,在_one_情况下,它们可能是您最好的朋友:如果您设计了一个非常严格的系统来阻止机器人,那么 - 由于其限制性 - 也会捕获许多误报;那么作为最后手段的验证码将允许那些被抓到的真实用户被你的限制滑倒(从而避免恼人的 DoS 情况)。

当然,最佳时机是当所有机器人都进入您的网络时,而很少有真正的用户会受到验证码的困扰。

如果您在提供 10 分钟前的缓存页面时,还提供替代的、可选的、CAPTCHA 验证的“首页刷新器”,那么真正想要保持刷新的人仍然可以这样做,而无需获取旧的缓存页面,但代价是每次刷新都必须解决一个验证码。这一个烦恼,但对于顽固的用户来说是一个可选的,他们往往更宽容,因为他们知道他们正在玩系统来提高他们的机会,而提高的机会并不是免费的。

第五招:诱饵废话:

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

当然,这并没有解决“警报机器人”问题,并且有一个(很小的)机会可以构建一个能够选择正确项目的机器人。然而,意外购买垃圾的风险应该会让脚本编写者完全摆脱全自动机器人。

第六招:僵尸网络节流:

[删除]

好的............我现在大部分时间都在思考这个问题,尝试不同的方法......全局延迟......基于cookie的令牌......排队服务...... '陌生人节流'....而且它不起作用。它没有。我意识到您尚未接受任何答案的主要原因是没有人提出一种方法来阻止分布式/僵尸网络/僵尸网络攻击......所以我真的很想破解它。我相信我在另一个线程中破解了用于身份验证的僵尸网络问题,所以我也对你的问题寄予厚望。但我的方法并没有转化为这一点。你只有 IP 可以通过,一个足够大的僵尸网络不会在任何基于 IP 地址的分析中暴露自己。

所以你有它:我的第六步是无效的。没有。压缩。除非僵尸网络足够小和/或足够快以陷入通常的 IP 限制,否则我看不到任何针对不涉及明确人工验证的僵尸网络的有效措施,例如 CAPTHA。很抱歉,但我认为结合上述五项措施是您最好的选择。并且您可能仅使用 abelenky 的 10 分钟缓存技巧就可以做得很好。

于 2009-02-08T20:45:14.973 回答
6

引入一个需要人工交互的延迟怎么样,比如一种“验证码游戏”。例如,它可能是一个小 Flash 游戏,他们必须在 30 秒内爆破方格球并避免爆破实心球(避免色盲问题!)。游戏将获得一个随机数种子,游戏将点击点的坐标和时间戳以及使用的种子传回服务器。

在服务器上,您使用该种子模拟游戏机制,以查看点击是否确实会爆破球。如果他们这样做了,他们不仅是人类,而且需要 30 秒来验证自己。给他们一个会话ID。

你让那个会话 id 做它喜欢做的事,但是如果发出太多请求,他们将无法继续,除非再次播放。

于 2009-01-16T16:17:14.053 回答
5

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

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

虽然,这个问题可能更适合上一个 SO-podcast 中提到的下一个 SO-derivate,但它还没有发布,所以我想可以回答 :)

编辑:
正如 novatrust 所指出的,仍然有 ISP 实际上没有将 IP 分配给他们的客户,因此有效地,这样的 ISP 的脚本客户会禁用该 ISP 的所有客户。

于 2009-01-16T16:18:07.657 回答
5

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

当然,如果多个人在经过 NAT 的网络连接上,他们可以来自同一个 IP 地址,但人们不太可能介意您的响应时间为 2 毫秒到 4 毫秒(甚至 400 毫秒),而机器人会受到阻碍由于延迟增加很快。

于 2009-02-08T01:45:49.237 回答
4
  1. 提供 RSS 提要,这样他们就不会占用您的带宽。
  2. 购买时,让每个人随机等待 最多 45 秒或其他时间,具体取决于您要查找的内容。您的时间限制究竟是什么?
  3. 给每个人 1 分钟的时间把他们的名字写进去,然后随机选择人。我认为这是最公平的方式。
  4. 监控帐户(在会话中包括一些时间并存储它?)并向看起来低于人类速度阈值的帐户添加延迟。这至少会使机器人被编程为减速并与人类竞争。
于 2009-01-16T16:18:08.047 回答
4

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

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

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

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

因此,第一次来这家汽车经销商的访客(我们叫他 Bob)被拒绝进入,并被转介到 DMV 办公室(就在隔壁很方便)以获得驾驶执照。

其他持有效驾照的游客在出示驾照后即可进入。一个整天闲逛、缠着推销员、拿小册子、倒空免费咖啡和饼干的人最终会被拒之门外。

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

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

访问 DMV 需要首先在“从这里开始”队列中获取申请表。Bob 必须将完成的申请带到 1 号窗口,在那里,许多乖戾的公务员中的第一个将接受他的申请,处理它,如果一切正常,就在窗口的申请上盖章,然后将他送到下一个窗口。因此,Bob 从一个窗口走到另一个窗口,等待他的申请的每一步都通过,直到他最终到达终点并获得他的驾照。

试图“短路” DMV 是没有意义的。如果表格一式三份没有正确填写,或者在任何窗口中给出的任何错误答案,申请就会被撕毁,倒霉的客户会被送回起点。

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

然而,DMV 的情况并没有那么糟糕。在所有等待和处理获得许可证的过程中,您可以在 DMV 大厅观看一个非常有趣且信息丰富的汽车经销商信息广告。事实上,电视广告的播放时间足以涵盖您获得许可证所花费的时间。

稍微技术性的解释:

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

这种方法可能需要 AJAX-y 客户端处理。一个全新的访客被授予“欢迎新用户!” 充满文本和图形的页面(通过适当的服务器端限制)需要几秒钟才能完全加载。当这种情况发生时(并且访问者可能正忙于阅读欢迎页面),他的识别令牌正在慢慢组装。

假设,为了讨论,令牌(又名“驾照”)由 20 个块组成。为了获得每个连续的块,客户端代码必须向服务器提交有效请求。服务器包含故意延迟(假设200 毫秒),在发送下一个块以及发出下一个块请求所需的“标记”之前(即,从一个 DMV 窗口到下一个窗口所需的标记)。总而言之,必须经过大约 4 秒才能完成chunk-challenge-response-chunk-challenge-response-...-chunk-challenge-response-completion 过程。

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

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

现在,为了对合法的人类访问者相对温和,让令牌发行过程在后台相对非侵入性地发生。因此,欢迎页面需要带有有趣的副本和图形,故意稍微放慢速度。

这种方法强制限制机器人使用现有令牌,或者花费最少的设置时间来获取新令牌。当然,这对使用分布式虚假访问者网络的复杂攻击没有多大帮助。

于 2009-02-07T10:15:48.617 回答
4

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

这里有一些想法可以让编写机器人变得更加困难:

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

  • 在输入表单时计时(再次通过 javascript)。如果它不像人类,那就拒绝它。在机器人中模仿人类打字很痛苦。

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

  • 编写代码以每天对字段重新排序(显然以某种方式对您的用户来说不是随机的)。如果他们依赖现场命令,这将使他们绊倒,并再次迫使他们的机器人代码进行日常维护。

  • 您可以更进一步并使用 Flash 内容。编写一个机器人来对付 Flash 完全是一件痛苦的事。

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

于 2009-02-07T18:15:57.883 回答
4

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

于 2009-02-09T14:43:47.343 回答
3

我没有看到您声称检查传入 IP 的巨大负担。相反,我为我的一个客户完成了一个项目,该项目每五分钟分析一次 HTTP 访问日志(它可能是实时的,但由于某种我从未完全理解的原因,他不希望这样做)并且创建防火墙规则以阻止来自任何生成过多请求的 IP 地址的连接,除非该地址可以确认属于合法搜索引擎(google、yahoo 等)。

此客户端运行 Web 托管服务,并在三台服务器上运行此应用程序,这些服务器总共处理 800-900 个域。峰值活动在每秒千次点击范围内,并且从未出现过性能问题 - 防火墙在丢弃来自黑名单地址的数据包方面非常有效。

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

于 2009-01-16T17:13:35.780 回答
3

我的方法是专注于非技术解决方案(否则你将进入一场军备竞赛,你会输掉,或者至少会花费大量时间和金钱)。我将专注于计费/发货部分 - 您可以通过查找多个交付到同一地址或通过对单一付款方式进行多次收费来找到机器人。您甚至可以在几周内跨项目执行此操作,因此如果用户获得了前一个项目(通过非常快速的响应),这次他可能会被分配某种“障碍”。

这也会产生副作用(我认为是有益的,但对于您的情况,我在营销方面可能是错误的)可能会扩大幸运并购买 woot 的人的圈子。

于 2009-02-07T09:49:29.263 回答
3

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

据我了解,这些机器人是由真正想购买你所卖包的人设置的。问题是 -

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

您可以让潜在的包包购买者订阅电子邮件,甚至是短信更新,而不是试图避免机器人,以便在销售发生时得到通知。您甚至可以给他们一两分钟的先机(销售开始的特殊 URL,随机生成并与邮件/SMS 一起发送)。

当这些买家去购买他们在您的网站时,您可以在侧横幅或其他内容中向他们展示您想要的任何内容。那些运行机器人的人会更喜欢简单地注册到您的通知服务。

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

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

本质上,我的建议是尝试将问题视为社会问题,而不是技术问题。

阿萨夫

于 2009-02-07T18:47:16.273 回答
2

每分钟发出如此多请求的时间块用户代理。例如,如果有人在 10 分钟内每 5 秒准确地请求一个页面,那么他们可能不是用户……但要做到这一点可能会很棘手。

如果他们触发警报,则将每个请求重定向到具有尽可能少的 DB-IO 的静态页面,并发出一条消息,让他们知道他们将在 X 分钟内被允许重新打开。

重要的是要补充一点,您可能应该只将其应用于页面请求并忽略所有媒体请求(js、图像等)。

于 2009-01-16T16:12:39.150 回答
2

防止 DoS 会破坏他在上面概述的@davebug 目标中的第 2 个目标,“保持网站的速度不会被机器人减慢”,但不必解决第一个问题,“将项目出售给非脚本人类”

我敢肯定,一个脚本编写者可以写一些东西来滑冰,这仍然比人类通过订购表格的速度要快。

于 2009-01-16T17:35:33.740 回答
2

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

于 2009-02-07T07:52:14.770 回答
2

这里重要的是改变系统以从您的服务器中移除负载,防止机器人赢得垃圾袋而不让机器人领主知道您正在与他们博弈,否则他们会修改他们的策略。我认为没有任何方法可以做到这一点,而无需在您的最后进行一些处理。

所以你在你的主页上记录点击。每当有人点击该页面时,该连接就会与它的最后一次点击进行比较,如果它太快,那么它会被发送一个没有报价的页面版本。这可以通过某种负载平衡机制来完成,该机制将机器人(命中太快)发送到仅提供主页缓存版本的服务器;真实的人被发送到好的服务器。这减轻了主服务器的负担,并使机器人认为他们仍在正确地获得页面服务。

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

于 2009-02-07T11:19:37.457 回答
2

怎么样:创建一个表单以在有新商品打折时接收电子邮件,并添加一个捕获系统,该系统将在不到 X 秒的时间内为任何刷新的人提供相同的内容。

这样你就赢得了所有的场景:你摆脱了刮板(他们可以刮掉他们的电子邮件帐户),你给那些不会为了在你的网站上购买东西而编写代码的人提供机会!如果我真的想买东西,我相信我会在我的手机中收到电子邮件并登录购买东西。

于 2009-02-09T18:49:33.120 回答
2

你怎么知道有编剧下单?

您的问题的症结在于您无法将脚本编写者与合法用户分开,因此无法阻止它们,那么您怎么知道有脚本编写者呢?

如果您有办法回答这个问题,那么您就有了一组可以用来过滤脚本编写者的特征。

于 2009-02-11T13:21:07.457 回答
2

让我们把问题转过来——你让机器人购买你想让真人购买的东西,让机器人真正有机会购买你希望真人购买的东西怎么样。

抓取机器人会认为是真实情况,但真实的人不会看到的一些未显示的 html 的随机机会(并且不要忘记真实的人包括盲人,因此也要考虑屏幕阅读器等),并且这会通过购买一些非常昂贵的东西(或者不进行实际购买,但会获得付款详细信息以供您列入禁令名单)。

即使机器人切换到“提醒用户”而不是“进行购买”,如果你能得到足够多的误报,你也可以让它对人们来说毫无价值(也许不是每个人,但诈骗的减少是总比没有好)不要打扰。

于 2009-02-13T00:01:52.600 回答
2

顺便说一句:在我看来,问题在于,您的用户预期行为与机器人非常相似(大浪淘沙,未经身份验证,点击每个按钮 :)),因此验证码可能是唯一的图灵测试能够辨别它:))。

于 2009-06-22T15:54:57.843 回答
1

您可以尝试使脚本更难阅读的价格。这可以通过将其转换为图像来实现,但文本识别算法仍然可以解决这个问题。如果有足够多的脚本编写者绕过它,您可以尝试将类似验证码的东西应用于此图像,但显然是以牺牲用户体验为代价的。价格可以在 Flash 应用程序中显示,而不是图像。

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

于 2009-01-16T16:00:42.073 回答
1

不是一个完整的修复,但我还没有在这里看到它。

跟踪“猛烈抨击”地址,并张贴免责声明,说明 BOC/物品不会被运送到任何不遵守您的 TOS 的地址。

这将对一些人产生心理影响,而其他想要利用您的网站的人将不得不改变方法,但您将为他们否定一种途径。

于 2009-02-09T18:35:12.903 回答
1

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

于 2009-02-11T08:30:13.710 回答
1

所以你的问题是业务太多了?人们在狙击你的销售?这是假设这些脚本编写者正在产生合格的销售?问题是他们抢在别人之前抢购了你所有的产品?

您如何为“脚本编写者”创建一个完整的 Web 服务 API 以与之交互。然后提供一点折扣或某种福利,让他们按照你的规则行事。使您的业务翻倍,并进行网络销售和 API 销售。

要么这样,要么只是获得更多库存-您无法抗拒-接受并适应它。

于 2009-02-11T13:43:34.220 回答
1

这是我的看法。攻击机器人所有者的投资回报率,这样他们就会做你想让他们做的合法事情,而不是作弊。让我们从他们的角度来看。他们的资产是什么?显然,无限数量的一次性机器、IP 地址,甚至可能还有大量不熟练的人愿意做空洞的任务。他们想要什么?始终在其他合法人获得之前获得您提供的特别优惠。

好消息是,他们赢得比赛的时间窗口有限。我不认为他们拥有的是无限数量的聪明人,他们随时待命,在您达成交易的那一刻对您的网站进行逆向工程。因此,如果您可以让他们跳过一个他们难以理解但对您的合法客户来说是自动的(他们甚至不知道它在那里),您可以延迟他们的努力,让他们被击败大量真实的人,他们只是渴望得到您的优惠。

第一步是使您的身份验证概念非二进制,我的意思是,对于任何给定的用户,您都有可能分配给他们,即他们是真实的人或机器人。你可以使用一些提示来建立这个概率,其中许多已经在这个线程上讨论过:可疑率活动、IP 地址、外国地理位置、cookie 等。我最喜欢的是只关注确切的版本他们正在使用的窗口。更重要的是,您可以通过强有力的提示为您的长期客户提供一种清晰的身份验证方式:通过与网站互动、购买、为论坛做贡献等。这些事情不是您必须做的,但如果您这样做了,那么您在看到特价商品时会有一点优势。

每当您被要求做出身份验证决定时,请使用此概率使您正在与之交谈的计算机完成或多或少的工作,然后再为他们提供他们想要的东西。例如,您网站上的某些 javascript 可能要求客户端在后台执行一项计算量很大的任务,只有当该任务完成时,您才会让他们知道特价。对于普通客户来说,这可能非常快速和轻松,但对于诈骗者来说,这意味着他们需要更多的计算机来保持持续的覆盖范围(因为每台计算机都必须做更多的工作)。然后,您可以使用上面的概率分数来增加他们必须做的工作量。

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

最后一个想法是在您发布新交易时(以及其他时间随机)更改生成工作所需的算法。每次你这样做,正常人都不会受到影响,但机器人会停止工作。他们将不得不让一个人开始进行逆向工程,希望这将比你的交易窗口花费更长的时间。更好的是,如果你从不告诉他们他们是否提交了正确的结果,这样他们就不会收到任何关于他们做错事的警告。为了打败这个解决方案,他们将不得不真正自动化一个真正的浏览器(或至少一个真正的 javascript 解释器),然后你真的在抬高诈骗的成本。另外,使用真正的浏览器,您可以执行此线程其他地方建议的技巧,例如计时每个条目的击键时间并寻找其他可疑行为。

因此,对于您认识的任何人(一个常见的 IP、会话、cookie 等),您都有办法让每个请求的成本更高一些。这意味着诈骗者总是希望向您展示您最困难的案例——您从未见过的全新计算机/浏览器/IP 组合。但是,通过投入一些额外的工作来了解他们是否让机器人正常工作,你会迫使他们浪费大量这些宝贵的资源。尽管它们实际上可能有无限数量,但生成它们并非没有成本,而且您再次推高了它们的 ROI 方程的成本部分。最终,他们只做你想做的事情会更有利可图:)

希望对你有帮助

埃里克

于 2009-02-12T20:47:43.317 回答
1

使用哈希现金

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

于 2009-02-12T21:05:48.967 回答
1

为什么不将内容设为 CAPTCHA?

在您显示奖品的页面上,始终在相同位置有一个同名的图像文件,当一个袋子或垃圾销售开始时,动态生成并加载一个带有文字等宣传奖品的图像,当没有销售时只要有一些与网站很好地集成的默认图像。似乎它与 CAPTCHA 的概念相同......如果机器人无法弄清楚图像的含义,他们将无法“赢得”它,如果他们能够的话,他们无论如何都能够弄清楚您的 CAPTCHA 图像。

于 2009-02-12T21:59:02.567 回答
1

我不知道这是否已经被建议了,但与其保留一个机器人的 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
?>

我没有检查语法错误,但你明白了。

于 2009-02-13T00:06:53.867 回答
1

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

你的问题:

  1. 网站的可用性
  2. 列表使网站令人兴奋和有趣
  3. 由脚本编写者引起的服务器负载。

你的目标:

  1. 保持网站以不被机器人减慢的速度运行。
  2. 将项目出售给非脚本人员。
  3. 不要让“普通”用户完成任何任务来证明他们是人类。

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

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

当然,对 RSS 提要也这样做。没有理由为什么其他服务不能为您承担带宽/负载。在相关说明中,所有图像均由 Akamai 等提供。为什么要受到打击?

目标 #2:将项目出售给不会编写脚本的人

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

所以我想说让他们购买,但让他们支付夸大的金额(或更优选地)只是放慢他们的速度,以便其他人有机会。

因此,每次用户访问该网站时,都会以 29.99 美元的价格提供一袋垃圾,并有一个随机速度下降或提高价格的计时器。有一张图片或其他一些指标告诉人们,如果他们有耐心,价格是否会更低。

用户有一个“立即购买!” 当他们看到价格/# 项目是他们想要的东西时点击该按钮。

例子:

用户:

  • 0 秒 29.99 美元(1 件) 图片说:“等待更低的价格!”
  • 7 sec $31.99 (1 item) 图片上写着:“等待更低的价格!”
  • 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 只会向他们收取 3 件商品的 4.99 美元,然后在下次购买 woot 时附上一张 20 美元的优惠券。

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

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

这里有一些想法:

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

只问 3 次,因为你真正想做的就是减慢脚本的速度。

于 2009-02-13T06:37:01.777 回答
1

我同意上面的海报,他说有时会出售真正“垃圾”的垃圾袋。

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

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

于 2009-02-13T14:22:28.070 回答
1

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

首先设置一些机器人陷阱。我会在主页上更频繁地提到 BOC,以诱使机器人认为机器人不聪明,因此每次都使用不同的措辞,例如“BOC 投诉!” - 所以只扫描关键字的机器人会被困住。

但是,我认为这里的真正问题是双重的,首先是您需要解决的性能问题,今天是机器人引起了问题,但它向我表明有一个性能问题需要解决。

其次,这是一个转移一些真正的废话以获利的商机。所以我会保持整体的 woot 风格并声明“我们检查机器人。如果我们认为你是机器人,你会得到一盒 botcrap。”

机器人检查将在销售完成后的某个时间离线进行,使用机器人陷阱、IP 号码、cookie、会话、浏览器字符串等。对您拥有的购买者数据进行一些认真的分析,以确定谁得到了机器人。如果您决定运送 botcrap - 那么您可以腾出一些普通的垃圾卖给其他人。

于 2009-02-13T19:26:17.030 回答
1

一些想法:

  1. 很简单:不要将其命名为“随机垃圾”。每次都更改项目的名称,以便机器人更难识别它。他们可能仍会寻找 1.00 美元的商品,在这种情况下,我建议偶尔在几分钟内出售 1 美元的口香糖。5 美元的运费应该让您物有所值。

  2. 更难:不要让用户做任何额外的事情——让用户的计算机做额外的事情。编写一个 JavaScript 函数,该函数执行一个需要大量处理能力的密集计算——例如,第 1000 万个素数——并让用户的计算机计算该值并在您接受订单之前将其传回(甚至可能创建“下订单”网址)。更改每个 BoC 的功能,以便机器人无法预先计算和缓存结果(但您可以)。计算开销可能只会减慢机器人的速度,足以让它们远离你 - 如果不出意外,它会减慢你服务器上的命中,以便它们可以呼吸。

于 2009-02-13T20:22:04.850 回答
1

前期注意事项:

我不识字;我还没有阅读这里的许多其他评论。

今天早上我从 Woot 的描述中偶然发现了这一点。我认为来自 woot 网站的温和用户(以及 BOC 的两次手动购买者)的一些评论可能会有所帮助。

Woot 处于一个独特的位置,它既是一个商业网站,也是一个拥有忠实用户的目的地,我理解这种平衡的微妙之处。但就我个人而言,我觉得您对 Crap-CAPCHA(“CRAPCHA”——不知何故我怀疑我是第一个做出这种恶作剧的人)对用户的“负面用户影响”的担忧被夸大了。作为用户,我很乐意证明我是人类。我相信 Woot 会让这个过程变得有趣和有趣,并将其融入整体体验。

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

祝你好运弄清楚这一点,并继续努力。

日通用汽车

于 2009-07-12T13:38:31.750 回答
1

向每个用户出售 RSA 密钥怎么样 :) 嘿,如果他们能为 WoW 做到这一点,你们应该能够做到。

我希望我的回答得到 BoC ;)

于 2009-07-12T13:56:28.717 回答
1

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

首先是高科技:BOC 产品在几秒钟内就卖光了,因为机器人在最初的几毫秒内获得了很多产品。因此,与其试图击败机器人,不如卖给他们他们正在扫描的东西:一袋垃圾。毫无价值的废话,当然:弯曲的回形针和 Rosie O'Donnell 的脏照片。然后在服务器上一次有几秒钟的内置随机延迟。随着销售的继续,所售产品的实际价值会增加,而售价则不会。这样,第一个买家(最初几毫秒内的机器人)将得到比他们支付的价格低得多的东西(棕色洋葱蛋糕?),下一个买家(速度较慢的机器人或速度较快的人类)将得到一些不起眼但物有所值的东西(寄售购买?),最后的买家(几乎所有人类)将得到比购买价格更有价值的东西(爆发香槟?)。那台平板电视可能是中国银行最后一次购买的。

任何等待太久的人都会错过,但同时任何购买太快的人都会被淘汰。诀窍是等待一段时间……但不要太多。有一些运气,这是应该的。

低技术含量的解决方案是将 BOC 的名称更改为人类可以解释但机器人不能解释的名称。排泄物的酒袋?有臭味的麻袋?与各种商品相邻的拓扑平面?永远不要重复使用相同的名称,使用略有不同的图片,并在产品描述中说明实际销售的是什么。

于 2009-07-12T20:54:49.307 回答
1

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

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

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

于 2016-10-10T06:23:24.970 回答
0

与其阻止可疑的 IP,不如减少您提供给地址的数据量,因为它的命中/分钟上升。因此,如果机器人对您的攻击超过了一个随机变化的秘密阈值,它将看不到数据。登录的用户将始终看到数据。经常访问服务器的登录用户将被迫重新进行身份验证,或者获得验证码。

于 2009-02-07T04:50:20.927 回答
0

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

除非您不想在您的网站上使用 javascript,否则该处理可以是一个用 javascript 完成的简单方程式。

于 2009-02-07T08:38:07.223 回答
0

嗯,我记得读过“Linux 防火墙”攻击检测和响应……那里的情况似乎非常相似。其他人也提出了这一建议。只需暂时或逐步阻止客户端以限制他们。如果它是来自几个站点的 realyl,这一定非常有效

问候

于 2009-02-07T08:43:51.250 回答
0

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

于 2009-02-07T12:57:47.650 回答
0

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

如果没有这些中的任何一个,您将“按设计”不走运。互联网是设计为允许匿名客户查看内容的。使用简单的 HTML 无法解决这个问题。哦,我只是想说简单的、基于图像的验证码很容易被打败,甚至作者也承认这一点。

继续解决问题和解决方案。问题分为两部分。首先是你不能阻止一个人“做坏事”。要解决此问题,您设置了一个方法,该方法接收浏览器有效会话并生成 md5sum + salt + 哈希(您自己的私人设备)并将其发送回浏览器。然后,浏览器需要在每次发布/获取期间返回该散列密钥。如果您没有获得有效的浏览器会话,那么您会回复“请使用有效的网络浏览器等等等等”。所有流行的浏览器都有有效的浏览器会话 ID。

现在我们至少有一个浏览器会话的身份(我知道它不会永久锁定,但是通过简单的脚本“更新”浏览器会话是相当困难的)我们可以有效地锁定一个会话(即;让它脚本编写者很难真正访问您的网站而不会对有效用户造成任何惩罚)。

现在,下一部分就是它需要 javascript 的原因。在客户端上,您为来自键盘的每个字符与 textarea 中的文本值构建一个简单的散列。该有效密钥作为简单的散列传入服务器,并且必须进行验证。虽然这种方法可以很容易地进行逆向工程,但它确实使它成为个人在提交数据之前必须经历的一个额外环节。请注意,这只会阻止自动发布数据,而不是经常访问该网站的 DOS。如果您甚至可以访问 ajax,则有一种方法可以通过网络发送盐和哈希密钥,并使用 javascript 来构建通过网络发送的 onkeypress 字符“有效令牌”。是的,就像我说的那样,它可以很容易地被逆向工程,但你看到我希望这个去哪里。

现在是为了防止通过流量不断滥用。一旦给定了有效的会话 ID,就有多种方法可以建立模式。这些模式(即使使用 Random 来抵消请求时间)的 epsilon 比假设人类试图重现相同的误差幅度要低。由于您有一个会话 ID,并且您有一个“似乎是机器人”的模式,那么您可以使用 20 字节而不是 200000 字节的简单轻量级响应来阻止该会话。

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

于 2009-02-07T16:32:46.220 回答
0

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

您可以使用这里描述的 memcached来廉价地跟踪每个 IP 的命中数。

于 2009-02-07T17:04:21.757 回答
0

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

为了涵盖实际购买垃圾袋的第二步,添加简单的问题。我更喜欢常识问题而不是上面建议的数学问题。比如,“冰是热的还是冷的?” “蚂蚁是大还是小”?当然,这些需要随机化,并从源源不断的问题中提取出来,否则机器人可以被编程来回答它们。但是,这些问题仍然比 CAPTCHA 少得多。

于 2009-02-07T17:05:46.993 回答
0

使用 Flash 怎么样?

是的,我知道使用 Flash 的开销,再加上某些用户将无法购买 bag-o-crap(即:iPhone 用户)这一事实可能会造成不利影响,但在我看来 Flash 会阻止屏幕截图或至少让它变得困难。

我错了吗?

编辑添加

在您的提交表单中包含几个“隐藏”字段怎么样?如下所示:

实际上,最佳实践似乎是使用两个隐藏字段,一个有初始值,一个没有。这是可以忽略这两个字段的罕见机器人。检查一个字段是否为空白,另一个字段是否具有初始值。并使用 CSS 隐藏它们,而不是通过将它们设为“隐藏”字段:

.important { 显示:无;}

请不要更改接下来的两个字段。

机器人倾向于喜欢名称如“地址”的字段。段落中的文字是为少数拥有非 CSS 浏览器的少数人准备的。如果您不担心它们,可以将其排除在外。

在处理表单的逻辑中,您可以执行以下操作:

if (address2 == "xyzzy" and address3 == "") { /* OK to send / } else { /可能有机器人 */ }

于 2009-02-07T17:47:37.033 回答
0
  • 追逐资金流。这比跟踪 IP 端要容易得多。让机器人支付太多次(白底白字的公告及其所有变体)会迅速扼杀他们的业务案例。您应该仔细准备,并充分利用机器人的优势:它们的速度。你有没有在几秒钟内尝试过几千个假公告?如果他们每秒打十次,你可以走得更快。只要他们继续购买,您就想保持这种状态,因此请仔细考虑您想要开始此操作的一天/一周中的哪个时刻。理想情况下,他们会停止付款,因此您可以将您的案件交给银行。
  • 确保您的网站已完全生成,并且每个页面访问都返回不同的页面内容(html、javascript 和 css)。解析比生成更难,并且很容易内置比机器人开发人员可以处理的更多变体。继续更改内容以及生成方式。
  • 您需要知道机器人能够以多快的速度适应您所做的更改,最好是它们所在的时区。它是一个僵尸网络还是多个,它们是在同一个时区,不同的时区,还是一个全球开发者网络?你希望你的反击时机正确。
  • 当前最先进的机器人让人类进入验证码(针对色情/游戏提供)。
  • 让快速反应变得没有吸引力。
  • 正如 Ned Batchelder 解释的那样,使用散列和蜜罐。

[编辑] 你不能防御僵尸网络是不正确的。特别是我的第二个建议提供了对自动购买者的充分防御。不过,这需要对您正在使用的技术进行彻底的重新思考。你可能想用 Seaside 做一些实验,或者直接在 c.

于 2009-02-07T17:49:40.120 回答
0

假定不可协商:

第一个屏幕需要是简单的低开销 HTML,带有一个易于识别的(机器人或人)按钮来单击或等效以明确表示“我想要我的废话”。因为我们假设最坏的情况——你有相当于来自机器人和非机器人组合的 DOS 攻击,所有首先点击网站(就可识别性而言)。因此,让我们尽快从缓存、良性回声机器人等中分发这些内容。

(注意:就 wooter 而言,无论如何都会发生这种情况;这对用户来说和 Woot 一样痛苦,因此任何有助于吸收或减轻第一次屏幕获取的事情都符合所有相关 3 方的利益。)

然后,对于非机器人来说,这个过程不需要比现在更严重,合法的过程不需要额外的步骤(或痛苦)。(当前设计的背景说明:当前的wooters通常已经登录,或者可以在购买过程中登录。新买家需要在购买过程中注册。所以实际上已经注册更快,尚未登录更快.)

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

毫无疑问,机器人将在第一个屏幕上占据优势;从那一刻起,无论他们取得了什么优势,他们都会通过其余的屏幕,再加上botness在其他阶段提供的任何优势。


如果 Woot 在第一个屏幕之后故意将排队过程解耦,并将从该点开始的每个会话输入到一系列固定的最小时间步骤中会怎样?直到 30 秒过去,第二个屏幕才会出现;提交后,以下屏幕相同。我敢打赌,如果他们被告知,在第一个屏幕之后,他们会在队列中等待(这已经是真的),这将随着时间的推移以一种不应该比以前更长时间的方式分散负载,我敢打赌健壮,并帮助清除机器人。在这一点上,您可以加入上面列出的一些 bot speedbumps(DOM 对象的细微变化等)。Woot 对事物的控制能力更强的看法会有所帮助。

如果更高比例的 BOC 初始点击可以在他们的第一次点击(或接近它)时进入一个对机器人不友好的非时间关键过程,而不是重试,那么超过那个点的真实人将更有信心. 肯定会比目前的情况不那么敌对。即使在正常的 Woot-Off 情况下,它也可能会降低一直在发生的背景噪音环境机器人速率。机器人会关闭主页,并在没有优势的情况下彼此(以及其他所有人)排队。


嗯......“公寓线程”的概念浮现在脑海中。我想知道该模式是否大致有用?
这里一个有用的核心概念是能够在第一个屏幕之后跟踪队列中累积的总时间并能够调整到标准。作为一种机器人缓解策略,您将有一点灵活性,可以将最早的会话推迟 5-10 秒;这样做可能无法检测到,但会导致更丰富的非机器人购买组合。我敢肯定,您有统计数据可以在事后帮助评估此类事情。
只是为了好玩,您可以(至少一次 wootoff)将您自己的机器人组合在一起,该机器人结合了您所见过的最佳功能,然后在前一天将其分发给所有人。那么至少每个人都会装备同样的武器。(然后鸭子......进来......)

于 2009-02-07T23:34:14.353 回答
0

我喜欢BradC 的回答(使用 Ned Batchelder 文章中的建议),但我想为其添加另一个级别。您不仅可以随机化字段名称,还可以随机化字段位置和使它们不可见的代码

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

总之:

  • 字段名称是随机的
  • 字段顺序是随机的
  • 字段隐藏代码复杂
  • 字段隐藏代码被混淆 - 随机
  • 服务器端代码每天都会自动更改随机因素

鉴于您给出的限制,我认为没有办法避免某种“军备竞赛”,但这并不意味着一切都会失败。如果你可以自动化你的军备竞赛而脚本编写者不能,那么你每次都会赢得它。

于 2009-02-08T01:15:10.517 回答
0

让它对机器人用户无利可图,他们很快就会离开——也就是说,偶尔会出售一些人类可能永远不会想要的东西(也许是一袋字面的废话)。

于 2009-02-08T03:26:59.267 回答
0

用户必须等待图像中显示的延迟的延迟页面怎么样?

如果他们在图像中指定的足够短的时间段内单击,您只能从他们到达的页面进行排序,也许图像可能在动画 gif 或非常小的 javascript 或 flash 计时器中进行倒计时。

如果他们在时间限制之外跳转到详细信息页面,他们会看到一个昂贵的项目,如之前的答案中所讨论的。

于 2009-02-09T01:22:41.967 回答
0

我不是 100% 肯定这会奏效,至少没有尝试过。

但似乎应该有可能,虽然在技术上具有挑战性,但编写一个服务器端 HTML/CSS 加扰器,将一个普通的 html 页面 + 相关文件作为其输入,并输出一个或多或少的空白 html 页面,以及一个能够重建页面的混淆 javascript 文件。当然,javascript 不能只打印简单的 DOM 节点……但它可以输出一组复杂的重叠、绝对定位的 div 和段落,每个都包含一个字母,因此它完全可读。

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

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

诚然,编写这样一个混淆器会很困难,而且可能不值得。但这是一个想法。

于 2009-02-09T18:13:39.197 回答
0

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

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

第二项是有问题的,但我会保留您的常规用户 IP 地址的运行列表,并为任何新用户限制流量。这可能会使首次访问者和拨号用户(由于更改 IP 地址)陷入困境,但我认为通过优先考虑重复业务...和拨号用户,这只是在糟糕的情况下做出最好的选择......即使没有任何垃圾邮件发送者,他们是否会“获胜”也值得怀疑。

于 2009-02-10T08:47:39.703 回答
0

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

  1. 在您的网站上发布使用机器人是非法的
  2. 找到某些识别机器人的启发式方法(例如,这可以通过短期 IP 跟踪或通过他们感觉表格所花费的时间来完成)
  3. 如果您标记为机器人的人购买了该商品,请阻止他的信用卡以备将来使用
  4. 下次他尝试购买时,拒绝购买并将商品退回库存

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

一旦botters放弃了你,你的服务器负载应该随着时间的推移而减少。另一个想法是在服务器之间分离您的页面 - 例如,一个服务器上的 RSS 提要,另一个服务器上的主页,另一个服务器上的结帐。

祝你好运。

于 2009-02-10T22:10:17.100 回答
0

我很确定您的服务器已经记录了传入请求的所有 IP(大多数都记录了)-因此数据已经存在。

也许你可以:

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

取消与“最后”获胜者具有相同送货地址或付款信息的任何“获胜者”的资格,或者在特定时间范围内获胜的“获胜者”以传播“获胜”。

机器人不会那样做。

为了惹恼刮板中的废话: 当“随机废话”项目出现时,通过“代码混淆器”运行该页面的 HMTL 输出......这不会改变页面的“显示”......只是用随机生成的 ID 等来打乱代码。

更阴险:

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

于 2009-02-11T16:46:05.360 回答
0

试图以 BOT 本身为目标永远无法解决问题——编写它们的人会想出一种新的方法来解决你已经实施的任何问题。然而,强迫用户在购买前思考将是一个更有效的解决方案。我能想到的最好的方法是进行荷兰式拍卖。从高价开始(您在商店购买的价格的两倍)并随着时间的推移降低价格。第一个点击购买的人得到它。我认为没有任何机器人足够聪明,无法计算出该商品的最佳价格。

于 2009-02-11T21:26:30.797 回答
0

限制您发布优惠的时间: 例如:仅从一小时开始后的 7 分钟到 8 分钟。不要偏离这一点,对在发布时间前半小时内检查很多的 IP 给予几秒钟的惩罚。然后,对于机器人所有者来说,每小时只筛选几分钟而不是全部筛选抓取变得有利。这。时间。此外,由于普通人可以每小时而不是每秒检查一次站点,因此您可以让普通人与机器人更加平等。

Cookies: 使用仅由唯一 ID(数据库表的键)组成的跟踪 cookie。对没有 cookie、无效 cookie、使用来自新 IP 的相同 cookie 或使用频率很高的 cookie 的客户端给予“发布延迟”。

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

于 2009-02-12T18:45:50.660 回答
0

也许您需要一个解决方案,让机器人完全无法区分袋装销售和所有其他内容。

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

于 2009-02-12T18:55:54.333 回答
0

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

于 2009-02-12T21:24:37.610 回答
0

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

于 2009-02-12T21:47:21.363 回答
0

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

于 2009-02-12T22:05:24.503 回答
0

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

为什么不提供比脚本编写者自己制作的更好的系统呢?
修改您的网站,使其对不使用机器人脚本的人更公平。人们注册(验证码或电子邮件验证)并有效地参加彩票比赛以获胜!

“赢”让它更有趣。并且每个人都支付少量入场费,因此获胜者以更少的价格获得产品

于 2009-02-12T22:22:05.163 回答
0

我不是网络开发人员,所以请稍加注意,但这是我的建议 -

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

(如果您没有 cookie,则看不到它们。因此,未启用 cookie 的用户永远不会看到垃圾销售;新用户在第一次查看页面时永远不会看到它们,但之后会看到) .

每次用户刷新网站时,他都会将他当前的cookie传递给服务器,服务器使用它来决定是给他一个新的cookie还是保持当前的cookie不变;并在此基础上决定是否显示带有或不带有垃圾销售的页面。

为了在服务器端保持简单,您可以在任何给定时间说,只有一个 cookie 可以让您看到垃圾销售;还有一些其他的 cookie 标记为“在最后 2 秒内生成”,它们将始终保持不变。因此,如果您刷新页面的速度比这更快,您将无法获得新页面。

(……啊,好吧,我想这并不能阻止机器人恢复旧的 cookie 并将其传回给你。不过,也许这里有一个解决方案。)

于 2009-02-12T22:44:16.767 回答
0

停止所有机器人将非常困难,尤其是在不使用验证码的情况下。我认为您应该从实施各种措施以使脚本编写者的生活更加艰难的角度来处理这个问题。

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

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

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

于 2009-02-12T22:45:52.377 回答
0

脚步:

(结合另一张海报和 gif 垃圾邮件发送者的想法)

  • 整个报价页面显示为图像、广告文案等。

  • 加密 URL 中的价格

攻击:

  1. 机器人转到 URL 以查看结帐页面上的价格

    • 将结帐价格标签变成图像,或

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

  2. 咀嚼带宽

    • 使用图像提供特别优惠,使用 HTML 提供普通优惠
  3. 鲁莽的机器人订购

    • 一些特殊的“形象”优惠实际上是正常价格。
  4. RSS 抓取

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

    • 这必须基于每个请求

    • 它可以是预付费的,例如用户可以输入 20 个验证码进行 200 次 RSS 查找

    • 一旦 DDOS 的威胁得到缓解,您就可以 实施报价的电子邮件通知

于 2009-02-12T22:53:19.863 回答
0

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

于 2009-02-12T22:54:01.233 回答
0

CAPTCHA 的问题在于,当您在 Woot 上看到垃圾销售时,如果您希望收到您的垃圾袋,您必须非常迅速地作为消费者采取行动。因此,如果您要使用一种 CAPTCHA 形式,它对客户来说必须非常快。

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

一段时间前,我正在开发一个可以加密 URL 的系统。如果这些页面上的每个 URL 都使用随机 IV 加密,那么它们对于机器人来说都是唯一的。我设计这个是为了混淆探测机器人。我还没有完成这项技术,但我确实有一个在这个庄园中运作的小型网站。

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

于 2009-02-12T23:19:12.453 回答
0

只要垃圾袋的意外分布只与一个时间点相关联,就可能没有好的解决方案——因为机器人有足够的时间,并且有足够的资源在很短的时间间隔内不断抨击网站。

我认为您必须添加一个额外的标准,即机器人无法从其末端进行屏幕抓取或操作。例如,假设任何时候有 5000 人每分钟几次点击页面寻找垃圾袋,并且每秒有 50 个机器人猛击它。在它出现后的最初几秒钟内,50 个机器人将把它全部抢购一空。

因此,您可以添加一个条件,即废话首先出现在其整数 IP 的模数 30 是随机数(例如 17)的任何用户身上。也许每秒会添加另一个随机数,因此废话会逐渐向所有客户端显示30秒。

现在想象一下前几秒钟会发生什么:目前,所有 50 个机器人都能够立即抢购所有垃圾,而人类得到 0。在这个方案下,6 秒后只有 10 个机器人通过,而 1000 个人类有通过了,大部分垃圾都归于人类。您可以使用时间和随机模数来尝试优化该间隔,具体取决于用户数量和可用单位。

不是完美的解决方案,而是改进。好处是人类比机器人受益的要多得多。有几个缺点,主要是不是每个人在任何特定的日子都能得到平等的机会 - 尽管他们现在没有太多机会,我猜即使没有机器人,他们中的大多数人也会被拒之门外随机的,除非它们恰好在正确的一秒刷新。而且,它不适用于具有大量分布式 IP 的僵尸网络。不知道是否有人真的使用僵尸网络只是为了胡说八道。

于 2009-02-12T23:46:31.873 回答
0

你的最终目标是扩展到更大的用户群,他们可以购买东西。

如果您在一两个小时内通过一系列 IP 地址释放您的 w00t 包,而不是同时将它们全部释放到任何 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 包提供给他们,以便在重度/快速/可能之前为偶尔/稳定/慢速访问者提供机会机器人用户。

——罗伯特

于 2009-02-12T23:59:04.247 回答
0

我会推荐一个基于防火墙的解决方案。与大多数防火墙一样,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

请注意,此限制将单独适用于每个访问者,因此一个用户对网站的滥用不会影响任何其他访问者。

希望这可以帮助!

于 2009-02-13T00:46:48.983 回答
0

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

如果您只接受通过信用卡付款(可能是这种情况,可能不是,但它显示了我的思路)只允许用户使用相同的帐户和/或信用卡每 10 次销售购买一次 BOC。脚本小子很容易获得大量 IP,而对于他们来说,将一大堆信用卡放在一起则不那么容易。正如你所说,IP 真的很难被禁止,而对信用卡的临时禁令应该是在公园里散步。

您可以让每个人都知道限制是什么,或者您可以告诉他们,由于需求量大和/或机器人兴趣高,因此在购买时实施了节流,而对机制不具体。

在节流期间的每次购买尝试都可能引发指数回退 - 您购买 BOC,您必须在再次尝试之前通过 10 次销售。无论如何,你在下一次销售时再试一次,现在你必须等待 20 次销售,然后是 40 次,然后是 80 次......

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

于 2009-02-13T00:52:30.483 回答
0

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

这些都基于 IP 跟踪,在僵尸网络和云计算下有些分崩离析,但应该会阻止绝大多数僵尸网络攻击者。Joe Random 拥有大量机器人供他使用的可能性远低于他只是运行他在某处下载的 Woot 机器人以获取他的垃圾袋的可能性。

普通的旧节流

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

自适应节流

该解决方案的一个变体可能是实现负载平衡队列,其中最近发出的请求数与您在队列中的位置有关。也就是说,如果您继续抨击该网站,您的请求将变得较低优先级。在诸如垃圾销售袋之类的高流量情况下,这将为合法用户提供优于机器人的优势,因为他们将具有更高的连接优先级,并且可以更快地获取页面,而机器人继续等待直到流量减少到足以使他们的人数增加为止。

终端验证码

第三,虽然您不想使用验证码,但在交易完成之前,在流程的最后使用验证码可能不是一个坏主意。到那时,人们已经承诺出售,即使有轻微的烦恼,也可能会完成它。它可以防止机器人完成销售,这意味着它们至少能做的就是敲击您的网站,以尽快提醒人们有关销售的信息。这并不能解决问题,但它确实意味着人类获得销售的机会比机器人目前要好得多。这不是一个解决方案,但它是一种改进。

以上的组合

实施基本的、慷慨的限制以阻止最滥用的机器人,同时考虑到单个公司 IP 背后的多个合法用户的潜力。截止数字会非常高 - 您引用的机器人以 10 次/秒的速度访问您的站点,即 216 万次请求/小时,这显然远远高于任何合法使用量,即使对于最大的公司网络或共享 IP 也是如此。

实施负载平衡队列,以便您因占用超过您的服务器连接和带宽份额而受到惩罚。这会惩罚共享公司池中的人,但不会阻止他们使用该网站,并且他们的违规行为应该远没有你的botter那么可怕,因此他们的惩罚应该不那么严重。

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

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

  • 以他当前的行为超出了他的请求配额,并且根本无法访问该站点,或者
  • 请求刚好不会超出请求配额,这为他提供了较低流量级别的实时信息,但导致他在高流量时间的请求之间有大量延迟,这严重影响了他在库存耗尽之前完成销售的能力,或者
  • 请求比普通用户更多,最终被卡在验证码后面,或者
  • 请求不超过普通用户,因此对普通用户没有优势。

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

附录

以远低于注册用户的速度限制对未注册用户的请求。这样,机器人所有者将不得不通过经过身份验证的帐户运行机器人,以通过应该是相对限制性的节流率。

然后,本发明的漫游器将注册多个用户 ID 并使用这些用户 ID 来实现他们想要的查询率;您可以通过将在给定时间段内从同一 IP 显示的任何 ID 视为相同 ID 并受到共享限制来解决此问题。

这使得机器人别无选择,只能运行一个机器人网络,每个 IP 有一个机器人,每个机器人都有一个注册的 Woot 帐户。不幸的是,这与大量不相关的合法用户实际上无法区分。

您可以将此策略与上述一种或多种策略结合使用,以产生向不参与滥用使用模式的注册用户提供最佳服务的总体效果,同时逐步惩罚其他注册用户和未注册用户,根据他们的状态(匿名或已注册)和由您的流量指标确定的滥用程度。

于 2009-02-13T01:35:23.173 回答
0

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

于 2009-02-13T03:30:02.880 回答
0

开发一个不在浏览器中本地运行的首页组件和购物车。如果您使用 Flex/Flash 或 Silverlight 之类的东西,则抓取起来要困难得多,并且您可以完全控制服务器通信,因此可以完全屏蔽脚本编写者的内容。

于 2009-02-13T03:44:23.830 回答
0

如果机器人用户使用无效的信用卡或其他东西付款,这只是一个问题。那么非技术解决方案呢?

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

结果:更多的销售。你做生意是为了赚钱,对吧?

于 2009-02-13T04:24:04.310 回答
0

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

用户点击和做出决定的速度存在一些物理限制,并且通过在所有请求都通过之后进行检测(而不是故意减慢所有交互),您不会影响非脚本人类的性能。

如果仅在某些时候使用 CAPTCHA是可以接受的,您可以将延迟时间增加到快速人类(而不是超人类),并且如果有人点击非常快,则需要一个后确认 CAPTCHA。类似于如果有人快速发布多个帖子,某些网站需要验证码确认。

可悲的是,我不知道有什么好的方法可以阻止你的产品列表的屏幕刮板:(

于 2009-02-13T05:25:30.107 回答
0

我只是想知道是否有一个简单的解决方案。

我假设指示垃圾销售的消息是以文本形式发布的,这是抓取工具寻找的信息。

如果您使用图像来发布公告会怎样?这样做可能会带来一些设计问题,但它们可以被克服,并可能成为一些巧妙创造力的动力。

问题 #1
必须有一些专门用于图像的设计空间。(想要变得非常棘手吗?通过此插槽旋转本地广告。当然,图像的名称需要是静态的,以避免给刮板带来气味。这是一个永远不必担心广告失明的插槽......)

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

我不知道......他们是否会编程他们的机器人以在每次提要项出现时访问您的网站?

其他问题?可能很多。不过,也许这将有助于进行一些头脑风暴。

保重,
布赖恩

于 2009-02-13T06:05:17.080 回答
0

以下是您可以做出的一些有效假设:

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

解决方案不是技术解决方案。这是一项政策。

  • 在您的网络服务器上记录所有客户端会话 ID。
  • 制定“有限机器人”政策;比如说,每 X 秒刮一个屏幕,让使用普通浏览器的人能够点击刷新。任何发现超过此限制的用户都不会赢得胜利。
  • 通过向已知的机器人所有者发送一堆 Leakfrogs 来跟进这一点。
于 2009-02-13T06:07:47.073 回答
0

这是我要做的:

  1. 要求所有垃圾袋销售的投标人在网站上注册。
  2. 当您想开始销售时,请在您的主页上发布“中银销售即将开始,检查您的电子邮件以查看您是否符合条件”。
  3. 向随机选择的注册玩家发送邀请,并在销售开始时使用该特定销售独有的 URL。
  4. 确保每个销售活动使用的 URL 都不同。
  5. 根据用于购买的信用卡、贝宝账户或送货地址,调整随机选择邀请算法以降低频繁获奖者的可能性。

这会阻止机器人,因为您的主页仅显示未决的 BOC 事件。如果不通过电子邮件收到 URL,机器人将无法访问该 URL,并且无法保证他们会收到它。

如果您担心销售影响,您还可以通过为每次销售赠送一两个 BOC 来激励参与。如果您在给定的时间间隔内没有看到对报价的足够吸收,您会自动向其他注册用户发送邮件,从而增加每个报价中的参与者池。

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

于 2009-02-13T06:17:38.750 回答
0

ASP.net AJAX 控件工具包中的NoBot 控件怎么样?

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

抱歉,如果这不符合某些要求,我只需要致电
tl;dr >D

于 2009-02-13T06:59:42.363 回答
0

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

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

于 2009-02-13T07:26:22.877 回答
0

我作为长期 WOOTer 的看法

我很高兴在订购时有一个验证码,仅针对 BOC 开启。我想大多数追求者都会同意。另外,99.9% 的时间你甚至都没有进入订单屏幕,因为它卖光的速度太快了,所以几乎没有人会知道!!

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

于 2009-02-13T07:26:28.897 回答
0

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

于 2009-02-13T07:34:03.543 回答
0
  1. 焦油坑。将页面浏览量限制为每秒 1 次不会打扰人类用户。
  2. 通过 JavaScript 链接。简单的机器人不会挖掘那个。就可用性而言,统计数据显示,不到 1% 的用户不使用 JS。2a。以上的硬核版本。Flash 中的链接。
  3. 参数存储在会话中,而不是查询字符串中。大多数机器人是无状态的。
于 2009-02-13T09:20:04.037 回答
0

从没想过我会为任何事情推荐闪光灯,但是闪光灯呢?让您的服务器将异步、加密的内容发送到 flash 文件,以表明是否有交易时间。只要响应是相同大小的交易或没有交易,机器人就无法判断它是什么。

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

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

于 2009-02-13T09:54:49.087 回答
0

使扫描网站变得昂贵。

我不知道这可以让机器人远离您的网站。我什至知道一项服务,其中有人为您扫描网站。你会怎么处理?

机器人最糟糕的事情是,当网站发生变化时。一段时间后,保持机器人运行会变得昂贵或无聊。您的网站上可能有看起来像新产品的更新,但实际上并非如此。如果您不定期和不可预测地更新,机器人就会变得非常困难。

禁止 IP 可能是一种对策,只要它是已知 IP。罪犯需要使用代理。我认识的代理运行良好,但会拖慢你的速度。

于 2009-02-13T12:56:04.160 回答
0

我的想法(其他的没查过,不知道是不是小说)

处理群发:

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

    • 是的,有些人会抱怨,但我们在这里寻找的是常见的情况,而不是理想的情况。
    • 您还应该随机化您的 Flash 对象的名称,因此它们不是任何可预测的名称模式。
  2. 使用 Akamai 或其他 CDN,提前将此闪存对象部署到外部世界。Akamai 生成看似随机的 URL,因此难以预测。

  3. 当需要进行新的销售时,您只需在本地更改 URL 以引用 Akamai 的适当对象,然后人们会从他们那里获取 flash 对象以发现该交易是否为 BoC。

一天结束 - 您现在让 Akamai 处理您的午夜流量群

处理自动购买

  1. 您创建的每个 Flash 对象都可以在其中隐藏大量内容 - 图像、链接、任意 ID,包括一千个地方的“垃圾袋”。您也应该能够混淆闪光灯。
  2. 当 Flash 对象“上线”时,人们就会开始攻击它。但是有太多误报,简单的字符串扫描是没有用的——他们必须模拟在本地运行闪存。
  3. 但是闪光灯不写文字。它绘制线条和形状。不同颜色的形状都连接到计时器,使它们在不同的时间出现和消失。
    • 如果您看过科尔伯特报告,您就会知道介绍中有数百个描述科尔伯特的词。想象一下类似的东西作为你的介绍,其中总是包括 Bag O Crap。
    • 现在,假设介绍需要任意时间 - 有时几秒钟,有时长达一分钟或更长时间(让它变得有趣)
    • 与此同时,“Bag O Crap”不断出现,但同样,作为介绍的一部分。
    • 最后,显示当天的实际交易,具有活跃的“闪光”效果,使画布的任何单个快照都难以显示实际的产品名称。它漂浮在一个动画背景之上,仍然在说“bag O crap”,并且一直在运动
    • 同样,所有这些都是用线条和形状处理的,而不是文本字符串

最终结果 - 您的黑客被迫拍摄大量交易的图像快照,找出如何区分所有误报并识别实际交易。同时,人类只是看着它,在眼睛疲劳和我们填补文本空白的能力之间,我们可以按原样阅读交易。

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

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

于 2009-02-13T14:03:15.840 回答
0
  1. 通过 IP 或其他机制识别机器人。

  2. 始终为那些被识别为机器人的正常首页提供服务。

被错误识别为机器人的真人不会得到特价,但他们无论如何也不会注意到。

机器人所有者不会意识到您已经识别了他们,因此他们将停止调整他们的脚本。

于 2009-02-13T14:44:29.843 回答
0

我的解决方案是营销变革和技术变革的结合。

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

涉及几个市场目标:

  • 让客户每天访问该网站一次(冲动购买)。看到一袋垃圾销售的可能性是原因/奖励。
  • 客户看到一袋垃圾销售的网络/病毒/八卦效应正在发挥作用,他们将 IM/EMail/给他们的朋友打电话。
  • 还有我称之为一般的“善意”。Woot 是一个非常酷的地方,因为它偶尔会以惊人的销售奖励其客户(包括平板电视的垃圾袋)......并且它以公平的“先到先得”的方式完成。

前两个似乎是最重要的。访问者的绝对数量会影响正常交易的销售(或售罄)速度。传统上,新客户几乎都是通过口耳相传来吸引的,让客户将他们的朋友发送到 woot.com 是一种胜利。

所以......我的解决方案是将促销交付改为更多的彩票。

有时用户可以做一些有趣的事情来看看他们是否有资格获得一袋垃圾。有趣的事情可能是一个愚蠢的 Flash 游戏,类似于“打猴子”或 Orbitz 迷你推杆、棒球、曲棍球。这里的目标是机器人无法编写脚本的游戏,因此需要相当小心。目标不仅是向游戏获胜者奖励垃圾袋……而是向所有游戏玩家。

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

游戏本身会随着时间而改变。您可以为万圣节、圣诞节、情人节、复活节等制作特殊活动游戏。有趣的营销创意有很多空间可以匹配 woot 的“wootiness”。

如果用户获胜,他们可以购买 N 袋垃圾(在限时窗口内)......但他们也可以向 N 个朋友发送限时邀请购买一袋垃圾(有效期为 24 小时)。这提供了超强的网络效应......客户肯定会告诉他们的朋友。或者您也可以将其作为“买 1 送 1”... 让客户购买最多 N 个,但强制每隔一个发送给朋友。这里的关键是让网络/八卦效应成为一个成熟的部分……帮助客户向世界讲述 woot 的美妙之处。

垃圾销售概念袋周围的宣传材料也需要改进。一袋废品售罄的速度图表不再相关。大致上是人们在一个月内有机会购买的频率。有多少人告诉他们的朋友。材料应该巧妙地强调每天一次的实地考察是个好主意。

您还可以宣传为什么垃圾袋销售正在发生变化。尤其是您免费聘请了最好的废话顾问包。

于 2009-02-13T15:41:32.060 回答
0

老实说,我认为您最好的解决方案是在 Woot-Off 期间使项目仅对登录用户可见,并将每个登录用户限制为每 500 毫秒左右刷新一次主页。(或者可能只让未经身份验证的用户在 Woot-Off 期间看到该项目的图片,并确保您不会总是将相同的图片用于 Random Crap。)我认为 Woot 用户会愿意接受这一点,如果你将其作为一种措施出售以帮助他们获得奶油碗,您还可以指出这将帮助他们更快地结账。其他任何事情——即使是使用验证码——都会受到你典型的军备竞赛的影响。

于 2009-02-13T17:04:16.653 回答
0

构建更好的机器人

市场告诉你一些事情。他们想得到那个袋子或废话。所以与其对抗脚本(RIAA v 文件共享任何人?)构建一个更好的机器人。

为每个人提供一个安装的应用程序,该应用程序与脚本孩子可以组合的任何东西一样好或更好。每次提供垃圾袋时,用户都会安装您的品牌应用程序。该应用程序将自动尝试购买它。如果错过了当前的中银,该应用程序将有一张“票”,以使其有更好的机会进行下一次中银销售。因此,如果用户滚动他们自己的脚本,他们不会获得下一次 boc 销售的“门票”,而官方应用程序的用户却可以获得。

在 boc 销售之间,该应用程序可以显示当前待售物品。地狱,让用户可以告诉woot应用程序寻找“记忆棒”

当官方 woot bo-c+ 脚本应用程序同样好或不好时,谁将构建自己的脚本?

此外,woot 获得了另一种与客户建立联系的方式。

您的客户正在告诉您他们想要什么。

于 2009-02-13T18:48:29.240 回答
0

让用户在原价和高得多的价格之间做出选择。您将必须找到某种方法将按钮与它们各自的价格相关联——颜色、位置,也许是按钮的“情感内涵”——这很难以编程方式确定,但只需要用户将按钮连接到价格。对用户来说简单、直观且无忧,但对脚本编写者来说困难且更重要的是有风险——尤其是在您改变关联方法时。

于 2009-02-13T18:56:01.983 回答
0

如果您愿意强制使用 javascript,则可以使用hashcash方案来要求,例如,每个请求大约需要 30 秒的客户端计算。(当然,这可能是 iPhone 上的 5 分钟或 30 台计算机的僵尸网络上的 1 秒:这是一个很大的缺点。)

您还可以通过使用(混淆的)javascript 或(gag)flash 生成页面来使抓取更加困难。

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

您可以检测“类似机器人”的 IP 地址(通过速率和对蜜罐链接的访问)并将它们重定向到一个特殊的服务器(例如,一个带有额外 CC 验证的服务器,例如“通过签证验证”——或者仅一个带有验证码的服务器。 )

但实际上,这是一场军备竞赛。:) 而且你很可能最终不得不升级甚至超越验证码。

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

于 2009-02-13T20:31:41.567 回答
0

好的,除了答案之外,我还有几个问题,因为我没有使用该技术的经验,不知道它是否可以/会起作用或会有所帮助。

具有以下目标:
1. 将项目出售给不会编写脚本的人。
2. 保持网站以不被机器人减慢的速度运行。
3. 不要让“普通”用户完成任何任务来证明他们是人类。

我的问题是:
-。Flash 应用程序、Java 小程序、Silverlight 或类似的东西是否会降低屏幕抓取的难易程度,足以减少机器人的影响?
我很好奇这些是否像典型的 javascript/html 一样对外部操作开放。虽然它不是 Web 开发的标准,并且从 SEO 的角度来看可能不是“好”,但如果您拥有数百万用户,听起来搜索可见性不是您的问题。我相信这些中的任何一个仍然可以提供一个非常漂亮的界面,这样你的人就不会被设计所推迟。

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

哦,还有其他一些回应中提到的第二件事。不要错过您拥有的大好机会:您对 Bots 有很多需求,而那些拥有 Bots 的人真的买对了吗?你还想要他们的钱吗?(因为如果没有,我会接受它。)

这些使用 Bots 的人是否有其他选择可以向您购买?把你的垃圾袋分开。

为机器人构建一个 woot 子站点,面向机器人,让脚本编写者获得很多乐趣,并为此付钱给你。卖给他们废话,让他们挑战自己与其他脚本编写者对抗。这是一个完全独立的市场供您使用。

如果他们有另一种选择,他们可以赢得一些东西并获得吹嘘的权利,他们可能不太愿意殴打这个小老头。

于 2009-02-14T08:46:56.807 回答
0

如果这个答案已经提交,请原谅我。有很多答案可以尝试阅读和理解所有这些。

为什么你不能偶尔改变你的购买 API?这不是对人类用户完全透明,并且几乎杀死了大多数机器人购买者吗?

一种实现方式是更改用户在点击“我想要一个”按钮后必须填写并在页面上提交的字段名称。您一年实际卖出多少次 BOC?不是那么频繁。因此,每次 BOC 上市时,对不同的采购 API 进行编程、测试并准备好使用,这不会是一个巨大的编程负担。

只要确保使用旧的和不正确的 API 的机器人不会让您的服务器停机。也许每次也将 BOC 购买 API 托管在不同的服务器上。这样,机器人可以关闭我们人类 BOC 购买者实际上并未使用的服务器。

于 2009-02-18T15:01:17.207 回答
0

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

如果是这样,您最有效的步骤是通过随机编码页面来阻止屏幕抓取,使其看起来相同(种类)但在代码级别始终不同。(使用十六进制代码,java编码,图片,改变周围的代码结构......)

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

混淆机器人的缺点是它也会混淆搜索引擎爬虫。

于 2009-03-07T09:34:38.740 回答
0

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

于 2009-05-15T08:18:06.120 回答
0

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

于 2009-07-12T06:01:41.263 回答
0

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

于 2009-07-12T18:23:10.563 回答
0

您今天将在灯光上赚到足够的钱来支付思科的 CAPTCHA 计划!我们都习惯了他们购买音乐会门票和其他东西。这似乎是公平的。今天的做法让一些人感到不安,并提出了关于彩票或扫地的问题。我相信您在尝试之前已经检查过了,但这并不是购买 BOC 的真正有趣的方式……它消除了所有的兴奋!

首先获得 BOC 或即使在视线范围内也能获得出色的产品会吸引人们到 Woot。如果在等待随机 BOC 出现时没有理由闲逛并购买大量不需要的东西,那么销售额将会下降。CAPTCHA 可能是打败这些人并仍然保持 Woot 兴奋的唯一方法。

上次我是第一个订购 BOC 的人之一,我的第一个订单被丢弃了百万运费,第二个订单通过但后来被从我的帐户中删除。我生气。我离开了 Woot,并没有像过去那样购买物品。我愿意今天再试一次,就这样。我怀疑我将来会不会因为有趣的东西而没有验证码。

有许多网站试图像 Woot 一样。当然,他们达不到你的水平。我发现自己正在阅读产品描述,不是因为我想要该产品,而是我签到甚至是为了笑。我不想看到有人带着更公平的计划进来并夺走你的大部分业务。

只是我的观点。因为我是一名护士,所以我对机器人和计算机几乎一无所知。但我的投票是升级到更高的水平......拥有机器人的人只需要与我们其他人保持一致,这就是方式应该是:) 萝莉

于 2009-07-12T19:28:50.993 回答
0

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

于 2009-07-12T19:38:03.970 回答
0

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

使用验证码,但要幽默。就像 1,000,000 美元的促销活动一样,通过将自己识别为一个人来制作游戏。这在过去将中国银行的“售罄”推迟了一段合理的时间,而像我这样的人们争先恐后地想出输入优惠券代码的相当简单但幽默的难题。

此外,虽然人们无休止地抱怨服务器错误,但他们并没有停止回来。在我看来,BOC 令人兴奋的部分原因在于有无数其他人试图获得一个。如果服务器抛出一个错误,或者一个时髦的页面,这表明我在一群试图获得 1500 种产品中的太多人中的某个地方。

如果你在拼图上投入尽可能多的创造力,而且它足够新颖,它会延迟机器人足够长的时间,让其他人有机会。包含一个作为代码捕获的随机单词,在“我想要一个”和购买页面之间放置一个中间页面,这需要一些独特的人工交互,你已经在那里阻止了机器人,直到他们弄清楚需要发生什么。

• 您没有实施无聊且有时难以阅读的验证码 • 您让流程变得更有趣, • 您减少了实际安全购买服务器的负载 • 您将培训用户他们需要“做”某事以获得 BOC • 您将在临时页面阻止机器人,延迟他们的购买,直到大多数人至少有机会尝试找出有趣但不是非常困难的谜题。
• 由于随机是 BOC 的全部意义所在,一个随机的、不断变化的谜题/任务将与 BOC 的整个音调相匹配。

在您进行实验时,中间页面背后的技术会变得更加先进,可以捕获随机信息以在购买页面中使用。自从

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

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

于 2009-07-12T19:46:55.060 回答
0

对您的特定问题(而不是一般问题)的潜在解决方案是要求用户登录,如果他们想看到“废话”。仅向碰巧登录的用户显示垃圾奖品。所有其他项目可以像往常一样对未登录的用户保持可见。然后,您的忠实用户将被优先考虑废话。

您显然必须将此通知您的用户,可能会通知您这样做是为了增加真实用户发现废话的机会。

如果您的特定问题是机器人为一种特定类型的项目收获,那么请采取限制最少的替代方案,并且只防御该特定攻击。然后,此选项将防止您担心的验证码和可用性问题。

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

如果他们只是为了得到垃圾袋,他们会很快离开,您的页面不会受到巨大的打击。忘记技术含量高的解决方案。

于 2009-07-12T21:57:27.680 回答
0

2件事:

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

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

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

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

于 2009-07-13T00:35:18.413 回答
0

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

于 2009-07-13T02:48:20.087 回答
0

让整个血腥页面成为验证码!
有点像芝麻街……这八样东西,不属于这里……

在屏幕上放置 9 个项目、9 个 HTML 表单、9 个 I WANT ONE 按钮。
(9 只是当天的数字......选择你想让布局看起来仍然不错的任何数字。也许是 12。也许为加载浏览器的分辨率定制一些......)

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

于 2009-07-13T02:52:42.903 回答
0

可能没有灵丹妙药可以对付机器人,但这些建议的组合可能有助于阻止它们,并将它们减少到更易于管理的数量。
如果您需要对以下任何建议进行任何澄清,请告诉我:

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

为什么不每次提供 BOC 时都更改 BOC 的名称和图片?看到 BOC 的最新版本将成为追求乐趣的一部分。

于 2009-07-14T17:57:29.530 回答
0

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

于 2009-10-10T20:12:30.147 回答
0

你正在让这种方式变得艰难。我可能会踢自己,因为我今天刚刚用一个机器人网站从该网站赢得了 BOC,但只是将 RANDOM CRAP 文本放入网站主页上的验证码中。机器人都在寻找文本“RANDOM CRAP”。因此,您基本上只是首先避免触发它们。任何用眼睛看的人都会看到它说“随机废话”。

于 2009-10-28T23:55:05.170 回答
0

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

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

验证码的替代品(无需人工干预)

于 2010-03-06T11:23:35.360 回答
0

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

于 2010-05-25T15:46:02.697 回答
0

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

于 2011-12-20T22:43:26.187 回答
-1

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

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

我想整个表格可以在闪存中?我个人会使用 Java 小程序,因为那是我最喜欢的语言。

于 2009-02-08T08:20:45.650 回答
-1

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

与其向每个人提供特别优惠,不如一次将其提供给随机的 IP 地址集。例如,将 IP 空间划分为 256 个唯一块,在 time=0 时,只允许第一个块中具有 ip 地址的人,在 time=5 秒时,允许来自第一个块和第二个块的人......直到最后一个时间段到了,让大家看到deal。将其随机化的一个想法是根据交易取其 IP 的 md5/sha 的最低有效位加上一些盐。

这将使脚本编写者仍然具有优势,因为他们的响应时间接近于零,并且具有多个 IP 地址的优势,但这意味着给定的机器人不会比另一个客户有任何优势因为他们的 IP 地址,他们比他们“幸运”。

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

于 2009-02-08T09:31:46.147 回答
-1
  1. 将项目出售给非脚本人员。
  2. 不要让“普通”用户完成任何任务来证明他们是人类。

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

我建议将机制更改为拍卖。

于 2009-02-12T19:06:41.047 回答
-1

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

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

查看由EFF编写的这篇文章 以及这个站点(也是由 EFF 编写的),它将根据您User Agent在浏览器中的“测试”您的唯一性。

为了获得更好的唯一性,您可以在来自唯一性和 IP 地址的信息位之间进行比较,以真正将可能性归结为犯罪者/机器人。


也从 EFF 签出这个pdf

于 2010-11-29T20:14:59.017 回答
-1

如何使用多个订单按钮(四个或更多)。image1通过 对它们进行文件命名image4,三个在视觉上是相同的图像(“不要点击这里”),一个是“点击这里”。

对于每次销售,为每个选项随机分配图像#。使它们相当大,这样用户就不会不小心点击错误的。图像将是相同的文件大小。
一旦 IP 单击按钮,任何按钮,它们就会被带到相应的网页(订购过程,或“糟糕,您单击了错误的按钮”),并在 2 分钟后重新访问服务器。

于 2010-12-27T02:47:34.130 回答
-2

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

其次,随机更改您的表格,包括标签。这不是为了欺骗机器人,而是为了让你发现他们的 IP 地址/代理。将条目 xx 次搞砸的东西应该列在该列表中。

最后,如果您发现自己处于必须使用某种人工验证过程的位置,请尝试以下操作:

[ image of a pig ]

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

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

简而言之,您的问题没有“一个”解决方案,不要期望 100% 成功。设定你的目标,将烦恼减少到非常沉闷的咆哮,你应该能够相当快地做到这一点。

于 2009-02-13T02:42:07.503 回答