Модель WebAPI [ModelBinder] с классом интерфейса при указании реализации

Используйте метод .on() jQuery http://api.jquery.com/on/ для присоединения обработчиков событий к элементу live.

Также с версии 1.9 .live() удаляется.

0
задан Watson 28 March 2019 в 00:26
поделиться

1 ответ

Используйте дженерики.

public class SomeBinder<TConcreteType> : IModelBinder
{
}

Тогда ваша подпись становится

public ActionResult InterfaceWithInlineImplementation(
  [ModelBinder(typeof(SomeBinder<SomeInterfaceImpelemtation_One>))]ISomeInterface SomeInterface)

Тогда десериализация:

JsonConvert.DeserializeObject<TConcreteType>(json)

Однако, исходя из вашего последнего комментария, звучит так, как будто вам просто нужно Предотвратить перепост вместо этой запутанной модели привязки.

Итак, допустим, клиент знает, что у реализации сервера есть методы безопасности, и пытается сопоставить подпись, надеясь, что все, например, будет десериализировано. Ясно, что вы ожидаете. И вы явно ожидаете только определения контракта и ничего более.

Отрывок:

Массовое назначение обычно происходит во время привязки модели как часть MVC. Простой пример: на вашем веб-сайте есть форма, в которой вы редактируете некоторые данные. У вас также есть некоторые свойства в вашей модели, которые нельзя редактировать как часть формы, но вместо этого они используются для управления отображением формы или могут вообще не использоваться.

public class UserModel
{
  public string Name { get; set; }
  public bool IsAdmin { get; set; }
}

Итак, идея в том, что вы визуализируете только один входной тег в разметке, но отправляете его в метод, который использует ту же модель, что и для рендеринга: [1114 ]

[HttpPost]
public IActionResult Vulnerable(UserModel model)
{
    return View("Index", model);
}

Однако с помощью небольшого количества манипуляций с HTML или с помощью Postman / Fiddler злонамеренный пользователь может установить для поля IsAdmin значение true. Связыватель модели должным образом свяжет значение, и вы только что стали жертвой массового назначения / повторной публикации:

Итак, как вы можете предотвратить эту атаку? К счастью, существует целый ряд различных способов, и они, как правило, совпадают с подходами, которые вы могли использовать в предыдущей версии ASP.NET. Здесь я рассмотрю ряд ваших вариантов.

Перейти к статье ...

0
ответ дан Erik Philips 28 March 2019 в 00:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: