2011-03-30 116 views
0

我有问题,请帮忙!如何在asp.net中关闭HTTP连接?

我们的网站最近在慢HTTP POST DOS攻击下。这是您的服务器收到大量传入连接并长时间保留它们的原因,因为发件人发送的信息非常慢,服务器无法为真正的用户请求提供服务 - 拒绝服务。

所以我decied拒绝这样的POST请求:

void Application_BeginRequest(object sender, EventArgs e) 
{ 
    if (_my_condition_here_) 
    { 
     _reject_the_request_by_dropping_connection_ 
    } 
} 

的问题是,我无法删除在asp.net的HTTP连接:

Response.End(), throw new Exception(), even Thread.CurrentThread.Abort() 

不关闭连接。它会在发件人发送所有假数据时等待,然后用'500服务器错误'或其他方法回答它。在这种情况下,缓慢的POST攻击仍然会成功。

我该如何删除连接?或者也许在IIS 7中有一些设置或模块可以为我做到这一点?

+0

我也这么认为,它会更多的是在IIS中的设置。虽然现在不能记住它。 – user492238 2011-03-30 13:40:35

+1

这听起来像是应该在服务器配置中处理的东西,而不是在应用程序中。 – David 2011-03-30 13:40:42

回答

1

尝试Response.Close而不是Response.End。请参阅此SO thread的选中答案。

+0

是的! Thant正是我​​想要的!谢谢德克! – irriss 2011-03-31 06:55:07

0

你可以看看IIS7的Request Filtering。只是不知道你的'条件'是否可以通过请求过滤的方式来实现。 Ofcourse IP Security是一个选项,但不是很优雅。 在网络服务器前没有Forefront TMG(或其他防火墙)吗?如果是这样,您可以在防火墙中添加一些安全性。

如果他们两个都不能做你想要的东西,你可能需要编写自己的HTTP Module来停止请求。这仍然不能回答你如何停止请求的问题。也许一个解决方案就是为这些'用户'提供一个空白页面。这样你就不必停止请求,只需要为它们提供一个空白页面。这会给你的网络服务器一些负担,但不会影响数据库服务器。

0

您是否考虑过减少连接超时?