#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.