Я получил уязвимость ниже уровня безопасности от Checkmarx.
AlcoholTrackerWebApp/AlcoholTrackerWebApp/Controllers/HomeController.cs
получает данные из базы данных для элементаToList
. Затем значение этого элемента проходит через код без должной фильтрации или кодирования и в конечном итоге отображается пользователю в методеSubmitEventRequest
в строке 20 изAlcoholTrackerWebApp/AlcoholTrackerWebApp/Controllers/HomeController.cs
. Это может привести к хранимой атаке Cross-Site-Scripting.
public ActionResult SubmitEventRequest()
{
AlcoholTrackerContext db = new AlcoholTrackerContext();
string winlogin = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
var intname = winlogin.Substring(winlogin.LastIndexOf('\\') + 1);
ViewBag.IDSID = intname;
var name = db.WorkerInfoes.FirstOrDefault(a => a.IDSID.Equals(intname));
ViewBag.name = name.FirstName + " " + name.LastName;
ViewBag.WWID = name.OrgUnitDescr;
ViewBag.ConsumptionMethod = db.AlcoholConsumptions;
ViewBag.ConsumptionMethod = new SelectList(db.AlcoholConsumptions, "AlcoholConsumptionId", "ConsumptionMethod");
return View(new Event());
}
Если я сделаю это ниже с использованием HttpUtility.HtmlEncode
, то в инструменте Checkmarx не будет найдено уязвимости безопасности.
ViewBag.ConsumptionMethod =
new SelectList(HttpUtility.HtmlEncode(db.AlcoholConsumptions), "AlcoholConsumptionId", "ConsumptionMethod");
Но с приведенным выше исправлением я получаю сообщение об ошибке в Razor View для раскрывающегося списка:
@Html.DropDownListFor(model => model.AlcoholConsumptionId,
ViewBag.ConsumptionMethod as IEnumerable<SelectListItem>,
"---Please Select---",
new {
id = "AlcoholConsumptionMethod",
@class = "form-control-new",
style = "margin-left:-788px;margin-top:20px;width:20.5%"
}
)
Ошибка в представлении: DataBinding: «System.Char» не содержит свойства с именем «AlcoholConsumptionId».