предотвратить возвращенный json, завернутый в {d: [duplicate]

Интересно, что ни один из ответов на этой странице не упоминает два крайних случая, надеюсь, никто не возражает, если я их добавлю:

Случай с краем # 1: одновременный доступ к Словарю

Родовые словари в .NET не являются потокобезопасными, а иногда могут бросать NullReference или даже (чаще) a KeyNotFoundException при попытке получить доступ к ключу из двух параллельных потоков. Исключение в этом случае является довольно ошибочным.

Случай с краем # 2: небезопасный код

Если код NullReferenceException задан кодом unsafe, вы можете посмотреть на переменные указателя , и проверьте их на IntPtr.Zero или что-то в этом роде. Это одно и то же («исключение нулевого указателя»), но в небезопасном коде переменные часто переводятся в типы значений / массивы и т. Д., И вы ударяете головой о стену, задаваясь вопросом, как тип значения может исключение.

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

6
задан reporter 29 August 2011 в 08:47
поделиться

2 ответа

Это механизм упрощения безопасности.

По сути, он помогает защитить от атак типа CSRF, когда злоумышленник читает массив JavaScript (загружаемый как Json) с веб-сайта жертвы. Они могут сделать это, переопределив тип массива JavaScript. d заставляет возвращенный Json не быть массивом и, таким образом, превращает Array в число бесполезных для атакующего.

См. это замечательное сообщение в блоге: http://haacked.com/archive/2008/ 11/20 / анатомо-в своем тонком-JSon-vulnerability.aspx

9
ответ дан Ofer Zelig 23 August 2018 в 23:25
поделиться

Конечные точки службы ASP.NET и WCF JSON фактически переносят их JSON в объект со свойством «d», чтобы обойти тонкий потенциальный недостаток безопасности при использовании JSON

Phil Haack's сообщение на этом: http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx

Это было введено из ASP.NET3.5. Если вы хотите, чтобы msg работал в обеих структурах до и после 3.5, просто попробуйте этот небольшой хак.

var data = msg.hasOwnProperty("d") ? msg.d : msg;

Courtesy Dave Ward: Никогда не беспокоиться об ASP.NET AJAX .d снова

7
ответ дан naveen 23 August 2018 в 23:25
поделиться
Другие вопросы по тегам:

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