我尝试使用谷歌字体,我从来没有遇到过任何问题,但现在当我尝试添加CSS文件在我的头我得到这个错误的控制台:拒绝加载样式表'http://fonts.googleapis.com/css?family=Whatever',因为它违反了以下内容安全策略指令:"style-src 'self' 'unsafe-inline'".
'http://fonts.googleapis.com/css?family=Whatever'
"style-src 'self' 'unsafe-inline'"
i34xakig1#
这里有两件事需要解决:
https://fonts.googleapis.com/css?family=Whatever
style-src
https://fonts.googleapis.com
font-src
https://fonts.gstatic.com
"style-src 'self' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com"
yv5phkfx2#
如果您和我一样,因为每个答案都只是说您需要在style-src指令中授权一个URL,而没有说明如何执行,所以有点困惑,下面是完整的标记:
<meta http-equiv="Content-Security-Policy" content="style-src 'self' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com;">
bttbmeg03#
可以为Content-Security-Policy提供多个源。下面有明确的细节,这对我很有效。根据您的内容(css,img,字体,媒体)来源错误,您可以在下面更改URL。
Content-Security-Policy
<html> <head> <meta http-equiv="Content-Security-Policy" content=" default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' https://fonts.googleapis.com; font-src 'self' data: https://fonts.gstatic.com; img-src 'self' data: content:; media-src *; " /> <title>My page title</title> </head> <body> some text </body> </html>
希望能有所帮助。
mbskvtky4#
使用Helmet时,以下代码可以完美工作(用TypeScript编写):
import * as express from 'express'; import { Express } from 'express'; const helmet = require('helmet'); const expressApp: Express = express(); // Create Express instance. expressApp.use( helmet.contentSecurityPolicy({ directives: { fontSrc: [ "'self'", // Default policy for specifiying valid sources for fonts loaded using "@font-face": allow all content coming from origin (without subdomains). 'https://fonts.gstatic.com' // Google Fonts. ], styleSrc: [ "'self'", // Default policy for valid sources for stylesheets: allow all content coming from origin (without subdomains). 'https://fonts.googleapis.com' // Google Fonts. ], } }) );
wsewodh25#
上面的组合对我不起作用。我的代码是从.scss文件导入字体,如下所示:
.scss
@import url('https://fonts.googleapis.com/icon?family=Material+Icons');
我补充了以下内容:
default-src
'self'
wss:
'unsafe-inline'
script-src
data:
data:application/font-woff;charset=utf-8… (“font-src”)
在最后一件事下面。
default-src 'self' wss:; style-src 'self' https://fonts.googleapis.com 'unsafe-inline'; script-src 'self' https://fonts.googleapis.com 'unsafe-inline'; font-src 'self' data: https://fonts.gstatic.com
6pp0gazn6#
嗨,如果您要添加server.js,那么应该是这样的
let securityPolicy = `default-src 'self' 'unsafe-eval' 'unsafe-inline'; ` + `script-src 'self' 'unsafe-inline' 'unsafe-eval' ` + `img-src 'self' data: ` + `style-src 'self' 'unsafe-inline' 'unsafe-eval' ` + `font-src https://fonts.googleapis.com 'self' data: ` res.header('Content-Security-Policy', res.header('Content-Security-Policy', securityPolicy))
6条答案
按热度按时间i34xakig1#
这里有两件事需要解决:
https://fonts.googleapis.com/css?family=Whatever
)style-src
指令中的https://fonts.googleapis.com
和font-src
指令中的https://fonts.gstatic.com
:"style-src 'self' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com"
yv5phkfx2#
如果您和我一样,因为每个答案都只是说您需要在
style-src
指令中授权一个URL,而没有说明如何执行,所以有点困惑,下面是完整的标记:bttbmeg03#
可以为
Content-Security-Policy
提供多个源。下面有明确的细节,这对我很有效。
根据您的内容(css,img,字体,媒体)来源错误,您可以在下面更改URL。
希望能有所帮助。
mbskvtky4#
使用Helmet时,以下代码可以完美工作(用TypeScript编写):
wsewodh25#
上面的组合对我不起作用。我的代码是从
.scss
文件导入字体,如下所示:我补充了以下内容:
default-src
被设置为'self'
。这不是必需的,但是我希望锁定所有其他内容。此限制可能会在浏览器控制台中触发错误。根据需要进行调整。我必须添加wss:
scheme,以允许Angular调试器的Web Socket连接。style-src
需要'unsafe-inline'
* 关键字 *。我怀疑这是因为样式被压缩/最小化了。script-src
还需要'unsafe-inline'
* 关键字 *。虽然我检查了下载的样式表,没有看到任何明显的东西,但我认为那里一定有被认为是脚本的东西。font-src
需要data:
scheme。浏览器控制台在获取data:application/font-woff;charset=utf-8… (“font-src”)
时出错。这可能来自我的Angular代码中的其他位置,但可能对某些人有用。在最后一件事下面。
6pp0gazn6#
嗨,如果您要添加server.js,那么应该是这样的