防cc攻击策略

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

这就是所谓的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中值就可以了,不用修改程序代码了。

posted @ 2011-03-02 22:49  双魂人生  阅读(1896)  评论(0编辑  收藏  举报