如何使用express / node.js配置CSP标头?

时间:2019-05-17 17:54:34

标签: javascript node.js express http-headers content-security-policy

我尝试使这些标签在express / node.js环境中工作,但是总会以某种方式使它们始终受到内容安全策略的阻止。

我已经尝试过使用多个节点模块,例如express-csp-header或csp-header,但是没有一个能够解决问题。所以我回到了“正常”声明。

这是我server.ts脚本的顶部:

app.use((req: any, res: any, next: any) => {
    res.set({
        "Access-Control-Allow-Origin": "*",
        "Access-Control-Allow-Headers": "Origin, X-Requested-With, Content-Type, Accept",
        "Access-Control-Allow-Methods": "GET, POST, PATCH, DELETE, OPTIONS",
        "Content-Security-Policy": "default-src *",
        "X-Content-Security-Policy": "default-src *",
        "X-WebKit-CSP": "default-src *"
    })
    next();
});

由webpack编译,节点运行在本地主机上,端口为3000。

它不适用于仅“ default-src *”或类似名称。我什至尝试自行声明每种内容类型,例如

"default-src * 'self' 'unsafe-inline' 'unsafe-eval'; script-src * 'self' 'unsafe-inline' 'unsafe-eval' localhost:*/*"

这是html页面的body标记之后的脚本部分: (将其放在开头部分也没有任何改变)

<script src="scripts/loginFunctions.js"></script>

也许重要的事情: HTML输出由squirrelly(用于快递的模板引擎)提供服务

app.get('/', (req: any, res: any) => {
    res.render('login');
})

在带有meta标签的头部声明标题也没有用。 我要引用的脚本的原始文件夹由express提供:

app.use(express.static('public'));

奇怪的是,这并不是在我的工作环境中发生的,在这里一切都按预期工作。 这是来自浏览器(Firefox 66.0.5)控制台的错误消息:

Loading failed for the <script> with source “http://localhost:3000/scripts/loginFunctions.js”.
Content Security Policy: The page's settings blocked the loading of a resource at http://localhost:3000/scripts/loginFunctions.js ("script-src").
Content Security Policy: The page's settings blocked the loading of a resource at inline ("script-src").

是的,我知道存在的风险,但是这将一直在本地运行,即使它将在一天之内部署……我只是希望在开发过程中一切都运行平稳(或完全运行)。 任何有关如何解决此问题的帮助将不胜感激:)

1 个答案:

答案 0 :(得分:0)

好的,我终于自己弄清楚了。这是我的特定问题的答案,以防万一有人遇到相同的问题:

在脚本中或HTML文件的<meta>标签中应用了阻塞头条目之后,插件NoScript似乎正在添加阻塞头条目。禁用它可以解决问题:)