Вы не можете.
Скажите, что пользователь может создать продукт с именем ", "x": "y
.Это будет представлено как (неправильно сериализовано)
"Details": {
"Product": "", "x": "y",
"cost": 150.0
}
Это допустимый JSON, поэтому нет синтаксического способа обнаружить, что что-то не так.
Еще хуже, что если злоумышленник создастпродукт с именем ", "cost": 1.0, "x": "y
.Это будет представлено как (с некоторым примененным форматированием)
"Details": {
"Product": "",
"cost": 1.0,
"x": "y",
"cost": 150.0
}
Что будет делать с этим ваш десериализатор?Это примет это?(Некоторые будут.) Будет ли он использовать первый "cost"
или второй "cost"
, то есть позволит ли злоумышленнику снизить стоимость?И сможет ли злоумышленник создать дубликат "cost"
после реального?И даже если в настоящее время все в порядке при десериализации этой строки, будет ли она продолжать работать после обновления до новой версии библиотеки?
Начиная с 2017 года Json.net принимает такой JSON и использует второе повторяющееся значение (см. Json.net больше не выбрасывает в случае дубликата ).Но это поведение изменилось между версиями 6 и 8. Изменится ли оно снова?
Единственное реальное исправление - это исправить то, что генерирует этот JSON.