在此网站上,如果您点击次数太多或发表评论太快或类似的话,您会被重定向到“你是一个人”屏幕。有人知道如何做类似的事吗?
答案 0 :(得分:10)
这几乎可以肯定是一种启发式方法,试图“猜测”用户是某种形式的自动化过程,而不是一个人,例如:
通常情况下,“x”和“y”值将被表述为“真实的人”不太可能做的事情,例如:
一旦你获得了一套规则,你就可以实现一些在每个请求开始时检查它们的代码,无论是在Page_Load中调用的方法,还是在你的母版页中调用的东西,在asp.net中的东西管道,这很容易! ;)
答案 1 :(得分:3)
答案 2 :(得分:3)
对于asp.net,这是一个非常好的 Captcha Control ,首先是你需要的
http://www.codeproject.com/KB/custom-controls/CaptchaControl.aspx
然后你可以将它与这个试图找到 dos攻击的想法一起使用
如果(context.Request.Browser.Crawler)返回false,则在此代码中存储错误;它必须返回true,或者完全删除它。
并根据点击次数或提交内容进行操作。
如果用户在一段时间内进行了太多点击,或者多次提交,那么您只需打开capthaControl,如果点击次数太多,那么就会触发dos。通过这种方式,您可以同时拥有2个解决方案,Dos阻止,同时使用验证码。
我已经做了类似于我自己的事情,但我已经改变了两者的源代码,以满足我的需求。
针对dos攻击的不同代码的另一个有趣链接。
http://madskristensen.net/post/Block-DoS-attacks-easily-in-ASPNET.aspx
希望这对你有所帮助。
答案 3 :(得分:2)
猜测......
编写一个记录请求并将其存储在会话中的HTTP处理程序。
当有新请求进入时,请检查存储了多少请求(并使旧请求过期)。
如果过去几分钟内的请求数量超过了给定的阈值,请重定向用户。
如果您在ASP.NET网页表单中执行此操作,则可以在网站母版页上执行此操作(或编写IHttpHandler
)。
如果您正在使用MVC框架,则可以编写一个基本控制器来检查每个操作。
使用rails,您可以编写before_request
过滤器。
使用asp.net MVC,您可以编写[ActionFilterAttribute]
属性
答案 4 :(得分:2)
您应该有一个会话来跟踪用户活动。
在会话中,您可以使用计数器进行评论和发布,如:
(伪代码而不是C#,抱歉:)
if (post_event) {
posts_during_1_minute_interval++;
if (time_now-reference_time > 1_minute) {
reference_time = time_now;
posts_during_1_minute_interval=0;
}
}
...
if (posts_during_1_minute_interval > 10) redirect("/are-you-human.htm");
在are-you-human.htm页面上,您可以拥有recaptcha,就像他们在StcakOverflow.com上一样
另见:http://blog.stackoverflow.com/2009/07/are-you-a-human-being/
答案 5 :(得分:1)
只需检查您从特定IP或会话中获得的点击/分钟数或其他数量,并确定您的首选门限和优势
答案 6 :(得分:-2)
我还会检查请求的用户代理标头 - 如果它看起来不像一个流行的浏览器(或是空的)那么抛出“你是一个人吗?”页。