当前位置:首页 > 娱乐

跨域资源共享漏洞

浏览器地址栏里敲下一个网址,跨域页面加载,资源脚本运行,共享数据流动——这背后藏着一道看不见的漏洞门。跨域资源共享(CORS)就是跨域那道门上的锁,可惜很多开发者把这锁当成了装饰品。资源

2019年,共享某知名电商平台曝出过一个大漏洞。漏洞攻击者构造了一个恶意页面,跨域诱导用户点击后,资源脚本悄悄向该电商的共享API发起请求。正常情况下,漏洞浏览器会拦截这种跨域读取,跨域但那个API的资源响应头里写着Access-Control-Allow-Origin: *,还配上了Access-Control-Allow-Credentials: true。共享这一组合等于把门卸了,用户登录状态下的订单信息、收货地址、手机号全被脚本读走。你可能会问,浏览器不是有同源策略吗?对,但CORS配置错误可以让同源策略形同虚设。

问题出在哪?很多后端开发者图省事,直接在代码里写Access-Control-Allow-Origin: *,觉得“反正前端要调接口,跨域就跨吧”。他们忘了,这个星号意味着任何网站都能读你的接口响应。更隐蔽的是,有些人用了Origin反射——把请求头里的Origin值原样返回。这看起来聪明,实则漏洞更大。攻击者只需在自建域名下发请求,服务器照样放行。

我还见过一个真实案例,某企业内部工具把CORS配置成了null。对,你没看错,就是字符串"null"。攻击者用iframe的sandbox属性构造一个Origin: null的请求,服务器居然就认了。这种低级错误出现在2021年,那家公司的安全团队事后排查日志,发现数据被拖走了整整三个月才察觉。

CORS漏洞的可怕之处在于它不声不响。攻击不需要弹窗,不需要诱导输入密码,用户只是浏览了一个普通网页,后台数据就被悄悄读取。而且这类漏洞很难通过常规扫描发现,因为请求看起来完全合法——浏览器自己发出的预检请求,服务器正常响应,一切都在协议框架内进行。

怎么防?说实话,没有银弹。但至少别用通配符,别盲目反射Origin。把允许的域名写死成一个白名单,像https://www.example.com这种精确匹配。还有,敏感接口别开Access-Control-Allow-Credentials,开了就意味着携带Cookie,配合*就是灾难。如果你用的是Node.js的cors中间件,记得检查默认配置——它默认允许所有来源,很多人装上就忘了改。

最后提个醒:CORS是浏览器层面的机制,它防的是浏览器发起的跨域读取,拦不住curl、Postman这类非浏览器工具。所以别指望CORS能防CSRF,那是另一码事。真正要紧的是把CORS当成访问控制的一部分来设计,而不是图省事随便放行。你的数据值多少钱,你的CORS配置就该有多谨慎。

分享到: