\r\n```\r\nその時、script.jsはexample1.comのオリジンとして処理される(例えばもしexample2.comの他のページにアクセスする処理がscript.jsにあった場合は同一オリジンポリシー違反でエラーが出る)のでしょうか?\r\n検証したいのですが、javascriptのスキルがないのでできずにいます。\r\n\r\nよろしくお願いします。\r\n\r\nーーーーーーーーー追記ーーーーーーーーー\r\nこの情報は以下のページで見かけたものです。英語のページなので私の読解力に問題がある可能性もあります。\r\nhttps://security.stackexchange.com/questions/61774/understanding-same-origin-policy","answerCount":3,"upvoteCount":0,"datePublished":"2019-05-05T17:35:15.497Z","dateModified":"2019-05-06T03:13:09.197Z","acceptedAnswer":{"@type":"Answer","text":"表題の、\r\n\r\n> scriptタグで外部サイトのjavascriptを指定した場合のオリジンについて\r\n\r\nというのは、例えば CDN にあるスクリプトファイルを参照するなど普通に行うことです。\r\n\r\n当然オリジンは異なることになりますが、同一オリジンポリシーによる制約に引っかかるような作り方はしてないはずで、心配には及ばないと思います。\r\n\r\n問題が出るとすると、以下の記事の「異なるオリジンへのネットワークアクセス」のセクションに書いてある「異なるオリジンからの読み込み」でしょう。\r\n\r\n同一オリジンポリシー\r\n[https://developer.mozilla.org/ja/docs/Web/Security/Same-origin_policy](https://developer.mozilla.org/ja/docs/Web/Security/Same-origin_policy)\r\n\r\n質問者さんが気にしている、\r\n\r\n> 例えばもしexample2.comの他のページにアクセスする処理がscript.jsにあった場合は同一オリジンポリシー違反でエラーが出る\r\n\r\nというのは、例えば ajax で example2.com にあるリソースにアクセスしようとするケースですが、http://example2.com/script.js にそのようなスクリプトが含まれていることは普通はないはずです。(あったら異常でそのサイトには近づかない方がよさそうです)","dateModified":"2019-05-06T04:25:42.451Z","datePublished":"2019-05-06T04:25:42.451Z","upvoteCount":3,"url":"https://teratail.com/questions/187920#reply-279015"},"suggestedAnswer":[{"@type":"Answer","text":"### 前提\r\n\r\n> この情報は以下のページで見かけたものです。英語のページなので私の読解力に問題がある可能性もあります。\r\n> [https://security.stackexchange.com/questions/61774/understanding-same-origin-policy](https://security.stackexchange.com/questions/61774/understanding-same-origin-policy)\r\n\r\n「オリジン」で一括りにせず、CORS, CSPを区別して下さい。\r\nリンク先にもその2つのキーワードとリンクがあります。\r\n\r\n### Cross-Origin Resource Sharing (CORS)\r\n\r\nCORSとは、既にあるオリジンから異なるオリジンリソースをfetchする仕組みを指します。\r\nJavaScriptにおいては、`XMLHttpRequest`, `Fetch` で外部リソース読み込みをする際のポリシーといえます。\r\n\r\n- [3.2. CORS protocol - Fetch Standard](https://fetch.spec.whatwg.org/#http-cors-protocol)\r\n- [3.2. CORS プロトコル - Fetch Standard (日本語訳)](https://triple-underscore.github.io/Fetch-ja.html#http-cors-protocol)\r\n- [オリジン間リソース共有 (CORS) - HTTP | MDN](https://developer.mozilla.org/ja/docs/Web/HTTP/CORS)\r\n\r\nHTTPヘッダ `Access-Control-*` で外部からの読み込みを制御します。\r\n\r\n- [3.2.3. HTTP 応答 - Fetch Standard (日本語訳)](https://triple-underscore.github.io/Fetch-ja.html#http-responses)\r\n- [Access-Control-Allow-Origin](https://developer.mozilla.org/ja/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)\r\n- [Access-Control-Allow-Methods - HTTP | MDN](https://developer.mozilla.org/ja/docs/Web/HTTP/Headers/Access-Control-Allow-Methods)\r\n- [Access-Control-Allow-Headers - HTTP | MDN](https://developer.mozilla.org/ja/docs/Web/HTTP/Headers/Access-Control-Allow-Headers)\r\n- [Access-Control-Allow-Credentials - HTTP | MDN](https://developer.mozilla.org/ja/docs/Web/HTTP/Headers/Access-Control-Allow-Credentials)\r\n\r\n### Content Security Policy (CSP)\r\n\r\nCSPとは、Webページ上から外部リソースのfetch/実行を制御するポリシーを指します。\r\n\r\n- [Content Security Policy Level 3](https://w3c.github.io/webappsec-csp/)\r\n- [Content Security Policy Level 3 日本語訳](https://triple-underscore.github.io/CSP3-ja.html)\r\n- [コンテンツセキュリティポリシー (CSP) - HTTP | MDN](https://developer.mozilla.org/ja/docs/Web/HTTP/CSP)\r\n- [コンテンツ セキュリティ ポリシー | Web | Google Developers](https://developers.google.com/web/fundamentals/security/csp/?hl=ja)\r\n\r\nHTTPヘッダ `Content-Security-Policy` で制御しますが、これはmeta要素で代用出来ます。\r\n\r\n```html\r\n \r\n\r\n```\r\n\r\n上記HTMLをGoogle Chrome 74.0.3729.131に読み込ませた場合、コンソールに次のエラーメッセージが出力され、外部JSは読み込まれません。\r\n\r\n```\r\nRefused to load the script 'https://code.jquery.com/jquery-3.4.1.min.js' because it violates the following Content Security Policy directive: \"script-src 'self'\". Note that 'script-src-elem' was not explicitly set, so 'script-src' is used as a fallback.\r\n```\r\n\r\nRe: yamamotoyama さん","dateModified":"2019-05-06T05:09:12.610Z","datePublished":"2019-05-06T05:09:12.610Z","upvoteCount":3,"url":"https://teratail.com/questions/187920#reply-279029","comment":[]},{"@type":"Answer","text":"example1からexample2のjsを読み込んでexample2のapiにajaxで接続しようとしても\r\n特別なアクセス制限お解除がなければCORSにひっかかり読み込むことはできません\r\nCORSを回避するためにはJSONPで処理することが多いです","dateModified":"2019-05-06T03:49:26.246Z","datePublished":"2019-05-06T03:49:26.246Z","upvoteCount":1,"url":"https://teratail.com/questions/187920#reply-279008","comment":[]}],"breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"トップ","url":"https://teratail.com"},{"@type":"ListItem","position":2,"name":"JavaScriptに関する質問","url":"https://teratail.com/tags/JavaScript"},{"@type":"ListItem","position":3,"name":"JavaScript","url":"https://teratail.com/tags/JavaScript"}]}}}
前提
この情報は以下のページで見かけたものです。英語のページなので私の読解力に問題がある可能性もあります。
https://security.stackexchange.com/questions/61774/understanding-same-origin-policy
「オリジン」で一括りにせず、CORS, CSPを区別して下さい。
リンク先にもその2つのキーワードとリンクがあります。
Cross-Origin Resource Sharing (CORS)
CORSとは、既にあるオリジンから異なるオリジンリソースをfetchする仕組みを指します。
JavaScriptにおいては、XMLHttpRequest, Fetch で外部リソース読み込みをする際のポリシーといえます。
HTTPヘッダ Access-Control-* で外部からの読み込みを制御します。
Content Security Policy (CSP)
CSPとは、Webページ上から外部リソースのfetch/実行を制御するポリシーを指します。
HTTPヘッダ Content-Security-Policy で制御しますが、これはmeta要素で代用出来ます。
html
1 < meta http-equiv = " Content-Security-Policy " content = " script-src ' self ' " >
2 < script src = " https://code.jquery.com/jquery-3.4.1.min.js " > </ script >
上記HTMLをGoogle Chrome 74.0.3729.131に読み込ませた場合、コンソールに次のエラーメッセージが出力され、外部JSは読み込まれません。
Refused to load the script 'https://code.jquery.com/jquery-3.4.1.min.js' because it violates the following Content Security Policy directive: "script-src 'self'". Note that 'script-src-elem' was not explicitly set, so 'script-src' is used as a fallback.
Re: yamamotoyama さん
ベストアンサー
表題の、
scriptタグで外部サイトのjavascriptを指定した場合のオリジンについて
というのは、例えば CDN にあるスクリプトファイルを参照するなど普通に行うことです。
当然オリジンは異なることになりますが、同一オリジンポリシーによる制約に引っかかるような作り方はしてないはずで、心配には及ばないと思います。
問題が出るとすると、以下の記事の「異なるオリジンへのネットワークアクセス」のセクションに書いてある「異なるオリジンからの読み込み」でしょう。
同一オリジンポリシー
https://developer.mozilla.org/ja/docs/Web/Security/Same-origin_policy
質問者さんが気にしている、
例えばもしexample2.comの他のページにアクセスする処理がscript.jsにあった場合は同一オリジンポリシー違反でエラーが出る
というのは、例えば ajax で example2.com にあるリソースにアクセスしようとするケースですが、http://example2.com/script.js にそのようなスクリプトが含まれていることは普通はないはずです。(あったら異常でそのサイトには近づかない方がよさそうです)
example1からexample2のjsを読み込んでexample2のapiにajaxで接続しようとしても
特別なアクセス制限お解除がなければCORSにひっかかり読み込むことはできません
CORSを回避するためにはJSONPで処理することが多いです
15分調べてもわからないことは teratailで質問しよう!
ただいまの回答率 85.29%
質問をまとめることで 思考を整理して素早く解決
テンプレート機能で 簡単に質問をまとめる
質問する