我们认为Stack Overflow不仅应该是非常具体的技术问题的资源,而且还应该是关于如何解决常见问题变化的一般指导原则."基于表单的网站身份验证"应该是这种实验的一个很好的主题.
我已经接受了答案,但遗憾的是,我相信我们仍然坚持我们最初的最坏情况:CAPTCHA每个人都在购买废话的尝试.简短说明:缓存/ Web场无法跟踪命中,任何解决方法(发送非缓存的Web信标,写入统一表等)都会使网站的速度比机器人更慢.思科等可能有一些昂贵的硬件可以提供高水平的帮助,但如果每个人都可以选择CAPTCHA,那么很难证明成本是合理的.我稍后会尝试更全面的解释,以及为未来的搜索者清理它(尽管欢迎其他人尝试,因为它是社区维基).
这是关于woot.com上的包装销售情况.我是Woot Workshop的总裁,Woot是Woot的子公司,负责设计,撰写产品说明,播客,博客文章以及审核论坛.我使用CSS/HTML,我只是熟悉其他技术.我与开发人员密切合作,并在这里讨论了所有答案(以及我们已经拥有的许多其他想法).
可用性是我工作的重要组成部分,使网站令人兴奋和有趣是其余部分.这就是下面三个目标的来源.CAPTCHA损害了可用性,机器人从我们的垃圾销售中窃取了乐趣和兴奋.
对于随机垃圾销售,机器人在第二次屏幕抓取(和/或扫描我们的RSS)时数十次关闭我们的头版.他们看到的那一刻,它触发了登录程序的第二阶段,点击我想要一个,填写表格,并购买废话.
lc:在stackoverflow和其他使用此方法的站点上,它们几乎总是处理经过身份验证的(已登录)用户,因为正在尝试的任务需要这样做.
在Woot上,匿名(未登录)用户可以查看我们的主页.换句话说,砰击机器人可以是非认证的(并且除了IP地址之外基本上是不可跟踪的).
所以我们又回到了扫描IP,其中a)在这个云网络和spambot僵尸时代相当无用,以及b)因为来自一个IP地址的企业数量而吸引了太多的无辜者(更不用说与非静态IP ISP和潜在的性能命中试图跟踪这个).
哦,让人们打电话给我们将是最糟糕的情况.我们可以让他们打电话给你吗?
BradC:Ned Batchelder的方法看起来很酷,但它们的设计非常坚固,可以击败为网站构建的机器人.我们的问题是机器人是专门为打败我们的网站而构建的.其中一些方法可能会在很短的时间内工作,直到脚本编写者发展他们的机器人忽略蜜罐,屏幕刮擦附近的标签名称而不是表单ID,并使用支持javascript的浏览器控件.
lc:"当然,除非炒作是你营销计划的一部分." 是的,肯定是.当项目出现时的惊喜,以及如果你设法获得一个项目的兴奋可能与你最终得到的垃圾一样重要或更重要.任何消除先到先得的东西都不利于"赢得"垃圾的快感.
novatrust:我是一个人,欢迎我们新的机器人霸主.我们实际上提供RSSfeeds以允许第三方应用程序扫描我们的网站以获取产品信息,但不会超出主站点HTML.如果我正确地解释它,你的解决方案确实通过完全牺牲目标1来帮助目标2(性能问题),并且只是辞去机器人将购买大部分垃圾的事实.我对你的回复进行了投票,因为你的最后一段悲观情绪对我来说是准确的.这里似乎没有银弹.
其余的响应通常依赖于IP跟踪,再次,这似乎无用(使用僵尸网络/僵尸/云网络)和有害(捕获来自同一IP目的地的许多无辜者).
还有其他方法/想法吗?我的开发人员一直在说"我们只是做CAPTCHA",但我希望所有真正想要我们废话的人都会采用较少侵入性的方法.
假设您正在销售具有很高感知价值的便宜货,并且您的数量非常有限.没有人确切知道你何时会出售这件物品.超过一百万人经常来看看你卖的是什么.
你最终会得到脚本编写者和机器人试图以编程方式[a]弄清楚你卖的东西,并且[b]确保他们是第一个购买它的人.这很糟糕有两个原因:
一个看似显而易见的解决方案是为您的用户创建一些环节,以便在下订单之前跳过,但至少有三个问题:
另一种解决方案是监视IP经常发生的攻击,阻止它们进入防火墙,或以其他方式阻止它们进行排序.这可以解决2.并且防止[b],但是扫描IP的性能是巨大的,并且可能会导致比脚本编写者自己造成的更多问题.此外,云网络和spambot僵尸的可能性使IP检查相当无用.
第三个想法,迫使订单表格被加载了一段时间(比如说,半秒钟)可能会减慢快速订单的进度,但同样,脚本编写者仍然会成为第一批人,无论如何都不会对实际用户.
我看到有几个.哪些是维护和易于使用?它们的优缺点是什么?
有没有使用任何编程方法来击败reCAPTCHA?
我很有兴趣看到证据和潜在的演示,特别是reCAPTCHA已被完全自动化,无人化的方法淘汰.
澄清一点,不是寻找以任何方式涉及人类的reCAPTCHA作弊解决方案,是否负责填写CAPCHA,色情搜索者或Mechanical Turk.
我也不是在寻找reCAPTCHA的替代品,比如选择动物类型,或者背景字段或javascript技巧.
我刚刚阅读这篇文章关于防止快速登录尝试的基于表单的网站身份验证的权威指南.
最佳实践#1:短暂的时间延迟随着尝试失败的次数而增加,例如:
1次尝试失败=无延迟
2次尝试失败= 2秒延迟
3次尝试失败= 4秒延迟
4次尝试失败= 8秒延迟
5次尝试失败= 16秒延迟
等
DoS攻击这个方案将是非常不切实际的,但另一方面,可能具有破坏性,因为延迟会呈指数级增长.
我很好奇我如何在PHP中为我的登录系统实现这样的东西?
显然,某种限制登录尝试的机制是安全必需的.虽然我喜欢尝试之间指数增加的时间概念,但我不确定存储信息.我也对替代解决方案感兴趣,最好不要包括验证码.
我猜测由于阻止cookie或自动清除cookie而无法使用cookie,但是会话会有效吗?或者是否必须存储在数据库中?不知道可以使用什么方法,所以我根本不知道什么是实用的.
我想阻止机器人攻击弱密码保护帐户.(例如,这发生在ebay和其他大型网站上)
所以我将设置一个(mem-)缓存值,包括ip,尝试次数和上次尝试的时间戳(memcache-fall-out).
但是如果机器人试图用一个密码打开任何帐户呢?例如,机器人尝试使用密码"password123"的所有500.000 Useraccounts.也许10会开放.
所以我的尝试是用try尝试缓存ip并将max-try设置为~50.我会在成功登录后删除它.因此,好机器人只需每49次尝试重置锁定就可以使用有效帐户登录.
有没有办法做对吗?大平台对此有何看法?我该怎么做才能防止白痴通过重试50次来阻止代理上的所有用户?
如果没有最佳实践 - 这是否意味着任何平台都是强力的?至少提示何时重置计数器?
security ×5
captcha ×2
article ×1
bots ×1
brute-force ×1
codeigniter ×1
detection ×1
e-commerce ×1
honeypot ×1
http ×1
login ×1
ocr ×1
passwords ×1
php ×1
recaptcha ×1
scripting ×1
throttling ×1