跨域攻击之浏览器跨域原因分析及解决方案概述

造成跨域的根本原因是,两个资源的协议、域名、子域名、端口不同,而且是只要有一个不同,这种情况下所进行的访问行动都是跨域的。而出于安全性的考虑,浏览器通常会限制跨域访问,不允许跨域请求资源,这是浏览器的同源策略。

但是需要非常明确一点的是,跨域请求被禁止,并不是浏览器拦截了跨域请求,导致请求发不出去,而是浏览器拦截了服务器端返回的响应。

浏览器跨域解决方案

跨域资源共享(Cross Origin Resource Share)是一种允许一个网页上的JavaScript向另一个域中发出AJAX请求机制 。CORS机制的工作原理通过添加一些特定的HTTP头部标识,使得浏览器被告知下载的资源应当被允许给定的域(或者所有的域)进行Web请求。

可以对如下的ResponseHeaders参数进行设置,以达到跨域资源请求。

  • Access-Control-Allow-Origin :指定授权域来进行跨域请求,如果此项没有限制,使用*作为参数值。
  • Access-Control-Allow-Credentials :指定跨域请求是否需要验证。
  • Access-Control-Expose-Headers :指示哪一种头部标识可以被安全的暴露(公开)。
  • Access-Control-Max-Age :指定预检请求的最大缓存时间。
  • Access-Control-Allow-Methods :指定进行跨域请求时使用的方法。
  • Access-Control-Allow-Headers :指定实际的请求过程中哪些头部标识可以使用。

代码示例

浏览器跨域原因分析及解决方案

添加一个如上filter的Bean,然后在Controller上面添加@CrossOrigin注解即可。

浏览器三模块参数说明

在浏览器的一个常规请求中,通常包含三部分General,Response Headers,Request Headers。

General

#请求服务器路径

Request URL: https://nba-server.888888.com/nba/player-count

#请求方法Get

Request Method: GET

#请求响应码

Status Code: 200

#服务器IP+端口号

Remote Address: 10.0.245.245:443

#访问来源策略

Referrer Policy: no-referrer-when-downgrade

Response Headers

#证书验证

access-control-allow-credentials: true

#允许访问的源

access-control-allow-origin: https://nba-web.888888.com

#采用gzip压缩,压缩效果最好

content-encoding: gzip

content-type: application/json;charset=UTF-8

#返回时间

date: Thu, 02 Jul 2020 02:07:19 GMT

#返回状态码

status: 200

strict-transport-security: max-age=15724800; includeSubDomains

vary: Accept-Encoding, Origin, Access-Control-Request-Method, Access-Control-Request-Headers

x-svc: cs-backend-test-rbs-service-http

Request Headers

#指定客户端能够接收的内容类型

Accept: application/json, text/plain, */*

#授权值,服务器根据这个值解析出token

Authorization: Bearer ae7a11114-193f-4122-a615-d465807f615c

#源

Origin: https://nba-web.888888.com

#访问来源

Referer: https://nba-web.888888.com/listPlayer

#post请求下会存在这个值,指明消息主体数据的编码方式,也就是传到后台参数数据的编码方式

Content-Type: application/json;charset=UTF-8

#安全获取模式

Sec-Fetch-Mode: cors

#token值

token: ae7a11114-193f-4122-a615-d465807f615c

#浏览器信息

User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.36 Safari/537.36

 

总结

1.两个资源的协议、域名、子域名、端口不同,这种情况下所进行的访问行动都是跨域的。而出于安全性的考虑,浏览器通常会限制跨域访问,不允许跨域请求资源。

2.跨域只存在于浏览器端,是受到了浏览器的同源策略的限制。

3.CORS,跨域资源共享(Cross Origin Resource Share)是一种允许一个网页上的JavaScript向另一个域中发出AJAX请求机制。

4.跨域并不是请求发不出去,请求能发出去,服务端能收到请求并正常返回结果,只是结果被浏览器拦截了。之所以会跨域,是因为受到了同源策略的限制,同源策略要求源相同才能正常进行通信,即协议、域名、端口号都完全一致。

 

转载请注明链接地址:荐爱小站 » 跨域攻击之浏览器跨域原因分析及解决方案概述

赞 (0) 赏 !

觉得文章有用就打赏一下吧,赠人玫瑰手有余香!

支付宝扫一扫打赏

微信扫一扫打赏