Анализатор обнаружил создание cookie-объекта из данных, полученных из внешнего источника без предварительной проверки. Это может стать причиной возникновения cookie-инъекции в случае, если данные будут скомпрометированы.
Рассмотрим пример:
public void ChangeCookie() { String cookieValue = Request.Form["userRole"]; Response.Cookies.Add( new HttpCookie(WebLocalizationConfiguration.CookieName, cookieValue) { Expires = Clock.Now.AddYears(2), Path = Request.ApplicationPath } ); .... }
В данном случае в HttpResponse
добавляется новый объект класса HttpCookie
, который инициализируется на основе данных из внешнего источника — Request.Form
. Использование данных без какой-либо проверки или валидации может привести к тому, что злоумышленники смогут повлиять на работу приложения.
Чтобы обезопасить код от cookie-инъекции, необходимо проверить данные, которые используются для инициализации объекта класса HttpCookie
.
Сделать это можно подобным образом:
public void ChangeCookie() { String cultureValue = Request.Form["userRole"]; if (!Regex.IsMatch(cultureValue, DataValidationPattern)) return; Response.Cookies.Add( new HttpCookie(WebLocalizationConfiguration.CookieName, cultureValue) { Expires = Clock.Now.AddYears(2), Path = Request.ApplicationPath } ); .... }
В данном случае, прежде чем инициализировать объект HttpCookie
на основе потенциально заражённых данных, производится проверка с помощью регулярного выражения.
Данная диагностика классифицируется как: