如何正确配置CSP的font-src指令以允许从指定S3存储桶加载字体?
解决CSP中S3存储桶字体源的配置问题
我帮你排查了一下这个问题,根源在于CSP路径通配符*的行为和你预期的不一样——它只能匹配单个路径段,没法覆盖子目录里的文件。
你原来配置的https://s3.amazonaws.com/mybucket/*,只能匹配mybucket桶根目录下直接存放的字体文件(比如https://s3.amazonaws.com/mybucket/font.woff2),但对于mybucket/fonts/这类子目录里的文件(比如你请求的https://s3.amazonaws.com/mybucket/fonts/fa-brands-400.woff2),这个规则就不生效了,因为*没法跨层级匹配子路径。
正确的配置方案
把路径里的*去掉,直接写存储桶的基础路径即可:
Content-Security-Policy: font-src fonts.gstatic.com https://s3.amazonaws.com/mybucket/ https://*.mysite.com:*
为什么这样有效?
在CSP规则中,当你指定一个带末尾斜杠的路径(比如https://s3.amazonaws.com/mybucket/),它会作为前缀匹配生效——所有以这个路径开头的URL都会被允许,包括所有子目录和嵌套文件,完美覆盖你需要的字体加载场景。
如果你的字体只存放在fonts子目录里,也可以更精确地指定:
Content-Security-Policy: font-src fonts.gstatic.com https://s3.amazonaws.com/mybucket/fonts/ https://*.mysite.com:*
这样修改后,浏览器就不会再阻止加载S3存储桶里的字体文件了。
内容的提问来源于stack exchange,提问作者valijon
相关产品推荐
相关产品推荐

