同源策略:允许写入吗?

Mag*_*nus 6 html javascript security

我对MDN对同源策略的描述有些挣扎。

他们指出:

通常允许跨域写入。

通常允许跨域嵌入。

跨域读取通常不会允许...

我了解第二个项目符号允许将跨域内容(例如CDN中的内容)标准嵌入到站点中:

  • <script src="...">
  • <link rel="stylesheet" href="...">

但是,何谓允许写入读不准?“写”是指我的网站写到另一个网站,还是相反的方向?与“阅读”相同,他们在说什么方向?一些例子将不胜感激。

T.J*_*der 12

MDN 举例说明了 write 的含义:

例如链接、重定向和表单提交。某些很少使用的 HTTP 请求需要预检

例如,我的网站 atexample.com可以有这个:

<form action="https://google.com/search" id="kittens-form" target="_blank">
<input type="hidden" name="q" value="kittens">
</form>
Run Code Online (Sandbox Code Playgroud)

...并这样做:

document.getElementById("kittens-form").submit();
Run Code Online (Sandbox Code Playgroud)

jsFiddle 示例

(在那个特定情况下,因为我有target="_blank",我必须响应用户操作来执行它,否则我会被弹出窗口阻止程序绊倒。但是如果我不打开一个新窗口,我可以随时执行此操作我喜欢。)

与“阅读”相同,他们在那里谈论什么方向?

他们谈论的是在源 A 中运行的代码从源 B读取信息。因此,example.com如果您的银行没有通过CORS明确允许,我的恶意站点无法从您银行的网站读取信息(因此我无法窃取有关您银行帐户的信息) ,因为您可能正在运行有效的银行会话......)。

此问题的答案中的更多内容:同源策略和 CORS(跨源资源共享)

  • @Magnus - “链接”的意思是`&lt;a href="..."&gt;...&lt;/a&gt;`;当提到`link`元素时,需要比“link”这个词更具体。但在这两种情况下,信息(URL 和潜在的查询字符串参数)都会发送到目标站点,目标站点可以使用它们。所以这就是向目标站点“写入”(在 ** 非常** 松散的意义上)信息,目标站点可以“读取”这些信息。 (4认同)
  • @Magnus - 您正在考虑浏览器中窗口之间的通信。这不是 MDN 所谈论的。它谈论的是浏览器托管的 JavaScript 代码将信息发送到网站的**服务器**。(不,您不能在浏览器中修改从不同来源加载的文档的 DOM,除非两个文档都使用 `document.domain` 时以一种相当有限的方式。) (3认同)
  • @Magnus - 向站点发送信息不会使站点运行*您的*代码。一个网站当然*可以*接受从网络上一些随机不受信任的来源运行的代码,但大概你的银行网站不接受。或者不会很久...... ;-) (2认同)