@
me1onsoda #174 @
brader #181
防止资源注入主要是 CSP (内容安全策略)吧。写插件或者 user script 的应该遇到过。简单说是网站可以声明自己页面内允许的外部资源域名,不在域名内的会上报或者拒绝加载。
至于跨域的安全体现在哪,这个还真没仔细考虑过。刚才找 GPT 问了一下,沿用 #181 的例子,前端
a.com ,后端
b.com ,恶意网站
xx.com 。拦截的是从外部前端发到自己后端的情况
异常情况:假如没有 CORS 策略,且
b.com 的 cookie 设置了 samesite: None 。那么在
xx.com 就可以构造一个 fetch('
https://b.com/someapi', {credentials: 'include'}),进而请求到
b.com 的数据。
而如果有 CORS 策略,在 options 预检请求时,
b.com 的后端检测到非同源可以返回拒绝;或者返回固定的同源策略,比如 Access-Control-Allow-Origin:
https://a.com ,浏览器也会拒绝
xx.com 的请求。
如果
a.com 请求
b.com 的话,因为
b.com 的 CORS 头说明了允许
a.com 、使用 XXX, YYY 方式请求,允许的 headers 是哪些……,如果
a.com 按照规则来,浏览器就不会拦截。
---
另一种情况,假如
a.com 被恶意注入了发往
xx.com 的资源。这个时候
a.com 请求
xx.com 是靠
xx.com 的 CORS 判定的,拦不住。用到的应该是 CSP 。例如 Content-Security-Policy: connect-src 'self'
https://b.com;