如何实现Stack Overflow的"你是一个人"的功能吗?

Omu*_*Omu 18 c# asp.net asp.net-mvc

在这个网站上,如果你点击次数过多或发表评论太快或类似的话,你会被重定向到"你是一个人"屏幕.有人知道怎么做类似的事吗?

Rob*_*Rob 10

这几乎可以肯定是一种启发式方法,试图"猜测"用户是某种形式的自动化过程,而不是一个人,例如:

  • 超过"x"要求连续做同样的事情
  • 在"y"时间内不仅仅是"x"动作

通常,"x"和"y"值将被表述为"真实的人"不太可能做的事情,例如:

  • 连续5次编辑相同的答案
  • 在1分钟内向下提出10个问题

一旦你获得了一套规则,你就可以实现一些在每个请求开始时检查它们的代码,无论是在Page_Load中调用的方法,在你的主页中是什么,在asp.net管道中是什么,这是简单的一点!;)


Ari*_*tos 3

这是一个非常好的ASP.NET验证码控件,首先您需要它

http://www.codeproject.com/KB/custom-controls/CaptchaControl.aspx

然后你可以将它与这个想法一起使用,尝试找到dos攻击

http://weblogs.asp.net/omarzabir/archive/2007/10/16/prevent-denial-of-service-dos-attacks-in-your-web-application.aspx

请注意此代码中 if( context.Request.Browser.Crawler ) return false; 行中的错误,它必须返回 true,或者肯定完全删除它。

并将其作为点击或提交的组合。

如果用户在一段时间内点击次数太多,或者提交次数太多,那么您只需打开 capthaControl,如果点击次数太多,则触发 dos attact。这样,您就可以同时获得 2 个解决方案,即防止攻击和验证码。

我自己做了一些类似的东西,但我改变了两者的源代码,以满足我的需要。

一个更有趣的链接,提供了用于 dos 攻击的不同代码。

http://madskristensen.net/post/Block-DoS-attacks-easily-in-ASPNET.aspx

希望这对您有帮助。