Какое место JSONP в платформе CORS?

Я исследую модели CORS Attacks, XSS и JSONP и модели Cross Origin Embedded для получения информации о совместном использовании ресурсов из разных источников. Но я не совсем понимаю логику JSONP. Я новичок в этой теме. Любой человек может использовать JSONP для атак? И как мы можем предотвратить подобные атаки? А также не могли бы вы объяснить токен CSRF?

1 ответ

JSONP немного хитрый с точки зрения безопасности:

  • Требует чрезмерного доверия. Предположим, у вас есть страница, размещенная на a.com, и она использует JSONP для доступа к услугам, предоставляемым b.org. Это предполагает 100% доверие к b.org. Если b.org злонамеренный или содержит ошибки, он может нарушить безопасность страницы для встраивания и все происхождение a.com. Такое избыточное доверие опасно с точки зрения безопасности: оно делает ваше приложение хрупким.

  • Другими словами: JSONP - это, по сути, XSS, навязанный самим себе. Да, хорошо, я знаю, что это особенность, а не ошибка, но все же...

  • CSRF уязвимости. Вы должны помнить, что нужно защищаться от уязвимостей CSRF, а с JSONP это немного сложно. Стандартный совет состоит в том, чтобы гарантировать, что только запросы POST могут вызвать побочный эффект, и включать маркер CSRF во все запросы POST; но JSONP включает в себя отправку запроса GET для запуска побочного эффекта, что не совсем чистое решение, которое вы когда-либо видели. Таким образом, это означает, что хост, который предоставляет сервис JSONP, должен помнить, что нужно проверять токены CSRF даже при запросах GET. Кроме того, требуется немного хитрый протокол для страницы встраивания (a.com), чтобы получить правильный токен CSRF из сервиса JSONP (b.org). Это становится грязным.

  • Вызывает смешанные предупреждения. Предположим, у нас есть страница, размещенная на https://a.com/ и она обращается к службе JSONP на http://b.org/. Тогда это неизбежно вызовет страшно выглядящее предупреждение о смешанном контенте (поскольку JSONP включает загрузку скрипта с http://b.org/).

  • Аутентификация пользователя становится ужасной. Если b.org хочет аутентифицировать пользователя, это сложно сделать при использовании JSONP. Страница встраивания (a.com) должна сначала каким-то образом дать пользователю возможность войти в b.org заранее, прежде чем получить доступ к сервису JSONP b.org. Оба сайта необходимо согласовать.

Вот краткое изложение проблем безопасности с JSONP, насколько я понимаю:

С точки зрения потребителя:

  • Вы должны доверять провайдеру, чтобы он не возвращал вредоносный JavaScript вместо ожидаемого JSON, заключенного в указанный вами обратный вызов JSONP. То же самое относится и к любым сторонним встроенным надстройкам JavaScript, таким как Google Analytics. Он похож на XSS-атаки только тем, что позволяет третьей стороне выполнять произвольный JavaScript в вашем приложении, однако сначала вы должны довериться этой третьей стороне, сделав запрос в первую очередь.

С точки зрения провайдера:

  • Вы не должны предполагать, что даже если cookie-файл (-ы) клиента присутствует в запросе о том, что потребитель является веб-страницей, находящейся под вашим контролем. Сравните заголовок Referer с белым списком авторизованных URL-адресов и / или не полагайтесь на проверку подлинности на основе файлов cookie. Аналогично CSRF / замешательство депутата в замешательстве.
Другие вопросы по тегам