好吧,首先,在主要网站的基本内容安全策略标头中,您可能会看到如下内容:
<meta http-equiv-‘Content-Security-Policy’ content-‘default-src: *, ‘unsafe-inline’;’>
好吧,在头盔中,有一个不同的故事,
app.use(
helmet.contentSecurityPolicy({
directives: {
...helmet.contentSecurityPolicy.getDefaultDirectives(),
'default-src': ['\'unsafe-inline\'', '\'self\''],
'script-src': ['\'self\'', '\'unsafe-inline\'', '\'unsafe-eval\'', '*'],
'img-src': ['\'self\''],
},
})
);
好吧,我为那些使用 Express 和 EJS 的人找到了一个修复程序,以创建一个允许 CSP 标头的链接,这也将包括 Discord 链接。——————————————————————————————————————————————— 在基本内容中上面提到的其他网站的安全策略标头,您基本上可以使用相同的方法来允许链接,它就像 一样简单https://*
,至少在正常的元标记中,但这是 Helmet 和 Express,所以我们需要对其进行微调。使用我在问题部分中的代码,我们可以对其进行修复以实际允许基本链接。
app.use(
helmet.contentSecurityPolicy({
directives: {
app.use(
helmet.contentSecurityPolicy({
useDefaults: false,
directives: {
'default-src': ['\'unsafe-inline\'', '\'self\'', 'https://*', 'http://*', '\'unsafe-eval\'', '*'],
'script-src': ['\'self\'', '\'unsafe-inline\'', '\'unsafe-eval\'', '*', 'http', 'https'],
'img-src': ['\'self\'', 'http://*', 'https://*', 'https://cdn.discordapp.com'],
},
})
);
所以,稍微解释一下。
———<br> 在 'img-src' 下,我们最初看到的是 'self',它允许在代码中使用图像(例如 src 为 '../../public/img/img.jpg'),这些图像会显示,但我们需要添加更多,尤其是链接,所以我们开始使用“https:// ”、“http:// ”和“https://cdn.discordapp.com/”。对于两个“http(s)://”标头,这些是来自任何常规域的任何具有安全连接或不安全连接的链接,据我所知,没有来自子域的任何链接,因此允许不和谐具体来说,我们使用 Discord 的图像链接系统,即cdn.discordapp.com
,它允许图标和服务器图标显示到您的 EJS 代码和网页中。我认为这几乎涵盖了它,任何问题让我知道,我会尽力回答!