1、什么是跨域和同源策略?
跨域是浏览器的同源策略限制,是浏览器的一种安全策略,同源策略:即不同源之间的页面不允许相互访问数据。
同源策略是为了保护用户的隐私,防止其他不同源的仿造网站获取用户信息。
当一个请求url的协议、域名、端口三者之间任意一个与当前页面url不同即为跨域。
2、跨域的分类:
CORS跨域分为两种请求,一种是简单请求,另外一种就是复杂请求:
1)、简单请求满足条件:
请求方式为HEAD、POST 或者 GET
http头信息不超出以下字段:Accept、Accept-Language 、 Content-Language、 Last-Event-ID、
Content-Type(限于三个值:application/x-www-form-urlencoded、multipart/form-data、
text/plain)
2)、复杂请求:不是简单请求就是复杂请求:
复杂请求会先发起options请求为预检请求,只有在跨域情况下才会产生options请求;
PUT或DELETE或者axios,或者Content-Type字段的类型是application/json
3、跨域解决方案及带来的安全性问题
1)、项目中采用CORS跨域的方案来处理
- CORS,即跨域资源共享,服务端配置允许跨域的域名
2)、安全漏洞问题
-
CORS服务端的配置 Access-Control-Allow-Origin 设置为了 *,并且 Access-Control-Allow-Credentials 设置为false,这样任何网站都可以获取该服务端的任何数据了。这个时候伪造一些请求就可以获取到用户的信息。
-
解析origin头时出错 如果通过允许来源白名单来实现跨域,收到cors请求后,会将提供的来源与白名单进行比较,匹配的则授权访问。 而白名单的匹配可能出现问题,比如允许其他网站的域或者其子域来,使用正则匹配如果出现错误,就可能可以通过注册类似的域名来获取访问权限。
-
利用相互受cors信任的域来进行xss 假如两个互相受信任的源,如果其中一个网站存在XSS,攻击者就可以利用XSS注入一些JavaScript代码,利用这些代码对信任其源的另一个网站进行敏感信息的获取。
3)、预防cors的漏洞
-
正确配置跨域请求,如果包含敏感信息,则应该在则应在Access-Control-Allow-Origin标头中正确指定来源。
-
只允许信任的网站,做好跨域白名单的验证
-
避免在内部网络中使用通配符
-
服务器也需要增加对敏感数据的保护,做好会话管理和身份验证信息和页面输入框的长度限制防xss校验,以及验证码登录等方式。