允许头盔 CSP 中的链接

Posted

技术标签:

【中文标题】允许头盔 CSP 中的链接【英文标题】:Allowing links in Helmets CSP 【发布时间】:2021-10-29 08:03:55 【问题描述】:

我遇到了关于头盔内 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://*\''],
            ,
        )
    );

【问题讨论】:

如果您要允许来自任何地方的所有内容,为什么还要使用 CSP? @乔 |因为无论我做什么,我都必须允许内容链接,所以我围绕 Firefox 进行开发,以确保一切正常,因为知道 Firefox 对允许的内容非常严格。 【参考方案1】:

首先,在主要网站的基本内容安全策略标头中,您可能会看到如下内容:<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://* 一样简单,至少在正常的元标记中,但这是头盔和快递,所以我们需要巧妙地处理它。使用我在问题部分中的代码,我们可以将其修复为实际上允许基本链接。

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”),这些图像会显示,但是我们需要添加更多内容,尤其是链接,因此我们开始使用“https://”、“http://”和“https://cdn.discordapp.com/”。对于两个 'http(s)://' 标头,这些是任何具有安全连接或不安全连接的链接,来自任何 常规 域,就我而言,没有来自子域的任何链接发现,所以为了特别允许不和谐,我们使用不和谐的图像链接系统,即cdn.discordapp.com,它允许图标和服务器图标显示到您的 EJS 代码和网页中。我想差不多就涵盖了,有什么问题请告诉我,我会尽力解答!

【讨论】:

以上是关于允许头盔 CSP 中的链接的主要内容,如果未能解决你的问题,请参考以下文章

[转帖]内容安全策略(CSP)详解

Augmented Reality增强现实中的光学透射式头盔显示器的标定初步

Augmented Reality增强现实中的光学透射式头盔显示器的标定初步

Augmented Reality增强现实中的光学透射式头盔显示器的标定初步

如何允许内联 JS 脚本使用 Nonce 进行 CSP

XSS终结者-CSP理论与实践