Проблемы безопасности с JSONP в jQuery - PullRequest
2 голосов
/ 11 июня 2011

Я пишу приложение, которое использует jQuery и JSONP для получения JSON от сторонних серверов. Основная идея моего приложения заключается в том, что это интерфейс с только логикой графического интерфейса, и сторонние серверы могут быть написаны любым пользователем для использования. Я понятия не имею, какие проблемы безопасности могут возникнуть из-за этого, но я определенно рассматриваю это как потенциальную проблему. Какие шаги я могу предпринять, чтобы убедиться, что сторонний сервер не полностью сломал мой сайт, на котором будет работать графический интерфейс?

Ответы [ 3 ]

2 голосов
/ 12 июня 2011

JSONP означает, что вы выполняете сторонний javascript, который должен возвращать объект Javascript.Сценарий, который вы загружаете с помощью JSONP, может делать все, что может локальный сценарий, поэтому он является вектором атаки XSS двумя способами: либо если третья сторона, у которой вы запрашиваете данные JSONP, является злой, либо если данные изменены с помощью оператораатака по середине.

Второго типа атаки можно избежать, если выполнять JSONP только через защищенные соединения (или его можно игнорировать, если ваша собственная страница отправляется по небезопасному соединению, и в этом случае существуют более простые способы).провести атаку «человек посередине»);Первый тип присущ JSONP и его нельзя избежать.Вы должны использовать JSONP, только когда доверяете источнику.В противном случае вы можете либо настроить шлюз AJAX на своем собственном сервере и запросить через него данные JSON (это будет работать только в том случае, если служба JSONP не требует аутентификации), либо использовать междоменные запросы AJAX (которые не работают в старых браузерах).и требуют определенных разрешений от сервера JSONP).

1 голос
/ 12 июня 2011

Если третьи лица не заслуживают доверия, у вас есть большая проблема здесь. Вместо того, чтобы отправлять код JSONP, они могли отправлять любой JavaScript-код, который им нужен, что может повредить ваш сайт или украсть информацию пользователей.

JSONP работает, просто добавляя удаленные данные на вашей странице с тегами <script>. Он разработан, чтобы избежать ограничений безопасности браузера, и поэтому должен использоваться только с надежными источниками.

Единственное решение этой проблемы на стороне клиента не существует.

РЕДАКТИРОВАТЬ: О, я неправильно понял ваш вопрос. Я думал, что клиент получит JSON.

JSONP - это просто объект JSON, заключенный в вызов функции javascript. Обычно, если вы работаете с сервера, вы просто запрашиваете сам развернутый объект JSON, но даже с объектом JSONP трудно пораниться, если вы не запускаете на нем eval().

Используете ли вы существующую библиотеку JSON? Если так, то с тобой все будет в порядке.

Вы сами это анализируете? Если так, избегайте eval, и с вами все будет в порядке.

0 голосов
/ 12 июня 2011

Хорошо, JSON описывает объект, а не исполняемую функцию. JSONP выполняет рендеринг этого результата запроса GET как функции на вашем клиенте и его выполнение. Это говорит о том, что самой большой проблемой безопасности, которую вы должны учитывать, является то, что ваш код делает с данными.

...