java 技术干货程序员程序猿阵线联盟-汇总各类技术干货

CORS 跨域资源访问

2018-01-17  本文已影响30人  给你添麻烦了

在介绍常见的针对 web 应用的攻击手法之前,我们先复习一下下面这些与 web 安全息息相关的知识点。理解掌握这些知识点,是进一步学习 web 安全的基础。

跨域

当一个资源请求一个其它域名或者另外一个端口的资源时会产生一个跨域 HTTP 请求(cross-origin HTTP request)。比如说,http://domaina.example 的某HTML页面通过 <img> 的 src 请求 http://domainb.foo/image.jpg。在当今的 Web 开发中,许多页面都会从另外一个站点加载各类资源(包括CSS、图片、JavaScript 脚本以及其它类资源)。
针对不同的来源的各类资源的交互,各大浏览器往往遵循同源策略,对交互进行处理。

同源策略

URL 结果 原因
http://store.company.com/dir2/other.html 成功 dir2/other.html
http://store.company.com/dir/inner/another.html 成功 dir/inner/another.html
https://store.company.com/secure.html 失败 不同的协议 ( https )
http://store.company.com:81/dir/etc.html 失败 不同的端口 ( 81 )
http://news.company.com/dir/other.html 失败 不同的主机(主机)

同源策略限制从一个源加载的文档或脚本如何与来自另一个源的资源进行交互。如果协议,端口(如果指定了一个)和主机对于两个页面是相同的,则两个页面具有相同的源。
下表给出了相对 http://store.company.com/dir/page.html 同源检测的示例:

URL 结果 原因
http://store.company.com/dir2/other.html 成功 dir2/other.html
http://store.company.com/dir/inner/another.html 成功 dir/inner/another.html
https://store.company.com/secure.html 失败 不同的协议 ( https )
http://store.company.com:81/dir/etc.html 失败 不同的端口 ( 81 )
http://news.company.com/dir/other.html 失败 不同的主机(主机)

常见跨源网络访问

同源策略控制了不同源之间的交互,例如在使用 XMLHttpRequest 或 <img> 标签时则会受到同源策略的约束。交互通常分为三类:

常见跨域资源嵌入示例

可见,在通常情况下使用 XMLHttpRequest 的跨域读取操作将会受到限制,而<img>的资源嵌入操作则可以执行。不过,若当前环境希望用户能够自由请求服务器,不受同源策略限制应该怎么办?这样的问题,就需要引入 CORS。

CORS

是一种跨域资源共享(Cross-origin resource sharing)的解决方案。它定义了一种浏览器和服务器交互的方式来确定是否允许跨域请求。
它是一个妥协,有更大的灵活性,但比起简单地允许所有这些的要求来说更加安全。简言之,CORS就是为了让AJAX可以实现可控的跨域访问而生的。
通常我们采用配置 http header 的方式就可以启用 CORS
Access–Control-Allow-Origin: *

启用 CORS 带来的安全隐患

总结

一句话概括跨域、同源策略、CORS
: 属于不同源的资源之间互相请求时会产生跨域访问的问题。各大浏览器通常基于同源策略对跨域访问进行处理。而 CORS 则提供了跨域资源共享的解决方案,使的同源策略能够通过 CORS 变得更加的灵活,以满足不同场景的需要。

最后,下一章我们将学习 CSRF 跨站请求伪造(Cross-Site Request Forgery),来加深对跨域、同源、CORS 运行原理的理解。

上一篇 下一篇

猜你喜欢

热点阅读