Что такое "массивы JSON верхнего уровня" и почему они представляют угрозу безопасности?


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

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

каков риск распаковки массива верхнего уровня?

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

2 63

2 ответа:

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

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

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

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

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

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