Мы пытаемся обезопасить опубликованные строковые записи в веб-приложении ASP.NET MVC «глобальным» способом.С моей текущей попыткой я написал фильтр настраиваемых действий и украсил действие публикации своим классом FormPostSanitizer.Идея состоит в том, что мы украсим все действия после публикации, которые должны быть продезинфицированы.
Метод успешно захватывает и дезинфицирует входные данные.Но эти очищенные значения не фиксируются в модели до того, как она будет сохранена в базе данных.
Вот как она украшает контроллер.
[HttpPost]
[ValidateAntiForgeryToken]
[FormPostSanitizer]
public ActionResult MyAction(MyViewModel model)
{
// If ModelState.IsValid, save the model ...
}
Вот мой фильтр действий.
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (filterContext.HttpContext.Request.HttpMethod != "POST") return;
FormCollection formCollection = new FormCollection(filterContext.Controller.ControllerContext.HttpContext.Request.Form);
foreach (string key in formCollection.AllKeys)
{
string sanitized = formCollection[key].SanitizeString(); // Extension method to alter the string.
formCollection.Set(key, sanitized);
}
filterContext.ActionParameters["form"] = formCollection;
}
Я ожидал, что последняя строка передаст измененные значения в filterContext, а модель будет иметь очищенные значения.Значения очищаются, но они не применяются к модели.
Если в скомпилированном коде есть лучший способ перехватить и изменить опубликованные значения, прежде чем они будут привязаны к модели, укажитемне на пост, который показывает методологию.Спасибо за вашу помощь.