博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
防cc攻击策略
阅读量:5145 次
发布时间:2019-06-13

本文共 4054 字,大约阅读时间需要 13 分钟。

黑客攻击你的网站,会采取各种各样的手段,其中为了降低你网站的访问速度,甚至让你的服务器瘫痪,它会不断的刷新你的网站,或者模拟很多用户同一时间大量的访问你的网站,

这就是所谓的CC攻击,这就需要我们在程序里添加一些防CC攻击的策略代码,下面就来介绍一下自己最近写的一段代码,拿来供大家分享:

using System;using System.Configuration;using System.Data;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.HtmlControls;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.IO;public partial class _Default : System.Web.UI.Page{    string getIp = null;    protected void Page_Load(object sender, EventArgs e)    {        if (!IsPostBack)        {            GetCC();        }    }    //放CC攻击    public void GetCC()    {        string FYCC_05 = "";        //'CCLog.txt存放的路径文件夹!需要手动创建!建议留空        //'如果输入,请在前面加上符号"/"        int FYCC_18 = 1;        //'防刷新频繁CC攻击关闭与启动,1为启动0为关闭        int FYCC_17 = 1;        //'防刷新禁止IP功能关闭与启动,1为启动0为关闭        int FYCC_19 = 6;        //'每分钟刷新次数,将会出现提示        string FYCC_20 = "http://www.163.com";        //'被封IP后自动转入的页面,建议输入存放病毒的网址!!!        int FYCC_21 = 12;        //'恶意刷新几次将禁止IP        string realip = Request.ServerVariables["HTTP_X_FORWARDED_FOR"];//获得代理ip        string proxy = Request.ServerVariables["REMOTE_ADDR"];//获得普通ip        // getIp = GetIP();        if (realip == null)        {            getIp = proxy;        }        else        {            getIp = realip;        }        string path = Server.MapPath("~/");        if (!System.IO.File.Exists(path + "/CCLOG/CCLOG.txt"))        {            System.IO.File.CreateText(path + "/CCLOG/CCLOG.txt");        }        StreamReader reader = new StreamReader(path + "/CCLOG/CCLOG.txt");        string readFile = reader.ReadToEnd();        reader.Close();        if (readFile.Contains(getIp))        {            Response.Write("您的IP" + getIp + "已经被禁止!如需要解封,请联系本站管理员')");            Response.End();        }        if (Convert.ToInt32(Session["FYCC_01"]) > FYCC_19 && DateTime.Now.Minute != Convert.ToInt32(Session["FYCC_02"]))        {            Session["FYCC_01"] = "1";            Session["FYCC_02"] = DateTime.Now.Minute.ToString();        }        else if ((Convert.ToInt32(Session["FYCC_01"]) > FYCC_21 - 1) && (DateTime.Now.Minute == Convert.ToInt32(Session["FYCC_02"])))        {            if (FYCC_17 != 0 & Convert.ToInt32(Session["FYCC_01"]) > FYCC_21 - 1)            {                OperationFile();            }            Response.Redirect("http://www.baidu.com");        }        else if ((Convert.ToInt32(Session["FYCC_01"]) > FYCC_19) && (DateTime.Now.Minute == Convert.ToInt32(Session["FYCC_02"])))        {            Response.Write("本站启动防刷新功能,1分钟内只能翻" + FYCC_19 + "页,请在下一分钟再刷新本页面");            Session["FYCC_01"] = (Convert.ToInt32(Session["FYCC_01"]) + 1).ToString();            Response.End();        }        else        {            if (Session["FYCC_01"] == "")            {                Session["FYCC_01"] = "1";                Session["FYCC_02"] = DateTime.Now.Minute.ToString();            }            else            {                if (DateTime.Now.Minute != Convert.ToInt32(Session["FYCC_02"]))                {                    Session["FYCC_01"] = "1";                    Session["FYCC_02"] = DateTime.Now.Minute.ToString();                }                else                {                    Session["FYCC_01"] = (Convert.ToInt32(Session["FYCC_01"]) + 1).ToString();                }            }        }    }    //向文件中添加Ip    private void OperationFile()    {        string path = Server.MapPath("~/");        if (!System.IO.File.Exists(path + "/CCLOG/CCLOG.txt"))        {            System.IO.File.CreateText(path + "/CCLOG/CCLOG.txt");        }        StreamWriter w = File.AppendText(path + "/CCLOG/CCLOG.txt");        w.WriteLine(getIp);        w.Close();    }}

原理很清晰,简单的说一下:

当刷新的时候就记录他的刷新数,一分钟之内达到你设定的值,比如30次就给给予提示,不能频繁刷新,过下一分钟在刷新就好了,然后刷新数从头开始计算,假如恶意刷新很多次,就记录她的IP,然后将其封掉,只能联系管理员才能解除,这些的话就可以限制恶意的cc攻击了

上面的代码我们可以把一下开关,设定的值写在web.config中,这样的话直接修改web.config中值就可以了,不用修改程序代码了。

 

 

from:https://www.cnblogs.com/shuang121/archive/2011/03/02/1969369.html

转载于:https://www.cnblogs.com/youmingkuang/p/10048318.html

你可能感兴趣的文章
淘宝JAVA中间件Diamond详解(一)---简介&快速使用
查看>>
一种简单的数据库性能测试方法
查看>>
如何给JavaScript文件传递参数
查看>>
Hadoop HBase概念学习系列之物理视图(又名为物理模型)(九)
查看>>
Hadoop HBase概念学习系列之HBase里的宽表设计概念(表设计)(二十七)
查看>>
Kettle学习系列之Kettle能做什么?(三)
查看>>
ExtJS 4.2 业务开发(一)主页搭建
查看>>
webpack Import 动态文件
查看>>
电脑没有安装iis,但是安装了.NET环境,如何调试网站发布的程序
查看>>
【Mac + GitHub】之在另一台Mac电脑上下载GitHub的SSH链接报错
查看>>
Day03:Selenium,BeautifulSoup4
查看>>
Java NIO系列教程(九) ServerSocketChannel
查看>>
awk变量
查看>>
mysql_对于DQL 的简单举例
查看>>
postgis几何操作函数集
查看>>
ACM题目————还是畅通工程
查看>>
CentOS7使用firewalld打开关闭防火墙与端口
查看>>
35. Search Insert Position(C++)
查看>>
ubuntu 卡在登陆界面无法进入桌面,但是可以进入命令行界面
查看>>
【转】vim中多标签和多窗口的使用
查看>>