`

ASP.NET网站限制访问频率

阅读更多

最近做了一个免费发短信的小网站(http://freesms.cloudapp.net/),但发现最近有人破解了我的验证码,以每3秒/条的速度用我的短信服务来发他的广告。更换验证码程序和过滤关键字只是治标不治本的方法,为了彻底阻止此类事件的发生,我们还是来看一下怎样通过优化程序来实现。

其实同样的程序除了防止别人滥发请求以外,还对预防拒绝服务(DoS)攻击同样适用哦。不妨来看看。

基本目标:限制同一IP访问网站的频率。比如,我们限制为每240分钟来自同一IP的用户最多只能够访问首页40次、其他页面200次。

比如您现在可以打开http://freesms.cloudapp.net/ 这个网站试一试,刷新40次,就可以发现您在4小时内无法再次访问到正确的网站内容了。

基本思想

    1. 用HttpContext.Cache记录访问次数
    2. 将IP值与用户访问方式作为共同的Key,可以对用户的不同访问方式做不同的限制。
    3. 超出限额时调用Response.End()。

具体代码:

一、 定义持续时间

在本例中,我们使用240分钟作为一次限制的时间。

    1. private const int DURATION = 240   

二、定义访问方式枚举

针对不同的访问方式进行不同的限制。在本例中,我们只区分两种访问方式:正常访问与PostBack。在正常应用中,您还可以根据需要增加访问不同页面的限制。

     public enum ActionTypeEnum
         {
             Normal=40,
             Postback=100
         }

三、判断逻辑

      1. 在某IP第一次采用某种访问方式进行访问时,增加Cache的Key=访问方式+IP,返回True
      2. 如果Key已经存在,增加访问次数,返回True
      3. 如果超出次数,返回False
          public static bool IsValid(ActionTypeEnum actionType)
            {
                HttpContext context = HttpContext.Current;
                if (context.Request.Browser.Crawler) return false;
                string key = actionType.ToString() + context.Request.UserHostAddress;

                int hit = (Int32)(context.Cache[key] ?? 0);
                if (hit > (Int32)actionType) return false;
                else hit++;

                if (hit == 1)
                {
                    context.Cache.Add(key, hit, null, DateTime.Now.AddMinutes(DURATION), System.Web.Caching.Cache.NoSlidingExpiration, System.Web.Caching.CacheItemPriority.Normal, null);

                }
                else
                {
                    context.Cache[key] = hit;
                }
                return true;
            }

四、在页面中调用

判断函数需要在页面的OnInit方法中调用。在这里需要使用一些自己定义的逻辑,来进行不同访问方式的判断。下面的例子是一个最简单的,只区分正常访问与Postback。

protected override void OnInit(EventArgs e)
{
    base.OnInit(e);

    if (!IsPostBack)
    {
        if (!ActionValidator.IsValid(ActionValidator.ActionTypeEnum.Normal))
        {
            Response.Write("您发送得太频繁,被系统判断为广告。广告或其他定制业务请联系邮箱admin@cloudera.cn,谢谢。- http://freesms.cloudapp.net");
            Response.End();
        }
    }
    else
    {
        if (!ActionValidator.IsValid(ActionValidator.ActionTypeEnum.Postback))
        {
            Response.Write("您发送得太频繁,被系统判断为广告。广告或其他定制业务请联系邮箱admin@cloudera.cn,谢谢。- http://freesms.cloudapp.net");
            Response.End();
        }
    }
}

PS: 敌人总是狡诈的 ,后来我又发现那个人通过使用代理来变换IP ,继续通过我的服务发送广告。这就要继续优化程序了,比如把广告内容的md5也作为key记录下来。也许您也一样,需要面对各种各样的“敌情”。呵呵,希望本文对您有所帮助!

分享到:
评论

相关推荐

    ASP.NET统计日访问量,总访问量

    - **安全防护**:防止恶意刷访问量,可以通过IP地址过滤、设置访问频率限制等方式进行防护。 在实际应用中,还可以结合其他工具和库,如Google Analytics、Matomo等第三方分析服务,或者使用如ASP.NET MVC的内置...

    asp.net考试系统源码

    1. **模型-视图-控制器(MVC)架构**:ASP.NET MVC是一个用于构建动态网站的模式,它将业务逻辑(模型)、用户界面(视图)和应用程序控制流(控制器)分离,提供更好的可测试性和可维护性。在这个考试系统中,可能...

    留言板asp.net

    ASP.NET是微软公司推出的一种用于构建动态网站、Web应用程序和Web服务的开发框架。它基于.NET Framework,提供了丰富的功能和强大的性能,使得开发者能够更高效地构建网页应用。本篇文章将重点围绕“留言板ASP.NET”...

    ASP.NET制作BBS

    ASP.NET是一种由微软开发的服务器端Web应用程序框架,主要用于构建动态网站、Web应用程序和Web服务。在本项目“ASP.NET制作BBS”中,我们将深入探讨如何利用ASP.NET技术来创建一个功能齐全的在线论坛系统,即BBS...

    asp.net版小程序微信支付接口文件

    ASP.NET版的小程序微信支付接口文件是用于在ASP.NET平台上集成微信支付功能的关键组件,它使得开发者能够方便地在自己的小程序应用中实现安全、便捷的在线支付。此接口文件包括了必要的配置信息以及处理支付请求的...

    ASP.NET仿google智能提示

    - ASP.NET提供了多种数据访问层技术,如ADO.NET、Entity Framework等,可以方便地与数据库进行交互,获取可能的搜索建议。 - 如果数据量较小,也可以考虑将数据存储在内存中或者静态文件中,以提高查询速度。 4. ...

    asp.net 电影网站

    【ASP.NET电影网站详解】 ASP.NET是微软公司推出的一种用于构建动态网站、Web应用程序和Web服务的开发框架。它基于.NET Framework,提供了丰富的功能和工具,使得开发者能够更高效地构建复杂的Web应用,包括我们...

    ASP.NET网络数据库安全性浅析

    ASP.NET是微软开发的一种用于构建动态网站、web应用和web服务的框架。在涉及网络数据库安全性的场景下,ASP.NET提供了多种策略来确保用户数据的安全。本文将深入探讨ASP.NET中与网络数据库安全相关的几个关键知识点...

    ASP.NET在访问Controller的方法带参数时怎样防止黑客攻击示例代码.zip

    在ASP.NET MVC中,可以利用内置的授权机制和角色管理功能来实现细粒度的访问控制。 除了上述提到的安全实践外,开发者还可以采用一系列其他技术来提高应用程序的安全性。例如,对敏感数据进行加密处理、实施安全的...

    asp.net远程采集(组件和源码)

    5. 访问限制处理:有些网站会限制同一IP地址的访问频率,源码可能包含模拟用户代理、随机延迟、IP代理等策略来规避这些限制。 6. 数据存储:采集到的数据通常需要保存,源码可能涉及到数据库操作(如SQL Server、...

    ASP.NET MVC实现的一个访问统计系统源码

    在这个“ASP.NET MVC实现的一个访问统计系统源码”中,我们可以深入学习到如何利用该框架来设计和实现一个功能完备的网站访问统计系统。 首先,MVC(Model-View-Controller)模式是这个系统的基础架构。Model代表...

    asp.net Ajax聊天室实例

    使用ASP.NET的身份验证和授权机制,可以限制未登录用户或不具备特定权限的用户访问聊天室。 8. **界面设计**:良好的用户体验至关重要。使用CSS样式和布局技术,创建一个直观、易用的聊天界面,包括消息输入框、...

    Net实战商用源码---ASP.NET某中学车辆管理系统源码.rar

    ASP.NET提供了内置的身份验证和授权机制,例如Windows身份验证、Forms身份验证等,可以限制不同用户访问特定的资源。在系统中,可能通过角色管理来区分管理员、教师和学生等不同用户的权限。 【Web Forms与控件】 ...

    新浪微博SDK asp.net版源码(可用)

    总之,这个修复优化后的新浪微博SDK for ASP.NET,不仅为.NET开发者提供了一个可靠的工具,也为搭建具有社交媒体功能的网站或应用提供了便利。通过深入理解和运用源码,开发者可以更高效地构建与新浪微博的连接,...

    asp.net 站内搜索

    ASP.NET站内搜索是Web开发中的一个重要功能,它允许用户在网站内部快速查找特定的信息或内容。这个技术交流的主题旨在探讨如何在ASP.NET环境中实现高效、精准的站内搜索功能。下面将详细介绍ASP.NET站内搜索的相关...

    C# ASP.NET 模块 - 防盗链模块

    因此,建议结合其他安全措施,如限制IP访问频率、使用访问令牌等,以提高安全性。 在实际项目中,你可以根据需求进一步扩展此防盗链模块,比如添加日志记录功能,跟踪盗链尝试,或者实现更复杂的规则,比如允许某些...

    asp.net开发 博客代码

    ASP.NET是一种由微软公司推出的高效、开源的Web应用程序框架,用于构建动态网站、Web应用程序和服务。在这个博客代码项目中,我们将深入探讨ASP.NET的核心概念和开发技巧,以及如何利用这些知识来创建一个功能丰富的...

    asp.net 网监IP查询

    ASP.NET 是微软公司开发的一种用于构建Web应用程序的框架,它基于.NET Framework,提供了一种高效、安全和可扩展的方式来创建动态网站、Web服务和Web应用程序。在这个“asp.net 网监IP查询”项目中,我们可以看到一...

    ASP.NET 邮件群发系统开源版

    ASP.NET邮件群发系统开源版是一款基于微软的ASP.NET技术构建的邮件发送平台,它允许开发者或企业进行大规模的电子邮件营销活动。这个系统的核心功能是批量发送电子邮件,同时提供了源代码,使得用户可以根据自身需求...

    asp.net 转盘 游戏 源码

    ASP.NET可以使用SQL Server、SQLite或其他数据库,通过ADO.NET进行数据访问。 5. **动画效果**:为了让转盘有转动效果,开发者可能会使用CSS3动画、JavaScript库(如jQuery)或者更现代的前端框架如React或Vue.js来...

Global site tag (gtag.js) - Google Analytics