我的网站托管在共享托管上,如果您花费25%的CPU超过90秒托管公司会自动禁用应用程序池。我想知道这段代码是否可以从简单的DoS攻击中卸载服务器
void Application_BeginRequest(object sender, EventArgs e)
{
HttpContext context = base.Context;
string ip = context.Request.UserHostAddress;
int activeRequests = (int)(context.Cache[ip] ?? 0);
activeRequests++;
if (activeRequests == 1)
{
context.Cache.Add(ip, activeRequests, null, DateTime.Now.AddMinutes(10), System.Web.Caching.Cache.NoSlidingExpiration, System.Web.Caching.CacheItemPriority.Normal, null);
}
if (activeRequests > 10)
{
log4net.Config.XmlConfigurator.Configure();
log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
log.WarnFormat("Blocked IP: {0}, ActiveRequests: {1}", ip, activeRequests);
Response.Clear();
Response.Redirect("~/Error500.html");
}
}
void Application_EndRequest(object sender, EventArgs e)
{
HttpContext context = base.Context;
string ip = context.Request.UserHostAddress;
int activeRequests = (int)(context.Cache[ip] ?? 0);
activeRequests--;
}
我的意思是简单的DoS攻击。
for (int i = 0; i < 100000; i++)
{
WebClient client = new WebClient();
client.DownloadString("http://example.com");
}
答案 0 :(得分:1)
不,该代码不会有帮助。 此外,对于代理服务器后面的用户来说可能确实存在问题:HTTP请求将由代理服务器发出,因此客户端IP对于其后面的每台PC都是相同的。
DoS预防是在应用程序代码之外的基础架构上完成的。 有关IIS的示例,请参阅此文章:http://m.windowsitpro.com/windows/q-does-microsoft-iis-70-include-feature-protect-iis-web-server-denial-service-dos-attacks-do
因此,简而言之,DoS预防通常由托管服务提供商完成。