2012-01-09 74 views
2

2011年12月28日US-CERT发布了一个关于大多数web服务器因DOS处理散列表冲突而容易受到DOS攻击的公告。文章hereasp.net散列表漏洞

有人能解释一下这个散列表适合ASP.NET生命周期吗?它是每个会话一个散列表还是每个服务器实例一个大散列表?

谢谢 菲德尔

+0

http://weblogs.asp.net/scottgu/archive/2011/12/28/asp-net-security-update-shipping-thursday-dec-29th.aspx – 2012-01-09 02:03:20

回答

2

问题的散列表是Request.Form

服务器解析表单数据并将键值对放入Request.Form集合中。如果表单数据包含产生相同散列码的密钥,则会产生散列冲突,从而降低散列表的性能。

因此,它不是每个服务器或每个会话一个表,而是每个POST请求一个表。

+0

我认为所有散列表的底层缺陷是:|所以它不仅仅是每个帖子的请求一次。最大的打击通常是使用POST,但如果一个应用程序在内部使用散列表,那么它会影响到它也不会? – 2012-01-09 02:04:34

+0

@JohnMitchell:只有在您使用请求数据中的密钥创建哈希表时,它才能应对DoS攻击。如果您从其他数据创建哈希表,则不受输入的影响。 – Guffa 2012-01-09 02:08:30

+0

但是,如果你解析用户输入和重复的数据(即任何可能导致桶冲突的数据),那么这可以用作DDos,失败是处理冲突所需的时间。因此,虽然文章特别提到POST作为矢量,但其他矢量可以很容易地使用。 – 2012-01-09 02:11:06

0

散列表整个应用程序的不只是一次到位将被使用。例如,当你添加post变量到一个页面时,他们会在一个哈希表中内部处理,所以如果你有大量的哈希表冲突(即在页面上发生同名变量)。它是一个非常高效的内存存储系统,用于访问使用单词集合(“字典”)的“数组”。

这是其中一件事,虽然可以被利用,但更好的做法是使用最佳做法并监视CPU使用情况,限制每页最大POST大小以及限制来自单个主机的请求。

+0

对不起,刚刚添加,其每个数据的散列表类型,所以它将成为使用它的每种类型数据的一种类型,所以它的使用远不止每个会话的每个页面和页面上的每个数据项需要一个字典样式对象。如果你想看看它的使用频率,我们可以考虑使用散列表。 – 2012-01-09 02:01:49