javascript - 如何使用 express/node.js 配置 CSP-headers?

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

我尝试让标签在 express/node.js 环境中工作,但不知何故它们总是被内容安全策略阻止。

我已经尝试过使用多个 Node 模块,例如 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 编译, Node 运行在本地主机上,端口为 3000。

它不适用于“default-src *”或类似的。我什至尝试单独声明每种内容类型,例如

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

这是html页面body标签后的脚本部分: (将它放在 head 部分也没有改变什么)

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

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

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

用元标记在 header 部分声明 header 也不起作用。 我要引用的脚本的原始文件夹由 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").

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

最佳答案

好吧,我终于自己弄明白了。这是我的具体问题的答案,以防万一有人遇到同样的问题:

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

关于javascript - 如何使用 express/node.js 配置 CSP-headers?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56191364/

相关文章:

javascript - 服务器没有收到 Angular http 请求

javascript - 如何通过 grunt 运行 node.js 应用程序?

javascript - 水平移动div?

javascript - 在自定义元素中使用 Polymer Shadow dom 时出现问题

javascript - 使用 jQuery 附加 EJS 部分

node.js - 返回时 typescript 不读取null

javascript - 如何使用cheerio从这个html中获取图像src、标题和描述?

javascript - 删除包含指定内容的元素

javascript - 使用 jquery 带水印的 ASP.NET 表单验证

node.js - 在node.js中,为什么我在尝试写入不存在的文件时没有收到错误