内容安全策略 (CSP):如何在对象中允许 svg 图像

Rre*_*Cat 10 javascript configuration svg data-uri content-security-policy

我正在使用 js 插件,它在自身内部添加 SVG 图像。我已将 CSP 策略添加到我的网站,但我无法将其配置为允许插件代码。

它的代码如下:

label=$("<object style='height:10px; width:10px;' type='image/svg+xml' data='data:image/svg+xml;charset=UTF-8," +
"<svg xmlns=\"http://www.w3.org/2000/svg\">" +
"<rect x=\"0\" y=\"0\" some parameters/>"+
"<text>SomeText</text></svg>'></object>");
el.html(label)
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种允许在对象中呈现 SVG 图像的配置。我从那里尝试了不同的选项 - CSP: object-src

但我总是收到如下错误:

Refused to load plugin data from 'data:image/svg+xml;charset=UTF-8, my svg here' because it violates the following Content Security Policy directive: "object-src 'unsafe-eval'".
Run Code Online (Sandbox Code Playgroud)

在这种情况下如何正确配置 CSP?

sto*_*ate 16

我最近遇到了同样的问题,并通过添加以下内容来解决它:

Content-Security-Policy: img-src data: w3.org/svg/2000
Run Code Online (Sandbox Code Playgroud)

  • 您确定这不允许所有“数据:”? (4认同)
  • 这允许从 w3.org/svg/2000 加载图像并通过[数据 URL 方案](https://en.wikipedia.org/wiki/Data_URI_scheme) 加载资源。 (3认同)
  • 同意@stoicalpirate,删除`w3.org/svg/200`。您只需要 CSP 中的“data:”即可使其工作。 (2认同)

sid*_*ker 10

该 SVG 图像由data:URL提供,因此必须更新您的 CSP 策略以允许这样做。

您没有显示您当前的政策是什么或您在哪里设置它,但假设您使用Content-Security-Policy标头设置它并且它当前有object-src 'unsafe-eval',那么您可以data:通过更新政策的那部分来允许URL 看起来像这样:

Content-Security-Policy: object-src data: 'unsafe-eval'
Run Code Online (Sandbox Code Playgroud)

这仅显示Content-Security-Policy标题中当前策略的相关部分。无论您当前在该标头值中有什么其他指令,您都希望保持原样。

  • 应该注意的是,这会使用 object-src 数据为页面上的任何项目打开页面以获取攻击向量。如果您的目标是安全性,那么最好使用尝试执行的脚本的 sha 哈希,而不是打开这个漏洞。 (4认同)
  • @Chris 进行 SHA 哈希并包含在 CSS 中的机制是什么?如果原来是`background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2220%22%20height%3D%2220%22%20viewBox%3D%220 %200%2020%2020%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22无%22%20笔画%3D%22%23e5e5e5%22%20笔画宽度%3D%222%22%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%227%22%20%2F %3E%0A%3C%2Fsvg%3E%0A");`,我应该在那里添加文本的 SHA 吗? (4认同)