Есть проблемы безопасности для обеих сторон. Наиболее серьезным является сайт, включающий JSONP.
Если вы включаете домен из другого домена (который вы не контролируете), этот домен может изменить сценарий в любое время. Они могут заставить javascript делать что-либо в контексте вашей веб-страницы, что может делать ваш собственный javascript. Это невозможно, если вы используете JSONP. Вы должны изучить междоменную связь с помощью iframes, что лучше всего сделать с помощью превосходной библиотеки EasyDXM.
Если вы предлагаете веб-сервис, который обрабатывает JSONP, вы должны защититься от подделки межсайтовых запросов (CSRF). Именно здесь ваш веб-сервис возвращает конфиденциальную информацию зарегистрированным пользователям. Если пользователь зашел на ваш сайт, любой другой сайт может сгенерировать GET-запрос к сервису JSONP, и куки-файлы ВАШЕГО домена отправляются вместе с запросом - по сути, аутентифицируя зарегистрированного пользователя - за исключением того, что теперь удаленный домен получает ответ и может читать конфиденциальные данные!
Лучший способ защиты от CSRF - генерировать одноразовый номер (трудно угадываемое, случайно сгенерированное число) и сохранять его в сеансе. Выведите этот одноразовый номер во всех ваших формах на ВАШИХ веб-страницах и включите его во все запросы JSONP на ВАШИХ страницах. На сервере убедитесь, что одноразовый номер присутствует и правильно указан в запросе (будь то GET, POST и т. Д.). Другие домены не смогут угадать этот одноразовый номер и, следовательно, не смогут получить конфиденциальную информацию, несмотря на файлы cookie. отправляется.
Наконец, существует еще одна проблема безопасности: JSONP просто не поддерживает аутентификацию пользователей в браузере, такую, которая возможна с OAuth. Конечно, вы можете заставить сервер получить какой-то токен доступа (например, с OAuth) и использовать его. Однако, если вы хотите полностью выполнить аутентификацию в браузере, вы должны использовать междоменную связь с iFrames. Я думаю, что так делает OAuth 2.0. Вот как это делается: страницы, размещенные на вашем сайте, имеют полный доступ к вашему серверу. Имейте библиотеку javascript, которая загружает EasyDXM и использует ее для установки скрытого iframe на ваш сайт, и говорите с ним, используя это.