最近做了一个免费发短信的小网站(http://freesms.cloudapp.net/),但发现最近有人破解了我的验证码,以每3秒/条的速度用我的短信服务来发他的广告。更换验证码程序和过滤关键字只是治标不治本的方法,为了彻底阻止此类事件的发生,我们还是来看一下怎样通过优化程序来实现。
其实同样的程序除了防止别人滥发请求以外,还对预防拒绝服务(DoS)攻击同样适用哦。不妨来看看。
基本目标:限制同一IP访问网站的频率。比如,我们限制为每240分钟来自同一IP的用户最多只能够访问首页40次、其他页面200次。
比如您现在可以打开http://freesms.cloudapp.net/ 这个网站试一试,刷新40次,就可以发现您在4小时内无法再次访问到正确的网站内容了。
基本思想:
-
- 用HttpContext.Cache记录访问次数
- 将IP值与用户访问方式作为共同的Key,可以对用户的不同访问方式做不同的限制。
- 超出限额时调用Response.End()。
具体代码:
一、 定义持续时间
在本例中,我们使用240分钟作为一次限制的时间。
-
private const int DURATION = 240
二、定义访问方式枚举