mozilla

比较版本

JavaScript 的同源策略

更改版本

修订版 613783:

由 Taro 在 进行的修订 613783

修订版 613833:

由 ziyunfei 在 进行的修订 613833

标题:
JavaScript的同源策略
JavaScript 的同源策略
网址缩略名:
Web/Security/Same-origin_policy
Web/Security/Same-origin_policy
标签:
"同源策略", "Same-or", "Security", "JavaScript"
"Same-or", "Security", "同源策略", "JavaScript"
内容:

修订版 613783
修订版 613833
n90      参见<a href="https://developer.mozilla.org/en-US/docs/Same-orn90      参见<a href="https://developer.mozilla.org/zh-CN/docs/Same-or
>igin_policy_for_file:_URIs" style="line-height: 1.5; text-decorat>igin_policy_for_file:_URIs" title="Same-origin_policy_for_file:_U
>ion: none;" title="Same-origin_policy_for_file:_URIs">origin defi>RIs">origin definition for&nbsp;<code>file:</code>&nbsp;URLs</a><
>nition for&nbsp;<code style="font-size: 14px;">file:</code>&nbsp;>span>.</span>
>URLs</a><span style="line-height: 1.5;">.</span> 
n109        <code>端口:IE未将端口号加入到同源策略的组成部分之中,因此</code><span style="linen109        <code>端口:IE未将端口号加入到同源策略的组成部分之中,因此</code><span>&nbsp;</spa
>-height: 1.5;">&nbsp;</span><span style="font-family: 'Courier Ne>n><span>http://company.com:81/index.html&nbsp;</span><span>和</spa
>w', 'Andale Mono', monospace; font-size: 12px; line-height: norma>n><span>http://company.com/index.html &nbsp;</span>属于同源并且不受任何限制。
>l; background-color: rgba(212, 221, 228, 0.14902);">http://compan 
>y.com:81/index.html&nbsp;</span><span style="font-family: 'Courie 
>r New', 'Andale Mono', monospace; line-height: normal;">和</span>< 
>span style="font-family: 'Courier New', 'Andale Mono', monospace; 
> font-size: 12px; line-height: normal; background-color: rgba(212 
>, 221, 228, 0.14902);">http://company.com/index.html &nbsp;</span 
>>属于同源并且不受任何限制。 
n119      页面可以改变本身的源,但会受到一些限制。脚本可以设置<code style="font-size: 14px;"><an119      页面可以改变本身的源,但会受到一些限制。脚本可以设置<code><a href="/zh-CN/DOM/documen
> href="/en/DOM/document.domain" title="en/DOM/document.domain">do>t.domain" title="zh-CN/DOM/document.domain">document.domain</a></
>cument.domain</a></code><span style="line-height: 1.5;">&nbsp;的值为>code><span>&nbsp;的值为当前域的一个后缀</span>
>当前域的一个后缀</span> 
120    </p>
121    <p>120    </p>
122      <span style="line-height: 1.5;">在同源策略中有一个例外,脚本可以设置</span> <121    <p>
>code style="font-size: 14px;"><a href="/en/DOM/document.domain" t 
>itle="en/DOM/document.domain">document.domain</a></code> <span st 
>yle="line-height: 1.5;">的值为当前域的一个后缀,如果这样做的话,短的域将作为后续同源检测的依据。例如,假设 
>在</span> <code style="font-size: 14px;"><span class="nowiki">http 
>://store.company.com/dir/other.html</span></code> <span style="li 
>ne-height: 1.5;">中的一个脚本执行了下列语句:</span> 
122      <span>在同源策略中有一个例外,脚本可以设置</span> <code><a href="/zh-CN/DOM/d
 >ocument.domain" title="zh-CN/DOM/document.domain">document.domain
 ></a></code> <span>的值为当前域的一个后缀,如果这样做的话,短的域将作为后续同源检测的依据。例如,假设在</spa
 >n> <code><span class="nowiki">http://store.company.com/dir/other.
 >html</span></code> <span>中的一个脚本执行了下列语句:</span>
n135        <code style="font-size: 14px;"><strong>附注</strong>:使用</con135        <code><strong>附注</strong>:使用</code>document.domain<code>来
>de>document.domain<code style="font-size: 14px;">来安全是让子域访问其父域,需要同>安全是让子域访问其父域,需要同时将子域和父域的document.domain设置为相同的值。必须要这么做,即使是简单的将父域设置为
>时将子域和父域的document.domain设置为相同的值。必须要这么做,即使是简单的将父域设置为其原来的值。没有这么做的话可能>其原来的值。没有这么做的话可能导致授权错误。</code>
>导致授权错误。</code> 
n145      <li>通常允许进行<em>跨域写操作(Cross-origin writes)。</em>例如链接(links),重n145      <li>通常允许进行<em>跨域写操作(Cross-origin writes)。</em>例如链接(links),重
>定向以及表单提交。特定少数的HTTP请求需要添加&nbsp;<a href="https://developer.mozilla.>定向以及表单提交。特定少数的HTTP请求需要添加&nbsp;<a href="https://developer.mozilla.
>org/en-US/docs/HTTP/Access_control_CORS#Preflighted_requests" sty>org/zh-CN/docs/HTTP/Access_control_CORS#Preflighted_requests" tit
>le="text-decoration: none;" title="HTTP/Access_control_CORS#Prefl>le="HTTP/Access_control_CORS#Preflighted_requests">preflight</a>。
>ighted_requests">preflight</a>。 
n149      <li>通常不允许<em>跨域读操作(Cross-origin reads)。</em>但常可以通过内嵌资源来巧妙的进n149      <li>通常不允许<em>跨域读操作(Cross-origin reads)。</em>但常可以通过内嵌资源来巧妙的进
>行读取访问。例如可以读取嵌入图片的高度和宽度,调用内嵌脚本的方法,或<a href="https://grepular.com/A>行读取访问。例如可以读取嵌入图片的高度和宽度,调用内嵌脚本的方法,或<a href="https://grepular.com/A
>busing_HTTP_Status_Codes_to_Expose_Private_Information" style="te>busing_HTTP_Status_Codes_to_Expose_Private_Information" title="ht
>xt-decoration: none;" title="https://grepular.com/Abusing_HTTP_St>tps://grepular.com/Abusing_HTTP_Status_Codes_to_Expose_Private_In
>atus_Codes_to_Expose_Private_Information">availability of an embe>formation">availability of an embedded resource</a>.
>dded resource</a>. 
n157        <code style="font-size: 14px;">&lt;script src="..."&gt;&ln157        <code>&lt;script src="..."&gt;&lt;/script&gt;标签嵌入跨域脚本。语法错
>t;/script&gt;标签嵌入跨域脚本。语法错误信息只能在同源脚本中捕捉到。</code>>误信息只能在同源脚本中捕捉到。</code>
158      </li>
159      <li>158      </li>
160        <span style="line-height: 1.5;">&nbsp;</span><code style=159      <li>
>"font-size: 14px;">&lt;link rel="stylesheet" href="..."&gt;标签嵌入CS 
>S。由于CSS的<a href="http://scarybeastsecurity.blogspot.dk/2009/12/ge 
>neric-cross-browser-cross-domain.html">松散的语法规则</a>,CSS的跨域需要一个设置正确 
>的Content-Type消息头。不同浏览器有不同的限制:</code><span style="line-height: 1.5 
>;">&nbsp;</span><a href="http://msdn.microsoft.com/en-us/library/ 
>ie/gg622939%28v=vs.85%29.aspx" style="line-height: 1.5; text-deco 
>ration: none;" title="http://msdn.microsoft.com/en-us/library/ie/ 
>gg622939%28v=vs.85%29.aspx">IE</a><span style="line-height: 1.5;" 
>>,&nbsp;</span><a href="http://www.mozilla.org/security/announce/ 
>2010/mfsa2010-46.html" style="line-height: 1.5; text-decoration:  
>none;" title="http://www.mozilla.org/security/announce/2010/mfsa2 
>010-46.html">Firefox</a><span style="line-height: 1.5;">,&nbsp;</ 
>span><a href="http://code.google.com/p/chromium/issues/detail?id= 
>9877" style="line-height: 1.5; text-decoration: none;" title="htt 
>p://code.google.com/p/chromium/issues/detail?id=9877">Chrome</a>< 
>span style="line-height: 1.5;">,&nbsp;</span><a href="http://supp 
>ort.apple.com/kb/HT4070" style="line-height: 1.5; text-decoration 
>: none;" title="http://support.apple.com/kb/HT4070">Safari</a><sp 
>an style="line-height: 1.5;">&nbsp;(跳至CVE-2010-0051)部分 和&nbsp;</s 
>pan><a href="http://www.opera.com/support/kb/view/943/" style="li 
>ne-height: 1.5; text-decoration: none;" title="http://www.opera.c 
>om/support/kb/view/943/">Opera</a>。 
160        <span>&nbsp;</span><code>&lt;link rel="stylesheet" href="
 >..."&gt;标签嵌入CSS。由于CSS的<a href="http://scarybeastsecurity.blogspot
 >.dk/2009/12/generic-cross-browser-cross-domain.html">松散的语法规则</a>,
 >CSS的跨域需要一个设置正确的Content-Type消息头。不同浏览器有不同的限制:</code><span>&nbsp;</s
 >pan><a href="http://msdn.microsoft.com/zh-CN/library/ie/gg622939%
 >28v=vs.85%29.aspx" title="http://msdn.microsoft.com/zh-CN/library
 >/ie/gg622939%28v=vs.85%29.aspx">IE</a><span>,&nbsp;</span><a href
 >="http://www.mozilla.org/security/announce/2010/mfsa2010-46.html"
 > title="http://www.mozilla.org/security/announce/2010/mfsa2010-46
 >.html">Firefox</a><span>,&nbsp;</span><a href="http://code.google
 >.com/p/chromium/issues/detail?id=9877" title="http://code.google.
 >com/p/chromium/issues/detail?id=9877">Chrome</a><span>,&nbsp;</sp
 >an><a href="http://support.apple.com/kb/HT4070" title="http://sup
 >port.apple.com/kb/HT4070">Safari</a><span>&nbsp;(跳至CVE-2010-0051)
 >部分 和&nbsp;</span><a href="http://www.opera.com/support/kb/view/94
 >3/" title="http://www.opera.com/support/kb/view/943/">Opera</a>。
n166      <li>&nbsp;<a href="https://developer.mozilla.org/en-US/docsn166      <li>&nbsp;<a href="https://developer.mozilla.org/zh-CN/docs
>/HTML/Element/object" style="text-decoration: none;" title="HTML/>/HTML/Element/object" title="HTML/Element/object"><code>&lt;objec
>Element/object"><code style="font-size: 14px;">&lt;object&gt;</co>t&gt;</code></a>,&nbsp;<a href="https://developer.mozilla.org/zh-
>de></a>,&nbsp;<a href="https://developer.mozilla.org/en-US/docs/H>CN/docs/HTML/Element/embed" title="HTML/Element/embed"><code>&lt;
>TML/Element/embed" style="text-decoration: none;" title="HTML/Ele>embed&gt;</code></a>&nbsp;和&nbsp;<code><a href="https://developer
>ment/embed"><code style="font-size: 14px;">&lt;embed&gt;</code></>.mozilla.org/zh-CN/docs/HTML/Element/applet" title="HTML/Element/
>a>&nbsp;和&nbsp;<code style="text-decoration: none; font-size: 14p>applet">&lt;applet&gt;</a>的插件。</code>
>x;"><a href="https://developer.mozilla.org/en-US/docs/HTML/Elemen 
>t/applet" style="text-decoration: none;" title="HTML/Element/appl 
>et">&lt;applet&gt;</a>的插件。</code> 
167      </li>
168      <li>167      </li>
169        <a href="https://developer.mozilla.org/en-US/docs/CSS/@fo
>nt-face" style="text-decoration: none;" title="CSS/@font-face"><c 
>ode style="text-decoration: none; font-size: 14px;">@font-face</c 
>ode></a>引入的字体。一些浏览器允许跨域字体(&nbsp;cross-origin fonts),一些需要同源字体(same 
>-origin fonts)。 
170      </li>168      <li>
171      <li>&nbsp;<a href="https://developer.mozilla.org/en-US/docs169        <a href="https://developer.mozilla.org/zh-CN/docs/CSS/@fo
>/HTML/Element/frame" style="text-decoration: none;" title="HTML/E>nt-face" title="CSS/@font-face"><code>@font-face</code></a>引入的字体。
>lement/frame"><code style="font-size: 14px;">&lt;frame&gt;</code>>一些浏览器允许跨域字体(&nbsp;cross-origin fonts),一些需要同源字体(same-origin fonts)
></a>&nbsp;和&nbsp;<code style="text-decoration: none; font-size: 1>
>4px;"><a href="https://developer.mozilla.org/en-US/docs/HTML/Elem 
>ent/iframe" style="text-decoration: none;" title="HTML/Element/if 
>rame">&lt;iframe&gt;</a>载入的任何资源。站点可以使用</code><a href="https://dev 
>eloper.mozilla.org/en-US/docs/HTTP/X-Frame-Options" style="text-d 
>ecoration: none; font-family: 'Courier New', 'Andale Mono', monos 
>pace; line-height: normal;" title="HTTP/X-Frame-Options">X-Frame- 
>Options</a>消息头来阻止这种形式的跨域交互。 
170      </li>
171      <li>&nbsp;<a href="https://developer.mozilla.org/zh-CN/docs
 >/HTML/Element/frame" title="HTML/Element/frame"><code>&lt;frame&g
 >t;</code></a>&nbsp;和&nbsp;<code><a href="https://developer.mozill
 >a.org/zh-CN/docs/HTML/Element/iframe" title="HTML/Element/iframe"
 >>&lt;iframe&gt;</a>载入的任何资源。站点可以使用</code><a href="https://develope
 >r.mozilla.org/zh-CN/docs/HTTP/X-Frame-Options" title="HTTP/X-Fram
 >e-Options">X-Frame-Options</a>消息头来阻止这种形式的跨域交互。
n178      使用<a href="https://developer.mozilla.org/en-US/docs/HTTP/Acn178      使用<a href="https://developer.mozilla.org/zh-CN/docs/HTTP/Ac
>cess_control_CORS" style="line-height: 1.5; text-decoration: none>cess_control_CORS" title="HTTP/Access_control_CORS">CORS</a><span
>;" title="HTTP/Access_control_CORS">CORS</a><span style="line-hei>>&nbsp;来实现跨域访问。</span>
>ght: 1.5;">&nbsp;来实现跨域访问。</span> 
n181      <strong><span style="line-height: 1.5;">阻止跨域访问</span></stron181      <strong><span>阻止跨域访问</span></strong>
>ng> 
n184      <li>阻止跨域写操作,只要检测请求中的一个不可测的标记(CSRF token)即可,这个标记被称为<a href="n184      <li>阻止跨域写操作,只要检测请求中的一个不可测的标记(CSRF token)即可,这个标记被称为<a href="
>https://www.owasp.org/index.php/Cross-Site_Request_Forgery_%28CSR>https://www.owasp.org/index.php/Cross-Site_Request_Forgery_%28CSR
>F%29" style="line-height: 1.5; text-decoration: none;" title="htt>F%29" title="https://www.owasp.org/index.php/Cross-Site_Request_F
>ps://www.owasp.org/index.php/Cross-Site_Request_Forgery_%28CSRF%2>orgery_%28CSRF%29">Cross-Site Request Forgery (CSRF)</a><span>&nb
>9">Cross-Site Request Forgery (CSRF)</a><span style="line-height:>sp;标记。必须使用这个标记来阻止页面的跨站读操作。</span>
> 1.5;">&nbsp;标记。必须使用这个标记来阻止页面的跨站读操作。</span> 
185      </li>
186      <li>185      </li>
187        <span style="line-height: 1.5;">阻止资源的跨站读取,需要保证该资源是不可嵌入的。阻
>止嵌入行为是必须的,因为嵌入资源通常向其暴露信息。</span> 
188      </li>186      <li>
187        <span>阻止资源的跨站读取,需要保证该资源是不可嵌入的。阻止嵌入行为是必须的,因为嵌入资源通常向其暴露信息。<
 >/span>
189      <li>188      </li>
189      <li>
190        <span style="line-height: 1.5;">阻止跨站嵌入,确保你得资源不能是以上列出的可嵌入资190        <span>阻止跨站嵌入,确保你得资源不能是以上列出的可嵌入资源格式。多数情况下浏览器都不会遵守Conten-Ty
>源格式。多数情况下浏览器都不会遵守Conten-Type消息头。例如,如果你在&lt;script&gt;标签中嵌入HTML文档,>pe消息头。例如,如果你在&lt;script&gt;标签中嵌入HTML文档,浏览器仍将HTML解析为Javascript。</s
>浏览器仍将HTML解析为Javascript。</span><span style="line-height: 1.5;">Whe>pan><span>When your resource is not an entry point to your site, 
>n your resource is not an entry point to your site, you can also >you can also use a CSRF token to prevent embedding.</span>
>use a CSRF token to prevent embedding.</span> 
n194      <b>跨域脚本API</b><b style="line-height: 1.5;">访问</b>n194      <b>跨域脚本API</b><b>访问</b>
195    </h4>
196    <p>195    </h4>
197      Javascript的APIs中,如<span style="line-height: 1.5;">&nbsp;</s196    <p>
>pan><a href="https://developer.mozilla.org/en-US/docs/DOM/HTMLIFr 
>ameElement" style="line-height: 1.5; text-decoration: none;" titl 
>e="DOM/HTMLIFrameElement"><code style="font-size: 14px;">iframe.c 
>ontentWindow</code></a><span style="line-height: 1.5;">, {{domxre 
>f("window.parent")}}, {{domxref("window.open")}} 和 {{domxref("win 
>dow.opener")}} 允许文档间直接相互引用。当两个文档的源不同时,这些引用方式将对</span><span style= 
>"line-height: 1.5;">&nbsp;</span><a href="http://www.whatwg.org/s 
>pecs/web-apps/current-work/multipage/browsers.html#security-windo 
>w" style="line-height: 1.5; text-decoration: none;" title="http:/ 
>/www.whatwg.org/specs/web-apps/current-work/multipage/browsers.ht 
>ml#security-window">Window</a><span style="line-height: 1.5;">&nb 
>sp;和&nbsp;</span><a href="http://www.whatwg.org/specs/web-apps/cu 
>rrent-work/multipage/history.html#security-location" style="line- 
>height: 1.5; text-decoration: none;" title="http://www.whatwg.org 
>/specs/web-apps/current-work/multipage/history.html#security-loca 
>tion">Location</a>对象的访问添加限制。可以使用{{domxref("window.postMessage")}} 
> 作为替代方案,提供跨域文档间的通讯。 
197      Javascript的APIs中,如<span>&nbsp;</span><a href="https://devel
 >oper.mozilla.org/zh-CN/docs/DOM/HTMLIFrameElement" title="DOM/HTM
 >LIFrameElement"><code>iframe.contentWindow</code></a><span>, {{do
 >mxref("window.parent")}}, {{domxref("window.open")}} 和 {{domxref(
 >"window.opener")}} 允许文档间直接相互引用。当两个文档的源不同时,这些引用方式将对</span><span>&n
 >bsp;</span><a href="http://www.whatwg.org/specs/web-apps/current-
 >work/multipage/browsers.html#security-window" title="http://www.w
 >hatwg.org/specs/web-apps/current-work/multipage/browsers.html#sec
 >urity-window">Window</a><span>&nbsp;和&nbsp;</span><a href="http:/
 >/www.whatwg.org/specs/web-apps/current-work/multipage/history.htm
 >l#security-location" title="http://www.whatwg.org/specs/web-apps/
 >current-work/multipage/history.html#security-location">Location</
 >a>对象的访问添加限制。可以使用{{domxref("window.postMessage")}} 作为替代方案,提供跨域文档间的
 >通讯。
n206      存储在浏览器中的数据,如<a href="https://developer.mozilla.org/en-US/don206      存储在浏览器中的数据,如<a href="https://developer.mozilla.org/zh-CN/do
>cs/Web/Guide/API/DOM/Storage">localStorage</a>和<a href="https://d>cs/Web/Guide/API/DOM/Storage">localStorage</a>和<a href="https://d
>eveloper.mozilla.org/en-US/docs/IndexedDB">IndexedDB</a>,以源进行分割。每>eveloper.mozilla.org/zh-CN/docs/IndexedDB">IndexedDB</a>,以源进行分割。每
>个源都拥有自己单独的存储空间,一个源中的Javascript脚本不能对属于其它源的数据进行读写操作。>个源都拥有自己单独的存储空间,一个源中的Javascript脚本不能对属于其它源的数据进行读写操作。
207    </p>
208    <p>207    </p>
208    <p>
209      <a href="https://developer.mozilla.org/en-US/docs/Web/API/W209      <a href="https://developer.mozilla.org/zh-CN/docs/Web/API/W
>indow.name">window.name</a>属性可以用来临时存储数据,可以跨域访问。>indow.name">window.name</a>属性可以用来临时存储数据,可以跨域访问。
210    </p>
211    <p>210    </p>
211    <p>
212      Cookies使用不同的源定义方式。一个页面可以为本域和任何父域设置cookie,只要是父域不是公共后缀(public212      Cookies使用不同的源定义方式。一个页面可以为本域和任何父域设置cookie,只要是父域不是公共后缀(public
> suffix)即可。Firefox和Chrome使用<a href="http://publicsuffix.org/" sty> suffix)即可。Firefox和Chrome使用<a href="http://publicsuffix.org/">Pub
>le="line-height: 1.5; text-decoration: none;">Public Suffix List<>lic Suffix List</a>决定一个域是否是一个公共后缀(public suffix)。不管使用哪个协议(HTTP/HT
>/a>决定一个域是否是一个公共后缀(public suffix)。不管使用哪个协议(HTTP/HTTPS)或端口号,浏览器都允许给>TPS)或端口号,浏览器都允许给定的域以及其任何子域名(sub-domains)来访问cookie。设置cookie时,你可以使用
>定的域以及其任何子域名(sub-domains)来访问cookie。设置cookie时,你可以使用Domain,Path,Secu>Domain,Path,Secure,和Http-Only标记来限定其访问性。读取cookie时,不会知晓它的出处。尽管使用安全的
>re,和Http-Only标记来限定其访问性。读取cookie时,不会知晓它的出处。尽管使用安全的https连接,任何可见的coo>https连接,任何可见的cookie都是使用不安全的连接设置的。
>kie都是使用不安全的连接设置的。 
t220    <ul style="margin-bottom: 1.286em; padding-left: 0px; list-stt220    <ul>
>yle-type: none;"> 
221      <li style="padding-bottom: 0px; background-image: none;">
222        <a href="https://developer.mozilla.org/en-US/docs/Same-or
>igin_policy_for_file:_URIs" style="text-decoration: none;" title= 
>"Same-origin policy for file: URIs">Same-origin policy for file:  
>URIs</a> 
223      </li>221      <li>
224      <li style="padding-bottom: 0px; background-image: none;">222        <a href="https://developer.mozilla.org/zh-CN/docs/Same-or
 >igin_policy_for_file:_URIs" title="Same-origin policy for file: U
 >RIs">Same-origin policy for file: URIs</a>
223      </li>
224      <li>
225        <a href="http://www.w3.org/Security/wiki/Same_Origin_Poli225        <a href="http://www.w3.org/Security/wiki/Same_Origin_Poli
>cy" style="text-decoration: none;" title="http://www.w3.org/Secur>cy" title="http://www.w3.org/Security/wiki/Same_Origin_Policy">Sa
>ity/wiki/Same_Origin_Policy">Same-Origin Policy at W3C</a>>me-Origin Policy at W3C</a>

返回历史