设置了CSP后图片无法加载,却显示’strict-dynamic’相关错误?
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Security-Policy" content="default-src 'none'; img-src 'self'; script-src 'strict-dynamic' 'nonce-abc123' ">
</head>
<body>
<img src="test.jpg" style="width:100px">
</body>
</html>
控制台提示”Refused to load the image because it violates the following Content Security Policy directive: “script-src ‘strict-dynamic’…”,但明明图片路径没问题啊?尝试过把nonce加到img标签和添加data:源都没用,这个strict-dynamic为什么会影响图片加载?

'strict-dynamic'是用在script-src里面配合 nonce 使用的,用来允许动态加载的脚本,但它本身不会影响图片加载。然而你设置的default-src 'none'意味着所有资源都默认被禁用,除非你显式允许。你只写了img-src 'self',但default-src会作为回退策略,如果资源类型没有在对应的指令中声明,就会看default-src。所以你漏掉了img类型的兜底策略。不过你已经写了
img-src 'self',图片仍然报错,说明浏览器控制台提示的信息有些误导。真正的问题是你在script-src里用了'strict-dynamic',但没有配合有效的 nonce 值或有效的内联脚本加载机制,导致浏览器无法正确解析脚本加载策略,进而影响了整个 CSP 的解析。这个问题可以优化成这样:
注意我把
script-src中的顺序调整了一下,把'nonce-abc123'放到'strict-dynamic'前面。因为'strict-dynamic'是告诉浏览器只信任通过合法脚本动态加载的资源,而排在它前面的nonce才是优先匹配的。否则'strict-dynamic'可能会导致无法正确识别你手动配置的策略。另外确认你的服务器没有在响应头里覆盖了这个 meta 标签里的 CSP。如果有的话,需要在响应头中保持一致。