来管理容量安全策略(CSP).。 我的前端需要连接到具有dynamic IP地址(通过DHCP分配)托管在物理扫描仪上的API。扫描仪的IP地址存储在database
中,并由前端动态获取。电流设置: 带有头盔的后端CSP配置:
import helmet from 'helmet'
const defaultDirectives = helmet.contentSecurityPolicy.getDefaultDirectives()
app.use(
helmet({
contentSecurityPolicy: {
useDefaults: true,
reportOnly: false,
directives: {
...defaultDirectives,
'connect-src': ["'self'", '172.x.x.x'], // Static IP set here
'script-src': ["'self'", '*.openstreetmap.org'],
'img-src': ["'self'", 'data:', 'blob:', '*.openstreetmap.org'],
'style-src': ["'self'", "'unsafe-inline'", 'fonts.googleapis.com'],
'font-src': ["'self'", 'fonts.gstatic.com']
}
},
crossOriginEmbedderPolicy: false,
crossOriginOpenerPolicy: false,
crossOriginResourcePolicy: false,
})
)
172.x.x.x
)时,我会遇到以下错误:重新使用以连接到'http://192.x.x.x.x/api/connect',因为它违反了以下内容安全策略指令:“ connect-src'self'172.x.x.x.x”。iT似乎在
,我不确定如何根据扫描仪的更改IP动态设置IP地址。
从事,感觉就像后端的HELMETCSP配置可能是前端策略,导致了这一问题。 我尝试了什么 I试图在CSP中设置
192.x.x.x
指令以允许扫描仪的IP(connect-src
),但这并不解释扫描仪IP地址的动态性质。
I尝试使用前端中的CSP使用metatag
我的问题:
如何使用Nestjs中的头盔在CSP中动态更改的IP地址?172.x.x.x
connect-src
(例如,使用
connect-src
或
'*'
)是一种有效的方法,而不会损害过多安全性?'unsafe-inline'
指令的方式。
我将从编写一些存储动态IP地址的通用中间件开始。看起来像这样:
connect-src
app.use((req, res, next) => {
res.locals.scannerIpAddress = dynamicallyFetchIpAddress();
next();
});
您的第三个问题是关于完全禁用app.use(
helmet({
contentSecurityPolicy: {
// ...
directives: {
...defaultDirectives,
"connect-src": [
"'self'",
(req, res) => res.locals.scannerIpAddress,
],
// ...
},
},
// ...
}),
);