Предотвращение DoS-атаки XML в ASP.NET веб — метод

#asp.net #web-services #c#-4.0 #denial-of-service

#asp.net #веб-сервисы #c #-4.0 #отказ в обслуживании

Вопрос:

У меня есть следующий веб-метод (ASP.NET , c # 4.0):

 [WebMethod]
public XmlDocument NewQuote(string username, string password, XmlDocument xml)
{
   // process request
}
 

Мне было интересно, как предотвратить атаку XML DoS (billion laughs, external entity и т.д.), Поскольку XmlDocument принимается в качестве параметра? Где и как я могу запретить обработку DTD? Очевидно, что в теле веб-метода уже слишком поздно.

Спасибо!

Комментарии:

1. На самом деле это очень хороший вопрос. Я считаю, что правильный ответ — «не принимать XML от неавторизованных пользователей», но я сомневаюсь, что это то, что вы ищете 🙂

Ответ №1:

Укажите логику, согласно которой пользователь может загружать только x файлов или вызывать эту службу x раз.

Комментарии:

1. Не подойдет. Вполне возможно уничтожить даже самый быстрый сервер одним файлом XML длиной 10-15 строк

2. @Stilgar Предполагая, что вы имеете в виду «правильно защищенный сервер», у вас есть пример, подтверждающий это утверждение?

3. Как насчет того, чтобы просто вызвать метод со строкой вместо XmlDocument . Затем, если он действителен (правильное имя пользователя / пароль, все еще ниже порогового значения), попробуйте преобразовать его в XmlDocument?

4. А затем вы можете проверить его с помощью XSD

5. Да, я знаю. Сохраните всю свою работу (серьезно!). Откройте Visual Studio и создайте новый XML-документ (VS использует метод загрузки .NET для создания объекта XmlDocument для работы редактора) и вставьте XML-файл в конце этой статьи sietch.net/ViewNewsItem.aspx?NewsItemID=173 (Я связываю только потому, что не могу вставить форматированный XML в комментарий). Причина проблемы заключается в том, что . NET framework по умолчанию пытается расширить ссылки на сущности (вероятно, для предоставления расширенных возможностей). Вероятно, вам потребуется перезагрузить компьютер. Вы можете воспроизвести это в простом консольном приложении, которое загружает XML