内容安全政策:"img-src'自我'数据:"

Raf*_*tro 27 html canvas content-security-policy ionic-framework

我有一个应用程序,用户可以复制图像URL,将其粘贴到输入,图像将被加载到一个盒子上.

但我的应用程序,继续触发此消息:

Refused to load the image 'LOREM_IPSUM_URL' because it violates 
the following Content Security Policy directive: "img-src 'self' data:".
Run Code Online (Sandbox Code Playgroud)

这是我的元标记:

    <meta http-equiv="Content-Security-Policy" content="default-src *; 
img-src 'self' data:; script-src 'self' 'unsafe-inline' 'unsafe-eval' *; 
style-src  'self' 'unsafe-inline' *">
Run Code Online (Sandbox Code Playgroud)

我在应用程序中使用html2Canvas,当我删除它时:"img-src'seld'数据:"

它触发了这个错误:

html2canvas.js:3025 Refused to load the image 'data:image/svg+xml,
<svg xmlns='http://www.w3.org/2000/svg'></svg>' because it violates
the following Content Security Policy directive: "default-src *". 
Note that 'img-src' was not explicitly set, so 'default-src' is used as a fallback.
Run Code Online (Sandbox Code Playgroud)

除了一堆其他错误......

man*_*nza 51

尝试替换此部分:

img-src * 'self' data: https:;
Run Code Online (Sandbox Code Playgroud)

所以完整的标签:

<meta http-equiv="Content-Security-Policy" content="default-src *;
   img-src * 'self' data: https:; script-src 'self' 'unsafe-inline' 'unsafe-eval' *;
   style-src  'self' 'unsafe-inline' *">
Run Code Online (Sandbox Code Playgroud)

内容安全策略参考

  • 但这不是打败它的目的img-src*'自我'数据:https:那是安全吗? (16认同)
  • “我在工作期间接待了一位客人,我想让他们进入我的房子,我该怎么做?” 这个答案相当于“把门从铰链上撕下来,让任何人进来”。*不要这样做。*这些键被称为“不安全-”是有原因的。 (6认同)
  • 您正在使允许所有的安全性失效,带有 * (5认同)
  • 我正在阅读参考资料,但不能使其正常工作!我真的非常感谢!:D (2认同)

Don*_*ini 15

img-src * 'self' data: https:;不是一个好的解决方案,因为它会使您的应用程序容易受到 XSS 攻击。这里最好的解决方案应该是:img-src 'self' data:image/svg+xml. 如果它不起作用,请尝试:img-src 'self' data:如果您的指令仍然存在,请考虑更改它img-src * 'self' data: https:;

  • 我想向任何阅读本文的人补充一点,在“data:”中的端口后面添加任何内容都是行不通的。即您无法设置`data:image/svg+xml`。它只允许设置“data:”。 (8认同)
  • @A。Berta - 禁用 CSP 并不能解决问题,因为它会禁用 CSP。问题不在于如何使错误消失。这是如何让 img 在启用 CSP 的情况下工作。干杯! (7认同)
  • @Gilles 是针对 Firefox (Gecko) 的,拥有 3% 的互联网用户。但我发现一个 SO 答案说 Chromium 做了同样的事情。但我没有在任何地方找到该记录。图像过去经常出现漏洞,但我已经很多年没有看到针对主要格式的漏洞了。我不知道AVIF是否会经历一些。 (2认同)

Cha*_*ani 6

对于头盔用户。更好的做法是不要将 contentSecurityPolicy 设置为 false,这应该是最后一个选项。我在我的应用程序中使用了这个,它很好地解决了这个问题。我的应用程序托管在这里在这里查看我的源代码。

app.use(
  helmet.contentSecurityPolicy({
    useDefaults: true,
    directives: {
      "img-src": ["'self'", "https: data:"]
    }
  })
)
Run Code Online (Sandbox Code Playgroud)