Fortify сообщает мне, что у меня есть критическая проблема, связанная с XSS-уязвимостью.
Аннотация: Межсайтовый скриптинг: отражение (проверка и представление входных данных, поток данных)
Метод DoFoo() в FooController.cs отправляет непроверенные данные в веб-браузер в строке 112, что может привести к выполнению браузером вредоносного кода.
Не нравится, что возвращает этот метод
return new JsonResult
{
Data = new
{
NameChanged = nameChanged,
DatabaseUpdated = true,
HasOpenAccount = contact.HasOpenAccount
}
};
Все три из этих значений являются логическими. Последний (contact.HasOpenAccount
) является логическим значением, допускающим значение NULL. Это то, что Fortify не любит (я думаю, потому что contact
— это объект, переданный из javascript).
Я возился с HttpUtility.HtmlEncode
, и добавление его в строку HasOpenAccount
меняет проблему Fortify с критической на среднюю (плохая проверка).
Я могу жить с этим, но это не похоже на то, что это действительно проблема. Как логическое значение, допускающее значение NULL, может быть уязвимым для вредоносных атак? Возможно ли это, или Fortify сходит с ума?
Обновление:
Я исправил это, изменив
HasOpenAccount = contact.HasOpenAccount
to
HasOpenAccount = contact.HasOpenAccount ?? false
чтобы вернуть false, когда он равен нулю. Это полностью устранило проблему Fortify. Очевидно, он не любит nullables? Однако мой первоначальный вопрос остается в силе, это вообще реальная проблема?