Код был проанализирован Checkmarx и сообщил о следующей проблеме:
Метод
Load_Bank
в строке ** получает данные из базы данных для элементаWhere
. Затем значение этого элемента проходит через код без должной фильтрации или кодирования и в конечном итоге отображается пользователю в методеBank_Read
в строке * изSomeController.cs
. Это может привести к атаке Stored Cross-SiteScripting.
internal IEnumerable<BankDTO> Load_Bank()
{
using (var Container = new EBookletEntities())
{
var query = from r in Container.Gen_Bank.AsNoTracking()
where r.IsDeleted != true
select new Gen_BankDTO
{
Id = r.Id,
Name = r.Name
};
return query.ToList<BankDTO>();
}
}
Ниже код контроллера
using (var bll = new BankBLL())
{
var item = bll.Load_Bank();
var model = item.Select(r => new BVM()
{
Id = r.Id,
Name = HttpUtility.HtmlEncode(r.Name)
}).ToList();
return Json(model.ToDataSourceResult(request), "application/json", System.Text.Encoding.UTF8, JsonRequestBehavior.AllowGet);
}
Источник галочки:
where r.IsDeleted != true
Назначения:
return Json(model.ToDataSourceResult(request), "application/json", System.Text.Encoding.UTF8, JsonRequestBehavior.AllowGet);
Интересно, действительно ли существует проблема с сохраненным XSS или Checkmarx сообщил о ней как о ложной?
Как решить проблему с Checkmarx?