同源策略是否仍允许执行服务器端代码?

时间:2016-09-15 12:32:19

标签: ajax google-chrome security web cors

我原以为SOP在发送之前阻止了对其他域的所有请求符合他们的规则,但我在我的机器中做了一个简单的例子,它不是我所期望的:

1-我有一个本地服务器正在侦听端口8000,它将打印发送到/api URL的POST数据。

2-我有另一台本地服务器,它使用以下脚本提供页面:fetch('http://localhost:8000/api', {method: 'post', body: 'Sending data.'});。我更改了主机名,以便在浏览器中使用foo.com访问此页面。

当我访问foo.com时,我的跨域请求已执行,我可以在Chrome开发工具中看到CORS错误:No 'Access-Control-Allow-Origin' header is present on the requested resource,但在服务器控制台中仍然收到数据即可。我认为SOP的存在是为了解决这类问题。它的工作方式,只能保证你不能得到回复。是这样吗?几乎所有的网络文件都没有这么说。

我错过了什么?或者我的例子不知何故错了?

1 个答案:

答案 0 :(得分:6)

正如你所说的那样,许多人对同一起源政策的防范以及CORS的运作方式产生了很大的误解。

确实发出了请求,服务器处理它并创建响应。它只是阻止客户端访问结果的浏览器。这可能很容易让位于像CSRF这样的攻击。<​​/ p>

预检请求也有一个角色,但这一点并没有改变,相同的原始策略不会停止请求,它会阻止响应到达浏览器中的调用者