cors跨域资源共享漏洞的前置知识:同源概念、同源要素、跨域、JSONP等基础内容。
CORS漏洞(1):前置知识 😊
1:前置知识-同源策略:
1.1 产生原因:
同源策略限制从一个源加载的文档或脚本如何与来自另一个源的资源进行交互。这是一个用于隔离潜在恶意文件的关键的安全机制。它的存在可以保护用户隐私信息,防止身份伪造等(读取Cookie)。
1.2 含义:
同源要: 协议、域名、端口三个都要相同,缺一不可才叫同源。
同源策略用于限制应用程序之间的资源共享,确保一个应用里的资源只能被本应用的资源所访问。
如果要跨域通信,必须要引入跨域资源共享,如果没有正确配置,就会导致漏洞产生。
即使是同一个ip,不同域名也不是同源,这样的话同源策略里允许发出请求,但是不允许访问响应。
1.3 同源实例:
设 http://test.com/a/123.html 源
http://test.com/a/asd.html 同源 路径不同 |
2:跨域
由于同源策略的存在【规定不同域的客户端脚本如果没有明确授权允许执行,不能读写另一方的资源。同协议,同端口,同主机名的两个URL才能被认为同源。】,所以如果要跨域通信,必须要引入跨域资源共享 CORS 。
有一点必须要注意:跨域并不是请求发不出去,请求能发出去,服务端能收到请求并正常返回结果【返回包响应码还是200,】,只是结果被浏览器拦截了。之所以会跨域,是因为受到了同源策略的限制,同源策略要求源相同才能正常进行通信,即协议、域名、端口号都完全一致。
跨域的解决方案是跨域资源共享。
2.1 原理
服务器设置Access-Control-Allow-Origin HTTP响应头之后,浏览器将会允许跨域请求。
CORS是HTML5标准提出的跨域资源共享(Cross Origin Resource Share),支持GET、POST等所有HTTP请求。
CORS需要服务器端设置Access-Control-Allow-Origin
头,否则浏览器会因为安全策略拦截返回的信息。
3:常见跨域解决方案
产生于浏览器的同源策略,不同域名、不同端口、不同协议都会构成跨域;但在实际的业务中,很多场景需要进行跨域传递信息,这样就催生出多种跨域方法。
3.1 CORS 跨域资源共享
3.2 JSONP
JSONP 不是一门编程语言,也不是什么特别的技术,它更像一个漏洞,程序员可以利用这个漏洞,实现跨域(可以简单理解为跨域名)传输数据。虽然 JSONP 与 JSON 看起来很像,但它们却是完全不同的。
4:跨域威胁与漏洞
引入跨域资源共享之后,如果没有正确配置(或者由于实际业务场景要解决跨域传递信息,会催生很多跨域安全问题),就会导致漏洞产生。
在不同的业务场景下,各有适合的跨域方式。跨域解决了一些资源共享、信息交互的难题,但是有的跨域方式可能会带来安全问题,如jsonp可导致水坑攻击,<img>
等标签会被用来进行xss或csrf攻击。所以,在应用跨域的场景,需要格外注意安全问题。
参考链接: