简单的 XML 文件在不存在的映像上触发 CSP 错误?



我有一个带有以下头盔-csp(处理内容安全策略以防止XSS和帧注入等漏洞的中间件)配置的Express服务器:

server.use(csp({
directives: {
defaultSrc: ["'self'"],
scriptSrc: ["'self'", '*.google-analytics.com'],
imgSrc: ["'self'", '*.google-analytics.com'],
connectSrc: ["'none'"],
styleSrc: ["'self'", "'unsafe-inline'", 'maxcdn.bootstrapcdn.com'], // Remove unsafe-inline for better security
fontSrc: ["'self'"],
objectSrc: ["'self'"],
mediaSrc: ["'self'"],
frameSrc: ["'self'"]
}
}));

我的根目录中还有一个浏览器配置.xml文件,其中包含以下内容:

<?xml version="1.0" encoding="utf-8"?>
<browserconfig>
<msapplication>
<tile>
<square70x70logo src="/mstile-70x70.png"/>
<square150x150logo src="/mstile-150x150.png"/>
<square310x310logo src="/mstile-310x310.png"/>
<wide310x150logo src="/mstile-310x150.png"/>
<TileColor>#da532c</TileColor>
</tile>
</msapplication>
</browserconfig>

如您所见,它是一个简单的XML文件,没有图像数据,更不用说SVG。然而,当我尝试点击 https://www.schandillia.com/browserconfig.xml 时,控制台中会抛出以下内容:

拒绝加载图像 'data:image/svg+xml,http://www.w3.org/2000/svg' fill='%23909090' width='10' height='10'>',因为它违反了 以下内容安全策略指令:"IMG-SRC '自我' *.google-analytics.com"。

请注意,XML 文件的内容也会显示在浏览器屏幕中。只是控制台错误让我感到困惑。我的服务器抱怨的图像文件在哪里?

PS:有没有办法在我的imgSrc指令中只允许这个特定的SVG(不管它是什么,假设它是安全的而不是恶意的,来自像 www.w3.org 一样合法的来源)?我尝试修改我的server.csp()但没有用:

server.use(csp({
directives: {
defaultSrc: ["'self'"],
scriptSrc: ["'self'", '*.google-analytics.com'],
imgSrc: ["'self'", 'data:', '*.google-analytics.com'],
connectSrc: ["'none'"],
styleSrc: ["'self'", "'unsafe-inline'", 'maxcdn.bootstrapcdn.com'], // Remove unsafe-inline for better security
fontSrc: ["'self'"],
objectSrc: ["'self'"],
mediaSrc: ["'self'"],
frameSrc: ["'self'"]
}
}));

这个神秘物体是什么,如何让它不再打扰浏览器?

这似乎是Chrome中的一个错误。您在 Chrome 中导航到(打开)的任何没有与之关联的样式表的 XML 文件都会发生这种情况。在这种情况下,Chrome(出于其内部目的)会从data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' fill='%23909090' width='10' height='10'><path d='M0 0 L8 0 L4 7 Z'/></svg>加载披露三角形图像 - 或尝试这样做。

如果您没有制定云解决方案提供商政策,Chrome 会正常加载该data:网址图片,而不会出错。但是,如果您确实有 CSP 策略并且它不允许data:源,则浏览器将阻止加载它。

有一种方法可以使 CSP 允许该映像,但这种方式并不比在策略中指定'unsafe-inline'更安全。方法是将data:作为img-src指令的来源。但这会产生允许来自任何data:URL的图像的效果。

另请注意:问题中引用的特定data:URL 并非来自 www.w3.org。任何地方的任何 SVG 图像都将具有该xmlns='http://www.w3.org/2000/svg'部分。这只是 SVG 命名空间标识符。 因此,它并不表示它是从 www.w3.org 提供的,也不意味着它一定是安全的。

最新更新