Как предотвратить 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;
}