Czym są "macierze JSON najwyższego poziomu" i dlaczego stanowią zagrożenie dla bezpieczeństwa?

W poniższym filmie, o godzinie 21:40, prezenter Microsoft PDC mówi, że ważne jest, aby wszystkie JSON były zawinięte, aby nie była to tablica najwyższego poziomu:

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

Jakie jest ryzyko rozpakowania tablicy najwyższego poziomu?

Jak sprawdzić czy jestem bezbronny? Kupuję wiele komponentów Od stron trzecich i mam zewnętrznych dostawców, którzy opracowują mój kod.

Author: random65537, 2010-08-17

2 answers

Dzieje się tak, ponieważ kilka lat temu Jeremiah Grossman znalazł bardzo interesującą lukę, która wpływa na gmail. Niektórzy rozwiązali tę lukę, używając niezrównanego cruft (Opis techniczny Pana bobince na tej stronie jest fantastyczny.)

Powodem, dla którego Microsoft mówi o tym, jest to, że nie załatali (jeszcze) swojej przeglądarki. (Edit: ostatnie wersje Edge i IE 10/11 rozwiązały ten problem.) Mozilla uważa to za luka w specyfikacji json i dlatego załatali ją w Firefox 3 . Dla przypomnienia całkowicie zgadzam się z Mozillą i jej niefortunne, ale każdy twórca aplikacji internetowych będzie musiał bronić siebie przed tą bardzo niejasną luką.

 41
Author: rook,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:54:59

Myślę, że to dlatego, że konstruktor Array() może zostać przedefiniowany. Jednak ten problem nie jest tak naprawdę unikalny dla tablic.

Myślę, że atak (lub jeden możliwy sposób) jest coś takiego:

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

Przeglądarka (lub niektóre przeglądarki) używają tego konstruktora do notacji tablicy [n, n, n]. Atak CSRF może więc wykorzystać Twoją otwartą sesję z Twoim bankiem, nacisnąć znany adres URL JSON z tagiem <script>, aby go pobrać, a następnie poof jesteś własnością.

 11
Author: Pointy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-08-17 14:03:41