[英]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,这可能会在一个请求中关闭你的服务器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.