引言
同源策略与跨域是web安全中非常基础的知识点,并且,有的web漏洞是和同源策略息息相关的,因此我们在这里用问答的方式介绍并理解一下同源策略与跨域的相关知识。
同源策略与跨域相关问题。
- 什么是同源,什么是跨域?
同源与跨域是相对的,如果一个请求url的协议,域名,端口与任意一个当前页面url相同则为同源,不同则为跨域。
- 如何理解同源策略?
- 同源策略是在浏览器客户端中实现的一种约定,与协议无关。
- 我们使用BP工具做测试渗透的时候,是没有同源限制的,只要网络可达, 协议支持,就可以任意请求相关资源。 但如果我们使用了谷歌浏览器,那么浏览器客户端就会自动判断当前页面的url与请求的资源是否是同源,若不是,默认会请求失败。
- 作为一种约定,同源策略是浏览器最核心与最基本的安全功能。当然,若能力支持,开发者大可自行实现一个没有同源策略的浏览器;不过,这样的浏览器怕是没有人会去用哈。
- 同源策略在安全方面有哪些作用?
同源政策的目的,是为了保证用户信息的安全,防止恶意的网站窃取数据。设想这样一种情况:A网站是一家银行,用户登录以后,又去浏览其他网站。如果其他网站可以读取A网站的 Cookie, 那么后果将不堪设想。
有了同源策略的限制,如果我们进行了非同源的跨站访问, 会实现如下效果:
- Cookie、LocalStorage 和 IndexDB 无法读取。
- DOM无法获得
- AJAX请求不能发送
这种情况下就可以很大程度上确保客户端安全。
- 如何解决跨域问题?
有时,我们实现的网站中确实有跨域的需求怎么办呢?
-
jsonp: 主要是利用script标签的src属性不受同源策略的影响,然后通过前端与后端配合的方式实现。
-
CORS:在后端设置Access-Control-Allow-Origin,给域名配置白名单,那么在白名单内的域名就可以跨域访问了。
- 同源策略与CSRF漏洞有啥关系?
我们知道,同源策略可以限制禁止读取非同源的cookie。 但是同源策略对某些标签没有限制(如 script, img, link css, iframe等), 所以像在img标签中的src地址发起请求时,会直接将用户的cookie传递过去,从而盗取用户身份进行非法操作,这就是CSRF漏洞。
- 如何防护csrf漏洞
- 验证 HTTP 头部 Referer 信息, 但是Referer可以伪造,因此防护不彻底。
- 在请求地址中添加一个随机产生的token并验证。 这需要客户端与服务端代码同时配合才可以实现。攻击者使用CSRF攻击, 是无法获取到这个token值的,也就无法利用成功。
总结
同源策略是非常基础与重要的知识点,与web安全防护,以及前后端开发都有着重要的联系。
参考资料:
https://blog.csdn.net/mijichui2153/article/details/121456386
https://blog.51cto.com/u_2839840/2382096