Обычно это проблема, если вы используете JSONP для передачи данных. Рассмотрим веб-сайт, состоящий из домена A, который загружает данные из домена B. Пользователь должен пройти проверку подлинности на сайтах A и B, а также потому, что единая политика происхождения не позволяет старым браузерам напрямую взаимодействовать с доменом (B), отличным от текущей страницы. (A), разработчики решили использовать JSONP. Таким образом, сайт A включает скрипт, указывающий на http://B/userdata.js, который выглядит примерно так:
displayMySecretData({"secret":"this is very secret", ...})
Таким образом, A определяет функцию с именем displayMySecretData, и когда запускается включенный сценарий с сервера B, она вызывает эту функцию и отображает секретные данные для пользователя.
Теперь злой сервер E приходит. Он видит, что A включает данные из B с использованием JSONP. Таким образом, сервер E включает в себя тот же скрипт, но определяет свой собственный displayMySecretData, который вместо этого крадет данные.
Затем злоумышленник обманывает пользователя, чтобы он посетил его сайт. Когда пользователь переходит туда и входит в систему B, браузер автоматически отправляет куки-файлы аутентификации для B вместе с запросом, чтобы найти скрипт из B. B видит аутентифицированного пользователя и, таким образом, возвращает скрипт, как и ожидалось. E получает данные, и Presto ...
Использование JSONP для загрузки конфиденциальных данных из другого домена таким образом действительно небезопасно, но люди все еще используют его. Плохая идея.