2015-02-26 3 views
0

У меня есть приложение в ASP.NET Web Api с AngularJS, и я хочу решить проблему уязвимости json. Я прочитал Phil Haack's article.Фильтр защиты уязвимостей JSON в Web Api

В проекте я хочу сериализовать объект класса в формате JSON с использованием класса JsonConvert.

Я читал Sean Kenny's solution, но не работает, потому что jsonwriter из библиотеки json.net не может сериализовать недопустимый формат json.

Может ли кто-нибудь дать мне подсказку или что я могу использовать для получения сериализованного json со строкой ")]}',\n" перед ответом json?

ответ

2

«... убедитесь, что ваша служба JSON всегда возвращает свой ответ в виде объекта без объекта массива JSON » - Phil Haack.

Просто верните свой JSON как объект, а не массив. Вам не нужно добавлять эти специальные символы. Другими словами, если ваши данные представляют собой массив, например [1, 2, 3, 4], не возвращайте массив. Вместо этого оберните его в объект и верните объект, { d: [1, 2, 3, 4] }.

Если вы чувствуете себя очень сильно о предложении этих специальных символов, то просто конкатенируйте его. JsonConvert.SerializeObject() возвращает строку, так что ...

return ")]}',\n" + JsonConvert.SerializeObject(data);

Но, на мой взгляд, это не нужно.

+0

Благодарим за ответ. Я попробую это как можно скорее. Я хочу спросить кое-что еще: что я могу использовать, чтобы поймать ответ перед его отправкой? Я попытался использовать фильтр действий (метод OnActionExecuted) и обработчики сообщений (Task метод SendAsync), но ответ не сериализовался json (тип ответа по-прежнему является объектом класса). – Sheldon

+0

Вы имеете в виду, как поймать _request_, прежде чем он будет отправлен на _server_ или _response_, прежде чем он будет отправлен на _client_? Для получения дополнительной информации о привязке модели читайте [здесь] (http://www.asp.net/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api) и дайте мне знать, если это поможет. – Brett

+0

Да. Это помогает мне. Спасибо. – Sheldon