Является ли Facebook внезапно безопасным от угона JSON? - PullRequest
6 голосов
/ 17 марта 2019

Хорошо известно, что Facebook использует ответы javascript (JS, а не json), которые являются префиксами while(1) & for(;;);, чтобы не допустить кражи тега scriptJSON-данные, когда старые браузеры перегружены их массивом ctor и Object ctor.

Но из недавней попытки кажется, что это уже не так (для списка друзей, который, я уверен, использовался)

enter image description here

Обратите внимание, что теперь тип контента:

content-type: application/octet-stream

Но почему они это сделали?теперь безопасно?(Я знаю, что это для старых браузеров, но все же ...).

Я знаю, что ctor [..] был проблематичным.Но что насчет {..} ctor?

Вопрос:

Почему Facebook удалил бесконечный цикл?и как они теперь смягчают против угона json?

Я имею в виду, что произойдет, если тег <script> попытается получить список "getFiriends"?(в очень старом браузере)

NB

Стоит отметить, что есть еще другие ответы с бесконечным циклом для {..} !!:

enter image description here

Также здесь (Объект, с бесконечным циклом)

enter image description here

1 Ответ

2 голосов
/ 17 марта 2019

Эта атака (загрузка JSON как <script>) основана на нескольких предположениях:

1) JSON сам по себе является действительным JS (это то, что for(;;) изменяется), что также означает, что он не может начинаться с {, поскольку это оператор блока, который не содержит пар ключ-значение:

 { "a": 1 } // invalid JS, valid JSON *
 [{ "a": 1 }] // valid JS, valid JSON

2) Браузер очень старый ( <1% от общего числа пользователей </a>), поскольку построение массивов с литералом не вызывает функцию Array в новых браузерах (поддержка ES5 является хорошей оценкой для тех).

Следовательно, эта атака в данном случае невозможна, так как API, который вы упомянули, возвращает объект, поэтому (1) не полностью заполнен. И даже если API вернет массив, теоретически может быть взломано очень небольшое количество людей:

1) Браузер должен быть очень старым, и тогда сам браузер, вероятно, представляет больший риск, и браузер должен даже поддерживать JavaScript.

2) Клиент должен посетить вредоносный сайт, что маловероятно из-за спам-фильтров / черных списков на разных уровнях.

3) Пользователь должен войти на Facebook при посещении вредоносного веб-сайта.

Стоит отметить, что есть и другие ответы с бесконечным циклом

Полагаю, это в прошлом. Это займет некоторое время, пока все API не будут реорганизованы / перенесены. Я предполагаю, что добавление / удаление этих 5 символов приводит к значительным накладным расходам, если вы думаете в масштабе Facebook.


*: Если вы попытаетесь загрузить { a: 1 }, вы обнаружите, что он не генерирует ошибку SyntaxError! Однако это не является действительным JSON и не создает объект (это помечено 1 внутри инструкции blocn).

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