繁体   English   中英

WCF readerQuotas设置 - 缺点?

[英]WCF readerQuotas settings - drawbacks?

如果WCF服务在其响应消息中返回字节数组,则数据可能会超过默认长度16384字节。 当发生这种情况时,异常将是这样的

读取XML数据时已超出最大数组长度配额(16384)。 通过更改创建XML阅读器时使用的XmlDictionaryReaderQuotas对象上的MaxArrayLength属性,可以增加此配额。

我在网上看到的所有建议只是将<readerQuotas>元素中的设置增加到最大值,所以像

<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
              maxArrayLength="2147483647" maxBytesPerRead="2147483647"
              maxNameTableCharCount="2147483647" />

在服务器上,在客户端上类似。

我想知道这种方法的任何缺点,特别是如果字节数组的大小可能只是偶尔变得非常大。 上面的设置是否只是让WCF为每个请求声明一个巨大的数组? 您是否必须限制返回的数据的最大大小,或者您是否只需指定一个合理大小的缓冲区并让WCF继续运行直到读取所有数据?

谢谢!

主要缺点是可能存在攻击漏洞 - 例如,恶意源现在可能会使您的Web服务器充斥着大小超过2 GB的消息并可能导致其崩溃。

当然,允许2 GB消息也会在内存消耗方面给服务器带来一些压力,因为这些消息需要在内存中完整地组装(除非您在WCF中使用流协议)。 如果您有10个客户端向您发送2 GB消息,您的服务器上将需要大量RAM! :-)

除此之外,我没有看到任何实际问题。

MSDN上有一篇文章解释了设置这些值时需要考虑的各种安全注意事项。 一些拒绝服务攻击是那些占用你内存的攻击,其中一些攻击(如没有正确设置MaxDepth)可能导致致命的StackOverflowExceptions,这可能会在一个请求中关闭你的服务器。

http://msdn.microsoft.com/en-us/library/ms733135.aspx

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM