devrajengg4u2006@gmail.com Ответов: 1

В C# методы copyto (), readtoend() и loadxml() также уязвимы для ddos-атаки. Как предотвратить быть уязвимым.


В C# методы copyTo (), readToEnd() и LoadXML() также уязвимы для DDoS-атаки из-за необходимости читать всю строку до конца, который обычно обозначается символом. Если этот символ не существует, функция будет продолжать читать и копировать данные до тех пор, пока все ресурсы не будут израсходованы и не будет выдана ошибка.

согласно сканированию WhiteHat, это заявление получено. Как можно предотвратить атаку типа "отказ в обслуживании" для этих методов. Есть ли какой-нибудь альтернативный метод? Или какие есть пункты, о которых можно позаботиться.

Этот нижеприведенный метод:

частная статические IsResponseError булевую переменную(строку ответа, из инт код ошибки, из строки сообщение об ошибке)
{
код ошибки = 0;
сообщение об ошибке = нуль;
ВАР код = ложь;

if (String.IsNullOrWhiteSpace (response)) return false;
ВАР XmlDocument объект = новый объект XmlDocument();

пробовать
{
xmlDocument.LoadXml(response); //это уязвимо.
}
ловить
{
// если вы находитесь здесь, то строка не является XML, что имеет место для аутентификации; в случае успеха возвращаемый токен является строкой, а не xml
возвращать false;
}

если (объект XmlDocument.Функцию documentelement != нуль)
{
//Руководство errorElement = объект XmlDocument.Функцию documentelement.SelectSingleNode ("//ERRORCODE");
ВАР errorElement = GetErrorNode(объект XmlDocument);

if (errorElement != null)
{
пробовать
{
код = истина;
errorCode = int. Parse(errorElement.Через свойство innerText);
если (ошибки.ContainsKey(код ошибки))
errorMessage = ошибки[код ошибки];
еще
{
код ошибки = 99999;
errorMessage = "неизвестное сообщение об ошибке:" + errorElement.Через свойство innerText;
}
}
ловить
{
код ошибки = 99999;
errorMessage = "неизвестное сообщение об ошибке:" + errorElement.Через свойство innerText;
}
}
}

вернуть код;
}

Что я уже пробовал:

Для LoadXml () я получил решение для предотвращения уязвимости..
Но для метода CopyTo () &readToEnd ().... Мне нужно решение.

Richard MacCutchan

Мне было бы интересно увидеть ваше объяснение того, как именно эти команды уязвимы для DDOS.

gggustafson

Я тоже хотел бы получить ответ на вопрос Ричарда.

1 Ответов

Рейтинг:
2

Richard Deeming

Если вы имеете в виду DoS (NB: не DDoS, а это совсем другое дело!) а уязвимости XXE, проблема и решения описаны в этой статье журнала MSDN: Атаки и защита от отказа в обслуживании XML[^]

Короче говоря:

public static XmlDocument LoadUntrustedXml(string input)
{
    var settings = new XmlReaderSettings
    {
        DtdProcessing = DtdProcessing.Prohibit,
        MaxCharactersFromEntities = 1024,
        XmlResolver = null,
    };
    
    using (var stringReader = new StringReader(input))
    using (var xmlReader = XmlReader.Create(stringReader, settings))
    {
        var result = new XmlDocument();
        result.Load(xmlReader);
        return result;
    }
}