scripting - 停止脚本程序, 每秒数百次攻击你的网站

  显示原文与译文双语对照的内容
0 0

[update] 我已经接受了一个答案,lc值得赏金由于thought-out回答,但遗憾的是,我相信我们坚持我们最初的最坏情况的场景: 验证码 everyone onpurchase之废话。 简短的解释:缓存/网络农场实际上使我们无法跟踪,和任何解决方案( 发送一个 non-cached web-beacon,写入一个统一表,等等 ) 比机器人会减慢网站。 可能有一些昂贵的硬件思科或类似,可以帮助在一个较高的水平,但很难证明成本如果CAPTCHAing每个人都是一个选择。 我将尝试做更完整的解释在这里之后,以及为未来的搜索者( 尽管大家欢迎尝试,因为它是社区 wiki ) 清理这个。

我已经向这个问题添加了奖励,并试图解释为什么当前的答案不符合我们的需求。 首先,感谢所有的人认为,这是神奇的集体智慧来帮助完成看似不可能的问题。

我将比以前更清楚一点: 这是关于袋子的垃圾销售 woot.com. 我Woot车间,总统的子公司Woot设计做,写产品描述,播客,博客、论坛和温和派。 我在 css/html世界工作,我对开发者世界的其余部分几乎一无所知。 我与开发人员密切合作,并在这里讨论了所有的答案( 还有很多其他的想法) 。

网站的可用性是一个巨大的一部分,我的工作,并使该网站令人兴奋和乐趣是其余的大部分。 这就是下面三个目标的来源。 CAPTCHA危害可用性,机器人窃取了我们的垃圾销售的乐趣和兴奋。


设置场景多一点,机器人抨击我们的首页数万次 screenscraping ( 和/或者扫描我们的rss ) 随机出售垃圾。 他们看到的那一刻,它触发一个第二阶段的程序,登录时,点击我要一个,填写表单,买垃圾。


按当前的(2/6/2009) 顺序:

lc:stackoverflow和其他网站上使用这种方法,他们几乎总是处理身份验证( 已经登录) 用户,因为尝试的任务要求。

在Woot上,匿名( non-logged ) 用户可以查看我们的主页。 换句话说,敲打僵尸可以是 non-authenticated ( 基本上是 non-trackable,除了IP地址) 。 所以我们回扫描ip,a)是相当无用的在云时代网络和spambot僵尸和b)吸引了太多无辜的人,会有很多的企业( 更不用说 non-static IP isp的问题和潜在的性能问题,试图追踪这个问题) 来自一个ip地址。

哦让人们打电话给我们会是最糟糕的场景。 我们能让他们打电话给你?

BradC Ned Batchelder方法看起来很酷,但是他们非常坚定地设计打败机器人建造的网络站点。 我们的问题是僵尸机器人是专门用来破坏我们的站点的。 其中有些方法可能工作一段时间,直到scripters进化机器人忽视蜜罐,screenscrape附近的标签名称而不是形式id,并使用javascript-capable浏览器控制。

lc再次除非,当然,宣传是你的一部分

时间:原作者:31个回答

0 0

如何实现类似于captcha的实现?

如果你正常使用站点,你可能永远都看不到。 如果你经常重新加载相同的页面,过快的发表评论,或者其他触发提醒的东西,让他们证明他们是人。 在你的情况下,这可能是常数重新加载相同的页面,在页面上的每一个环节,或填写订单形式太快是人类。

如果它们在一行( 例如 2或者 3 ) 中检查x 次失败,请给这个IP一个超时或者其它的度量值。 然后,在超时时,将它们再次转储到检查。


由于你已经注销了访问该站点的用户,所以你只需要使用 ip 。 你可以向每个浏览器发出会话,如果你愿意,也可以跟踪。 当然,抛起human-check如果太多( vt - ) 在继任( 如果一个机器人不断删除 cookie ) 创建会话。

要捕获太多无辜的内容,你可以在human-check页面上提交免责声明: "如果有太多匿名用户从同一位置查看我们的站点,则可能会出现这里网页。 我们鼓励你注册或者登录以避免这里问题。"( 适当调整措辞。)

另外,从一个IP同时加载同一个页面的机率是多少? 如果它们很高,也许你需要一个不同的触发机制来提醒你的僵尸警报。


编辑:另一个选项是如果他们失败太多,你对产品的需求有信心,阻止他们,让他们亲自打电话给你。

电话让人们看起来像一个愚蠢的措施,但它确保计算机后面有人类的地方。 关键是让块只适合于一个应该永远不会发生的条件,除非它是一个机器人( 例如。 在一行中多次检查失败。 然后它迫使人类交互——拿起电话。

为了回应他们给我打电话的评论,显然这里有权衡。 你是否担心确保用户在销售时接受几个电话电话? 如果我是如此关心一个产品进入人类用户,我不得不做出这个决定,也许牺牲( 小) 一点时间。

因为你似乎决定不让机器人获得上/下的upper,我相信电话可能是一个不错的选择。 因为我没有从你的产品中获利,所以我对接收这些电话不感兴趣。 如果你愿意分享一些利润,我可能会感兴趣。 因为这是你的产品,你必须决定你有多在意和实现。


释放块的其他方法无效: 超时( 但他们会让你的网站再次崩溃,rinse-repeat ),长时间超时( 如果真的是一个人试图购买你的产品,他们就会因为失败而被处罚),电子邮件( 轻松由机器人完成),传真( 相同) 或者 snail mail ( 花费太长时间) 。

当然,你可以在每次获得超时时,将每个IP的超时周期增加。 确保你没有在无意中惩罚真正的人类。

原作者:
0 0

你需要找到一种方法来让机器人购买大量昂贵的东西: 12 mm wingnut: $20.在script-writers决定你的游戏之前,请查看多少个机器人会捕捉到它们。

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

原作者:
0 0

我的解决方案将使screen-scraping成为无价值的,因为它为'bot和脚本putting提供大约 10分钟的延迟。

下面是我的方法:

  • 日志并识别任何重复的击球手。

你不需要记录每个点击的每个IP地址。 只跟踪每 20个点击中的一个。 重复的occassional仍会出现在随机跟踪中。

  • 保持页面的缓存从 10 -minutes早。

  • repeat-hitter/机器人访问你的站点时,给他们 10 -minute旧缓存页面。

他们不会立即知道他们正在获取一个旧站点。 他们将能够抓取它,所有的东西,但是他们不会赢得任何比赛,因为"真正的人"有 10分钟的head-start 。

的好处:

  • 用户( 像 captcha ) 没有问题或者问题。
  • 完全在server-side上实现。( 不依赖于 javascript/Flash )
  • 为一个较旧的缓存页面提供服务的性能比活动页面低。 你实际上可以这样减少服务器上的负载 !

的缺点

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

你怎么看?

原作者:
0 0

看一下的本文,这里是 ned 。Batchelder 。 他的文章是关于停止垃圾邮件,但是同样的技术可以很容易地应用到你的站点。

而不是停止机器人让人们识别自己,我们可以停止机器人使他们很难做一个成功的帖子,或者通过他们无意中认为自己是机器人。 这将减轻人们的负担,并使评论形式无可见的anti-spam度量。

这里技术是我如何防止垃圾邮件在这里网站上。 它是有效的。这里描述的方法并不关注。

其他一些想法:

  • 创建一个官方 auto-notify机制(rss提要? Twitter) 当你的产品上市时,人们可以订阅。 这就减少了需要来制作脚本。
  • 改变你的模糊技术之前新项目上市。 因此,即使scripters可以升级军备竞赛,它们总是落后一天。

编辑:要完全清除,上面的文章描述了防止自动购买项目的方法,防止BOT通过表单提交订单。 他的技术将不会用于防止机器人screen-scraping主页来确定当Bandoleer胡萝卜出售。 我不确定这是不是真的可能。

关于你对策略有效性的评论: 是的,他讨论了蜜罐,但我认为这不是他的强项。 他对微调的讨论是我提到他文章的原始原因。 抱歉,我在原始帖子中没有这么清晰:

微调器是一个隐藏字段,用于以下几个方面: 它将一些值组合在一起,防止篡改和重放,并用于隐藏字段名。 微调器是一个MD5哈希值:

  • 时间戳
  • 客户端地址的IP,
  • 正在评论的博客条目的条目标识,
  • 一个秘密。

你可以在 WOOT.com: 上实现它

每次销售新项目时更改用作哈希的"秘密"值。 这意味着如果有人要设计一个机器人到auto-purchase的项目,它只能工作,直到下一个项目来销售

即使有人能够快速 re-build,所有其他实际用户都已经购买了 BOC,你的问题就迎刃而解了 !

他讨论的其他策略是变化蜜罐技术不时( 再次,当一个新项目上市时更改它):

  • 使用CSS类( 随机课程) 将字段或者包含元素设置为 display:none 。
  • 将字段与页面背景相同的( 或者类似于) 颜色。
  • 使用定位将字段移出页面可见区域。
  • 使元素太小,无法显示包含的蜜罐字段。
  • 使字段可见,但使用定位将它的覆盖为模糊元素。
  • 使用Javascript来影响这些更改,需要一个机器人拥有完整的Javascript引擎。
  • 让光标像其他字段一样显示,但是告诉人们不要输入任何内容。

我想我的总体想法是在每一个新项目上市时改变表单设计。 或者至少在新的BOC上市时更改它。

这就是什么,几次/月?

如果你接受了这个问题,你会给我一个下次到期时的提醒? : )

原作者:
0 0

问:你如何阻止scripters每秒slamming次点击你的站点?
你不。没有办法防止这种行为由外部代理。

你可以雇佣大量的技术分析传入的请求和一些试图确定是谁,不是人类。但它会失败。 最终,如果不是立即。

唯一可行的长期解决方案是改变游戏这网站不是bot-friendly,或者是scripters缺乏吸引力。

对于此我们应如何取舍? 这是个不同的问题 ! ;- )

好的,一些选项已经在上面给出了( 并被拒绝) 。 我不熟悉你的网站,只看着它一次,但因为人们可以阅读文本图像和机器人无法轻易做到这一点,改变公告是一个形象。 不是一个 CAPTCHA,只是一个图像-

  • 在请求页面时生成图像( 缓存的课程)
  • 保持图像源名称相同,这样就不会让游戏消失
  • 大多数时候,图像将普通的文本,并对齐似乎内联html页面的一部分
  • 当游戏为'上'时,图像会更改为公告文本
  • 公告文本显示了一个url和/或者代码 ,必须手动输入以获得奖品。 验证码如果你喜欢,但这可能不需要。
  • 为了增加安全性,代码可以是专门为 request/IP/agent, 生成的一次性令牌,以便重复请求生成不同的代码。 或者你可以pre-generate一群随机码( 一次性 pad ) 如果on-demand代太费力。

运行到这里,而忽视('time-trials的真人响应哎呀,出现了一个错误,对不起 ! 请再次尝试') 响应的速度比这里时间的一半快。 此事件还应该触发警报到开发者,至少有一个僵尸已经解决了难题,因此现在是时候要更改代码/代码/游戏游戏。

继续定期改变游戏,即使没有机器人触发它,只是为了浪费scripters的时间。 最终这个scripters应该轮胎的游戏,然后转向别处。。人们期待;- )

一个 final 建议当有人请求做你的主页面进来,或许把它在一个队列按顺序在一个单独进程( 你可能必须哈克/扩展网络服务器执行这里操作,但它可能会是值得的,) 和响应该请求。 当第一个请求在队列中时,来自同一个 ip/代理的另一个请求出现,忽略它。 这应该会自动从机器人中去掉负载。

编辑,这个使用了另一种选择,除了图像都可以使用javascript来填写购买/no-buy文本的话,聊天机器人( bot ) 很少理解的javascript,这样他们就不看到它

原作者:
0 0

我不知道这是如何可行的: 。继续攻击。

找出机器人扫描的数据。 当你不销售垃圾时给他们提供他们想要的数据。 用不会打扰或者混淆人类用户的方式来做。 当机器人触发第二阶段时,他们会登录并填写表单以购买 $100 roombas而不是 BOC 。 当然,这意味着机器人不是特别健壮。

另一个想法是在包的销售周期内实现随机降价。 当你清楚地说它是值得的时候,谁会为 $150买一个随机的包? 除了热心的机器人之外,没有人。但是 9分钟后,它是 $35美元。。 然后 17分钟后,它是 $9. 或者别的。

当然僵尸之王可以做出反应。 关键是让他们的错误变得非常昂贵,( 让他们付钱给你) 。

所有这些都假设你想惹恼一些僵尸高手,这可能不是 100% 。

原作者:
0 0

所以问题似乎是: 机器人想要他们的"包'crap,因为它在低感知的价格上具有很高的感知价值。 你有时会提供这个项目,机器人会潜伏,等待看看它是否可用,然后购买该项目。

因为它看起来像机器人所有者盈利( 或者潜在的利润), 关键是要让这个对他们无利可图通过鼓励买垃圾。

首先,总是提供"包'o废话"。

其次,确保垃圾通常是垃圾。

第三,经常旋转垃圾。

简单,没有?

你将需要一个永久的"为什么我们的垃圾有时垃圾"链接来向人们解释正在发生的事情。

当机器人看到垃圾和垃圾被自动购买时,接收者会感到非常沮丧,因为他们支付了 $10的坏牙签。 然后是一个空垃圾袋。 然后你鞋底的一些污物。

如果他们买足够的垃圾在相对较短的时间内( 你在这里到处都有大量的免责声明解释你为什么这么做), 他们将失去一个公平"包'o现金""包'o废话"。 如果你经常旋转垃圾,即使是人工干预也会失败。 糟糕,也许机器人会注意到,而不会购买任何东西,因为它在旋转过短的时间内,但这意味着人类会购买 non-crap 。

糟糕,你的普通客户可能很高兴,你可以把这变成一个巨大的营销胜利。 开始发布多少"垃圾"carp正在出售。 人们会回来看看僵尸被咬了多少。

的更新: 我期望你能提前接到一些投诉。 我认为你不能完全停止。 但是,如果这杀死了机器人,你可以随时停止它,然后重启它。

原作者:
0 0
  1. 将项目卖给non-scripting人。

  2. 保持站点运行速度不受机器人速度减慢。

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

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

On the Internet, nobody knows you're a dog

没有人知道你是个机器人。 没有预先编程的方法来告诉连接的另一端是否有人,而不要求人做某事。 防止脚本/机器人在网络上做的事情是验证的整个原因。 这不是一个新的问题,它没有看到大量的努力。 如果有更好的方法来做到这一点,一个没有涉及到真正的用户的问题,那么每个人都会使用它。

我认为你需要面对的事实是,如果你想让机器人远离你的排序页面,一个好的CAPTCHA是唯一的方法。 如果需求为你随机废话足够高,人们愿意去这些长度,合法用户不会推迟一个验证码。

原作者:
0 0

Woot方法用来解决这一问题是改变游戏——字面上。 当他们呈现的是一个非常理想的物品出售,他们让用户玩游戏为了订单。

不仅成功的战斗机器人( 他们可以很容易地作细微改动游戏为了避免自动球员,甚至为每个销售提供一个新游戏) 但它也给用户的印象"获奖"所需的物品而减慢订购流程。

它仍然销售很快,但我认为解决问题的很好——re-evaluating和改变参数导致一个成功的策略,严格技术解决方案根本不存在。


- business model is on"先来,先服务。"you can not do what radio crisis did ( 他们不再让第一个调用者赢家,他们使 5 th 20th或 13th获胜者) - it does not match Your primary feature.

不,没有改变真实用户的订购体验,就没有办法做到这一点。

假设你实现了所有这些策略。 如果我决定,这是很重要的,我只会让 100人与我合作,我们将构建软件工作 100单独的电脑,点击你的网站 20次( 每个 user/cookie/account/IP 5秒之间的访问地址) 。

你有两个阶段:

  1. 正在查看首页
  2. 顺序

你不能把一个验证码阻塞 #1 ——即会失去实际客户("什么? 我必须解开一个验证码,每次我想看最新的woot") 。 !

所以我的手表,小团队定时在一起所以我们每秒获取有关 20检查,谁首先警告所有的其他人( 自动) 随之改变,谁可以重新加载首页一次,按照如下的步骤进行链接,并执行事务( 于实现的每个 wootoff/boc,这也可能自动发生,除非相关验证码并将它的更改为) 。

你可以把一个验证码 #2,的前面,而你是讨厌来做这一点,那这可能是惟一的方法,能够确保产品即使真实聊天机器人( bot ) 看下你的首页,用户最反感的了。

但即使有 100验证码我的小乐队,仍然可以得到显著的先行者优势- 但是没有任何方法你可以断定我们不是人类。 如果你开始计时我们的访问,我们会增加一些抖动。 我们就可以随意的选择哪台计算机是要刷新,因此足够的顺序访问的变化在不断- 但仍然看起来像一个人类。

首先,去掉简单的机器人

方面你需要有一种自适应防火墙,能够监视请求并如果有人正在做愚蠢的事情。- 刷新多次第二次在同一IP运用的策略来降低转速下( 丢弃数据包,发送拒绝的或者 500个错误等) 。

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

第二,使服务器blazingly快速。

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

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

你无需费心使用 tcp/ip协议栈,但是你可能需要开发一个非常,非常,非常快的自定义服务器,最终建成使之相互关连用户连接并适当做出反应以各种攻击。

Apache,lighthttpd等等,这些都是很棒的,比如能灵活,还有可能面临一种目的网站,并且你是否比当前的服务器都能够做( 在处理流量和适当地对抗机器人时)的。同时需要能够做更多的事情

你不应该只是由于处理上的静态网页( 每隔 30秒更新一次) 在很大程度上自定义服务器能够处理 10 x的请求数和流量( 因为服务器除了获取请求,并且从内存中读取页面到 tcp/ip缓冲区之外,没有做任何其他事情),但它将给你对指标,这可能有助于减缓漫游器的访问。 例如通过关联IP地址,你可以在每个IP每秒阻塞多个连接。 人类可以更不能快了,甚至人们不经常使用相同的NATed IP地址才会被阻塞。 于整整1 秒相关离开孤单的连接,再将它的正式终止了一个慢session,你想用这个的机体- 这可以给防火墙提供更长的期限,尤其是严重的违规者。

于单个purpose,相关但实际情况是无论你做什么,那都没有办法让一个人在human.除了一个机器人当机器人这个是特制的, 这个机器人只是人类的一个代理。

结束语

于观看前page,相关的最后一天,你不能告诉一个人或者一台电脑 apart. 在进行排序的排序步骤,但你可以停止机器人机器人这个用户仍然拥有先行者优势,你仍然有一个巨大的负载来管理。

你可以添加区块为简单的聊天机器人( bot ),这将提高门槛,更少的打扰与之人士使用。 那就足够了。

但没有改变你的基本模型,你的运气就差了。 好的你能做的就是先处理简单的情况下,提前那么快一般用户不注意,甚至出售非常多的东西,因为它的服务器如果你有几百万漫游,尽可能多常规用户,希望他们会得到他们。

你可能会考虑设置一个蜜罐和用户帐户标记为僵尸用户,但这将有一个很大的负的社区的社会反弹。

每次我想到"那么,这样做怎么样。"时,总能用合适的bot策略来应对它。

即使你做的首页一个验证码前往此种排序的顺序页("项本页中按钮是蓝色带粉红色,某处火花") 机器人会转身只需打开页面上的所有的链接,并使用打印头无论哪种编码,在一个订购页面。 这不是赢得这一切的方法。

使服务器快,将它的放入 reCaptcha ( 于你的application,相关,是一个不容易搞错,但它可能是我拥有的唯一一张找到的方式太慢了) 稍在订购页面上,并考虑一些方式来修改该模型,这样一般用户有那么好一个机会作为僵尸用户。

-Adam

原作者:
0 0

免责声明:这个答案完全是 non-programming-related 。 但是,它试图在第一个地方攻击脚本的原因。

另一个想法是,如果你真的有有限数量的销售,为什么你不从first-come-first-served方法中改变它? 当然,除非宣传是你营销方案的一部分。

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

  • 排序队列( pre-order系统) - 一些脚本可能仍然位于队列的前面,但手动输入信息可能会更快。

  • 一个抽奖系统( 每个试图订购的人都进入系统) - 这种方式的人和那些没有。

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

  • 拍卖( 对于这个问题,我的评论是 credit ) - 人们仍然可以在最后一分钟使用脚本,但它不仅改变了定价结构,而且人们也希望与其他人对抗。 你也可以做一些事情来限制在给定时间段内的出价数量,让人们提前打电话给一个授权代码等。

原作者:
...