CORS во встроенном javascript

#javascript #cors

#javascript #cors

Вопрос:

Я намереваюсь добавить безопасность для нашего кода Javascript, который внедряется на другие сайты — например, например, код аналитики.

Пользователь копирует 4-5 строк кода и размещает его на своем сайте. Код фактически загружает реальный скрипт в качестве следующего шага.

Мне было рекомендовано использовать CORS вместо текущих вызовов JSONP, поскольку я могу ограничить домены.

Насколько я понимаю, CORS будет работать только в том случае, если html-страница, на которую будут добавлены мои скрипты, должна добавить домены доступа, и если я добавлю домены доступа для файла js, это не сработает.

Намеревается ли CORS для окончательного js или html-страницы использовать мой скрипт?

Редактировать:

Поскольку это сбивает с толку пользователей, я упростил его.

HTML в домене A добавляет мой скрипт из домена B, как Google Analytics. Могу ли я добавить домены доступа: при рендеринге моего JS или HTML должен добавить домены доступа в ответ?

Ответ №1:

В вики есть хорошее объяснение этого вопроса:

CORS может использоваться как современная альтернатива JSONP узору. Хотя JSONP он поддерживает только метод GET запроса, CORS он также поддерживает другие типы HTTP запросов. Использование CORS позволяет веб — программисту использовать обычный XMLHttpRequest , который поддерживает лучшую обработку ошибок , чем JSONP . С другой стороны, JSONP работает в устаревших браузерах, которые предшествовали поддержке CORS. CORS поддерживается большинством современных веб-браузеров. Кроме того, хотя JSONP это может вызвать проблемы с межсайтовым скриптингом ( XSS ), когда внешний сайт скомпрометирован, CORS позволяет веб-сайтам вручную анализировать ответы для обеспечения безопасности.

Насколько я понимаю, CORS будет работать только в том случае, если html-страница, на которую будут добавлены мои скрипты, должна добавить домены доступа

Вы можете получить доступ ко всем доменам через:

 Access-Control-Allow-Origin: *
 

Также сейчас CORS имеет хорошую поддержку.

P.S. IE8-9 имеет собственную реализацию by XDomainRequest .

Ответ №2:

CORS работает, заставляя ваш сервер выводить Access-Control-Allow-Origin заголовок, содержащий разрешенные домены. Сайтам, которые отправляют ajax-запросы на ваш сервер, не нужно делать ничего особенного для включения CORS, настройка не требуется. Сайты просто выполняют обычные запросы XHR, и браузер будет внутренне обрабатывать CORS.

Вы управляете доступом CORS из заголовка на вашем сервере. В CORS вы также можете управлять разрешенными HTTP-глаголами, например POST или GET ( Access-Control-Allow-Methods ) или разрешенными заголовками запросов ( Access-Control-Allow-Headers ).

Обратите внимание, что IE8 не поддерживает CORS XHR, Microsoft решила создать свою собственную реализацию CORS с помощью XDomainRequest. Поэтому, если какой-либо из сайтов, вызывающих ваш сервер, хочет поддерживать IE8, им нужно будет использовать XDomainRequest вместо XMLHttpRequest . Нет поддержки CORS в IE7 или eariler — даже XDomainRequest.