参考文章:
https://xz.aliyun.com/t/12001?time__1311=GqGxRGiti%3Dd052x%2BxCwx7qGIxpbDulE%3DoD
https://blog.csdn.net/weixin_46622976/article/details/128452494
跨域资源共享
自己的理解,一般来讲,我们使用未授权的接口漏洞,都是因为一些接口并没有做一些接口的权限鉴定,因此可以看到我们通常可以通过接口访问到很多的敏感数据。但是如果说执行接口进行了权限的验证。我们还可以利用同源策略的配置错误,可以类似csrf漏洞一样,诱导用户点击对应的链接,使用用户的身份验证信息去访问对应的一些敏感站点的信息。这就是cors漏洞。
一般情况:
- 比如前后端分离的情况,前后端域名不同,但是前端会需要用到后端的接口,发送ajax请求
- 电商网站加载第三方快递网站的物流信息
同源策略
同源策略 (Same Origin Policy)
- 协议
- 域名
- 端口
同时满足这三种条件就是同源,当存在两个站点,其中有一项不满足相同条件的时候,我们即可说这两个站点不是同源站点,而当其中一个站点想请求另外一个站点的资源的时候我们边称它为跨域请求
,而由于安全考虑,跨域请求
会受到同源策略的限制
不受影响的标签
在HTML中<a>, <form>, <img>, <script>, <iframe>, <link> 等标签以及 Ajax 都可以指向一个资源地址 在这些标签中有以下的标签不受同源策略的限制
- script
- img
- iframe
- link
- css
在同源策略(Same-Origin Policy)中,不同源(即不同协议、主机或端口)之间的资源访问受到限制,以增强安全性。不过,某些标签和资源类型有特定的规则:
-
<script>
:不受同源策略限制,可以从不同源加载 JavaScript 文件。这使得从外部源加载脚本成为可能,但仍需注意跨站点脚本攻击(XSS)的风险。 -
<img>
:不受同源策略限制,可以从不同源加载图片。这使得网页能够显示来自不同源的图像,但不会影响其他资源或进行脚本操作。 -
<iframe>
:同样不受同源策略限制,可以嵌入不同源的网页。这允许在一个网页中显示来自不同站点的内容,但需要小心防止点击劫持等安全问题。 -
<link>
和 CSS:在加载外部样式表时不受同源策略限制。网页可以链接到来自不同源的 CSS 文件,以应用样式。
他们是加载外部的资源进行使用,不受到同源策略限制。但是可能就是要主要加载的xss漏洞,可能会有些许影响。因为我感觉你要是加载外部资源感觉也没有什么大的危害。但是话又说回来,如果说万一遇到了一种情况攻击者可以控制对应的这些标签加载的资源,那么就可能有危害了。但我感觉几乎不可能,难以利用。(个人见解)。
请求头判别
Access-Control-Allow-Origin | Access-Control-Allow-Credentials | 结果 |
---|---|---|
attack 站点 | true | 存在漏洞 |
* | true | 不存在漏洞 |
null | true | 存在漏洞 |
<safe_host> Null | true | 不存在漏洞 |
- 其中Access-Control-Allow-Origin表示允许跨域访问的host
- 如果想跨域传输cookies,需要Access-Control-Allow-Credentials设置为true,并且需要与XMLHttpRequest.withCredentials 或Fetch API中的Request() 构造器中的credentials 选项结合使用,例如使用
XMLHttpRequest
的时候需要将withCredentials
的值设置为true
一般都是输入一个origin 查看返回包这两个响应头的情况去判定有无这个漏洞。
csrf和cors
其实一开始我就觉得这两个挺类似的,都是需要验证用户的授权凭证。
但是同源策略挡不住csrf,因为csrf是提交表单的,不是需要返回敏感信息的。
但是csrf的一些防护策略,对于cors是适用的,因为对于csrf来讲,cookie的授权凭据才是最重要的,而并非是同源策略。因此针对于origin进行过滤,samesite,csrf token ,双重身份验证都是对于防护cors非常有用的。
这一点可以参考我的 csrf 防护[[csrf#防御策略]]
防护
[[csrf#防御策略]]
- Access-Control-Allow-Origin不应该设置为null,也不建议设置为*,做好设置成受信的站点
- Access-Control-Allow-Methods的值可以控制尽量少一些,只留需要用到的请求方法