Каковы опасности XSS передачи функций JS в JSON? - PullRequest
2 голосов
/ 12 января 2012

Достаточно просто создать объект JSON, подобный этому:

{"key": "value", "myFunction": function () {alert ('hi'); }}

и передать его с сервера в скрипт, где я могу вызвать myFunction (). Конечно же, функция работает, и я получаю предупреждение: «Привет». Для меня это может быть очень полезным способом сохранить размер скрипта небольшим. Тем не менее, я полагаю, что при передаче функций существуют опасности XSS, а не только данные через JSON. Может ли кто-нибудь объяснить, что это такое и, если необходимо, какие шаги можно предпринять, чтобы отрицать их?

Ответы [ 2 ]

2 голосов
/ 12 января 2012

function не является частью JSON , поскольку JSON не является JavaScript.

Большинство библиотек используют анализатор JSON (когда это возможно, браузер - один *)1007 *).Так что это не будет проанализировано правильно.Хотя использование eval для анализа JSON - это зло .eval вообще зло.

И вы все время загружаете JavaScript, используя <script>, поэтому я не вижу здесь проблемы с XSS.

0 голосов
/ 13 января 2012

Это зависит от того, как вы загружаете и анализируете JSON.Если вы используете jQuery и загружаете данные через AJAX, то эти данные передаются во встроенный JSON-парсер браузера, который не поддерживает функцию, как объясняет greut.http://erlend.oftedal.no/blog/misc/json/index.html

Однако, если вы загружаете его через JSONP (оборачивая функцию вокруг него), JSON добавляет его непосредственно в тег скрипта в конце страницы, как, например, Socialcast,уязвима.http://erlend.oftedal.no/blog/misc/json/index2.html

Если у вас есть проблемы с этим последним, вы должны помнить, что значения (и ключи) JSON всегда должны быть заключены в "".Поэтому, если вы создаете JSON из ненадежных данных, вы должны помнить, чтобы JSON кодировал его.Это похоже на кодирование Javascript, за исключением того, что JSON имеет некоторые дополнительные особенности.Например, у вас может быть действительный файл JSON, который не является допустимым javascript, поскольку он содержит символы, разрешенные в JSON, но которые необходимо кодировать в javascript.

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