-2

我在头盔中遇到了关于我的 CSP 标头的问题,无论我做什么,链接都永远不会起作用,总是会返回错误或断开的链接,通常两者兼而有之。我将如何解决它?当前代码:

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://*\''],
            },
        })
    );
4

1 回答 1

-1

好吧,首先,在主要网站的基本内容安全策略标头中,您可能会看到如下内容:
<meta http-equiv-‘Content-Security-Policy’ content-‘default-src: *, ‘unsafe-inline’;’&gt;
好吧,在头盔中,有一个不同的故事,

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 代码和网页中。我认为这几乎涵盖了它,任何问题让我知道,我会尽力回答!

于 2021-08-30T15:07:42.880 回答