浅析跨域带来的安全问题

1,315 阅读2分钟

1、什么是跨域和同源策略?

跨域是浏览器的同源策略限制,是浏览器的一种安全策略,同源策略:即不同源之间的页面不允许相互访问数据。

同源策略是为了保护用户的隐私,防止其他不同源的仿造网站获取用户信息。

当一个请求url的协议、域名、端口三者之间任意一个与当前页面url不同即为跨域。

2、跨域的分类:

CORS跨域分为两种请求,一种是简单请求,另外一种就是复杂请求:

1)、简单请求满足条件:

请求方式为HEADPOST 或者 GET http头信息不超出以下字段:AcceptAccept-LanguageContent-LanguageLast-Event-IDContent-Type(限于三个值:application/x-www-form-urlencodedmultipart/form-datatext/plain)

2)、复杂请求:不是简单请求就是复杂请求:

复杂请求会先发起options请求为预检请求,只有在跨域情况下才会产生options请求; PUTDELETE或者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校验,以及验证码登录等方式。