#fortify
Вопрос:
Проверка Fortify сообщает о проблеме с кодом ниже
class MyModel {
public string Name {get;set;}
public int StudentId {get;set;}
public MySubModel Class {get;set;}
}
class MySubModel {
public string Title {get;set;}
[Required]
public int? Id {get;set;}
}
Проблема с сканированием:
Класс модели MyModel обладает обязательным свойством, тип которого является необязательным членом родительского типа модели и, следовательно, может быть подвержен атакам с недостаточной публикацией.
Моя субмодель.Идентификатор требуется, но он также может быть аннулирован. Почему я должен отмечать свойство класса типа MySubModel как [Требуется]? В моем бизнес-требовании не говорится, что требуется класс. Мне кажется, что Fortify не учитывает тот факт, что идентификатор может быть аннулирован, и просто показывает проблему. Мой аргумент заключается в том, что это проблема в Fortify. Я попытался получить ложноположительный результат, но рецензент пытается сказать мне, что я должен отметить [Требуется] в обоих местах. Мы занимаемся ретро-ремонтом, и мне немного сложно добавить [Необходимый] атрибут в модель, потому что это может привести к поломке. Любая помощь будет признательна. Кстати, мы используем версию 21.1.2 Fortify.
Просто хочу добавить сюда еще один, но связанный с этим вопрос: ASP.NET Плохие Практики MVC: Модель С Требуемым Свойством, Не Подлежащим Аннулированию
public class RequiredModelTest
{
[Required]
public string Name { get; set; }
[Required]
public DateTime DateOfBirth { get; set; }
[Required]
public int Age { get; set; }
}
Приведенный выше код приводит к
Класс модели RequiredModelTest обладает необходимым свойством, не допускающим обнуления, и поэтому может быть подвержен атакам с недостаточной публикацией.
Рекомендуется отметить дату рождения и возраст как недействительные, чтобы предотвратить атаку.
Таким образом, реальный вопрос заключается в том, когда здесь принимается значение null, почему бы не использовать подмодель? Вот почему я думаю, что это ложный положительный результат или действительно ошибка в Fortify. Он просто игнорирует тот факт, что свойство в подмодели может быть обнулено.