Helmet.js自定义单个中间件时其余默认中间件是否自动启用?
回答
- 你当前给出的单独调用
helmet.contentSecurityPolicy()的代码,只会启用CSP这一个安全中间件,Helmet默认包含的其他安全中间件不会自动生效。 - 要不要额外添加
app.use(helmet()),取决于你要不要使用Helmet的其他默认安全能力,分两种场景处理:
场景1:需要启用所有Helmet默认安全中间件,仅修改CSP的配置
这种情况不需要分开写两次调用,直接把自定义的中间件配置传给顶层的helmet()方法即可,示例代码如下:
app.use( helmet({ // 在这里配置你要自定义的中间件参数,其他未单独配置的中间件会自动用默认配置启用 contentSecurityPolicy: { useDefaults: true, directives: { "script-src": ["'self'", "example.com"], "style-src": null, }, }, }) );
这种写法等价于先调用默认的helmet(),再用自定义配置覆盖对应中间件的规则,所有默认安全能力都会生效。
场景2:只需要启用CSP这一个安全中间件,不需要其他Helmet默认能力
这种情况你可以直接用你示例里的单独调用helmet.contentSecurityPolicy()的代码,不需要额外添加app.use(helmet())。
注意:你代码里的
useDefaults: true是CSP中间件的内部参数,仅控制该中间件是否使用CSP自身的默认指令规则,和Helmet的其他中间件是否启用没有关联。
内容的提问来源于stack exchange,提问作者golder3
相关产品推荐
相关产品推荐

