Как предотвратить DoS Attack для метода copyTo() в C#

В приложении MVC я загружаю несколько файлов и возвращаю их в качестве модели для файлов. но для метода CopyTo() WhiteHat Security нашла его уязвимым. это говорит:

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

даже в коде я прокомментировал ту строку, где обнаружена проблема. Можете ли вы помочь мне, чтобы предотвратить этот метод от уязвимости. Мой метод выглядит примерно так, как показано ниже.

public object UploadDocument()
{
    int maxFileSizeMb;
    int.TryParse(ConfigurationManager.AppSettings["MSizeInMB"], out maxFileSizeMb);

    var validExtensions = new[] {".jpg", ".jpeg", ".bmp", ".gif", ".png", ".pdf", ".tif", ".tiff"};
    var httpRequest = HttpContext.Current.Request;

    if (httpRequest.Files.Count <= 0) return new DocMod {ErrorMessage = "No file given!"};

    var DocMod = new DocMod();
    var formData = httpRequest.Form;
    var fileName = string.Empty;

    if (formData.Count > 0)
    {
        fileName = formData.Get("fileName");
    }

    foreach (var postedFile in from string file in httpRequest.Files select httpRequest.Files[file])
    {
        if (string.IsNullOrEmpty(fileName))
            fileName = postedFile.FileName;

        if (((postedFile.ContentLength/1024f)/1024f)  > maxFileSizeMb)
                return new DocMod
                {
                    ErrorMessage = "The chosen file is greater than the allowed limit of " + maxFileSizeMb + " MB."
                };

        if (fileName.Length > 255)
                return new DocMod
                {
                    ErrorMessage = "The chosen file is greater than the allowed limit of " + maxFileSizeMb + " MB."
                };

        if (!validExtensions.Any(x => fileName.ToLower().EndsWith(x)))
                return new DocMod 
                {
                    ErrorMessage = "That is not an accepted file type"
                };

                using (var ms = new MemoryStream())
                {
                    postedFile.InputStream.CopyTo(ms);     // here chances of DoS attack. How to prevent from vulnerability
                    DocMod = PoiService.UploadDocument(fileName, ms.ToArray());
                }
    }
    return DocMod;
}

0 ответов

Другие вопросы по тегам