In the video below, at time marker 21:40, the Microsoft PDC presenter says it's important that all JSON be wrapped so it's not a top level array:
https://channel9.msdn.com/Events/PDC/PDC09/FT12
What is the risk of an unwrapped top level array?
How should I check and see if I'm vulnerable? I purchase many components from 3rd parties and have external vendors who develop my code.
Это потому, что несколько лет назад Джереми Гроссман обнаружил очень интересную уязвимость, которая затрагивает Gmail . Некоторые люди устранили эту уязвимость с помощью неразборчивого мусора (техническое описание мистера Бобинса на этой странице просто фантастическое.)
Microsoft говорит об этом потому, что они не установили патч для своего браузера ( пока что). ( Изменить: Последние версии 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 с тегом