如何在asp.net中关闭HTTP连接?

问题描述 投票:0回答:3

我有问题,请帮忙!

我们的网站最近受到 Slow HTTP POST DOS 攻击。当您的服务器收到大量传入连接并长时间保留它们时,因为发送者发送信息非常慢并且服务器无法服务真实用户的请求 - 拒绝服务。

所以我决定拒绝此类 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 中有一些设置或模块可以为我做到这一点?

asp.net performance iis-7
3个回答
2
投票

尝试使用 Response.Close 而不是 Response.End。另请参阅此SO线程的检查答案。


0
投票

您可以查看IIS7的请求过滤。只是不知道您的“条件”是否可以以可以进行请求过滤的方式实现。当然IP安全是一个选项,但不是很优雅。 Web 服务器前面没有 Forefront TMG(或其他防火墙)吗?如果是这样,您可以在防火墙中添加一些安全措施。

如果它们都不能完成您想要的操作,您可能需要编写自己的 HTTP 模块 来停止请求。但这仍然没有回答您有关如何停止请求的问题。也许解决方案是为这些“用户”提供一个空白页面。这样您就不必停止请求,而只需为他们提供一个空页面即可。这会给您的网络服务器带来一些负载,但不会影响数据库服务器。


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.