Подтвердить что ты не робот

WCF readerQuotas настройки - недостатки?

Если служба WCF возвращает массив байтов в ответном сообщении, вероятность того, что данные превысит размер по умолчанию 16384 байт. Когда это произойдет, исключение будет выглядеть как

Максимальная длина длины массива (16384) превышено при чтении XML данные. Эта квота может быть увеличена на изменение свойства MaxArrayLength на XmlDictionaryReaderQuotas объект, используемый при создании XML читатель.

Все советы, которые я видел в Интернете, - это просто увеличить настройки в элементе <readerQuotas> до максимума, поэтому что-то вроде

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

на сервере и аналогично на клиенте.

Я хотел бы знать о каких-либо недостатках с этим подходом, особенно если размер байтового массива может только время от времени становиться очень большим. Выполните настройки выше, просто сделайте WCF объявить огромный массив для каждого запроса? Вам нужно ограничить максимальный размер возвращаемых данных или просто указать буфер с достаточным размером и заставить WCF продолжать работу до тех пор, пока все данные не будут прочитаны?

Спасибо!

4b9b3361

Ответ 1

Основным недостатком является потенциальная уязвимость для атак - например, злоумышленник теперь может наводнить ваш веб-сервер сообщением объемом до 2 ГБ и потенциально снизить его.

Конечно, разрешение на 2 ГБ сообщения также накладывает нагрузку на ваш сервер с точки зрения потребления памяти, поскольку эти сообщения должны быть собраны в памяти полностью (если вы не используете потоковые протоколы в WCF). Если у вас 10 клиентов, отправляющих вам 2 ГБ сообщения, вам понадобится много ОЗУ на вашем сервере!: -)

Кроме этого, я не вижу никаких реальных проблем.

Марк

Ответ 2

В MSDN есть статья, в которой объясняются различные соображения безопасности, о которых вам нужно подумать при настройке этих значений. Некоторые атак типа "отказ в обслуживании" - это те, которые питаются вашей памятью, а некоторые из них (например, MaxDepth не установлены должным образом) могут приводить к фатальным StackOverflowExceptions, которые могут сбить ваш сервер по одному запросу.

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