允许头盔 CSP 中的链接

Allowing links in Helmets CSP

我的头盔内的 CSP 接头有问题,其中 links,无论我做什么,都不会工作,总是 return 错误或损坏 link,通常两者都有。我将如何解决它?当前代码:

app.use(
        helmet.contentSecurityPolicy({
            directives: {
                ...helmet.contentSecurityPolicy.getDefaultDirectives(),
                'default-src': ['\'unsafe-inline\'', '\'self\'', '\'https://*\'', '\'http://*\''],
                'script-src': ['\'self\'', '\'unsafe-inline\'', '\'unsafe-eval\'', '*'],
                'img-src': ['\'self\'', '\'https://*\'', '\'http://*\''],
            },
        })
    );

首先,在主要网站的基本内容安全策略 header 中,您可能会看到如下内容:
<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 的人找到了一个修复程序来创建一个 link 允许 CSP header,这也将包括 Discord link。 ———————————————————————————————————————————— 在上述其他网站的基本内容安全策略header中,您基本上可以使用相同的方法,允许links,它就像https://*一样简单,至少在正常的元标记,但这是 Helmet 和 Express,所以我们需要对其进行精细处理。使用问题部分中的代码,我们可以将其修复到 actually 允许基本的 links.

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'],
            },
        })
    );

所以,稍微解释一下。
————
在'img-src'下我们最初看到'self',它允许代码中的图像(例如src是'../../public/img/img.jpg'),这些图像将显示,但我们需要添加更多内容,尤其是 links,因此我们开始使用“https://”、“http://”和“https:/ /cdn.discordapp.com/'。对于两个“http(s)://”headers,它们是来自任何 regular[=29= 的具有安全连接或不安全连接的任何 links ] 域,据我所知,子域中没有任何内容,因此为了明确允许不一致,我们使用 Discord 的图像 linking 系统,即 cdn.discordapp.com,它允许图标和服务器图标显示到您的 EJS 代码和网页中。我觉得差不多就说完了,有什么问题可以私信我,我会尽力解答的!