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