我想使用头盔包执行以下操作:
set X-Frame-Options = SAMEORIGIN
Disable the X-Powered-By header.
Content-Security-Policy 应该是什么以及如何使用头盔进行设置?访问控制允许来源怎么样?
我还想用它来启用最佳安全实践。你有什么建议?这些最佳实践是什么,我该如何设置它们?
头盔的维护者在这里。
首先,Helmet 不足以让您的 Express 应用程序安全。这需要了解最佳实践、漏洞等等。Helmet 只尝试解决这个难题的一小部分:设置与安全相关的各种 HTTP 响应标头。
例如,默认情况下,Helmet 会设置一个名为X-Frame-Options
. SAMEORIGIN
此标头不会神奇地使您的应用程序安全,但它可以帮助减轻点击劫持攻击。它还将禁用X-Powered-By
默认调用的标头,该标头
以下是使用 Helmet 及其所有默认设置的方法:
app.use(helmet());
例如,如果您想覆盖 的默认值X-Frame-Options
,您可以执行以下操作:
// Sets all of the defaults except for X-Frame-Options,
// which is set to "DENY" instead of its default
app.use(helmet({
frameguard: { action: 'DENY' },
}));
如果您希望 HelmetX-Frame-Options
完全忽略标题:
// Sets all of the defaults except for X-Frame-Options
app.use(helmet({
frameguard: false,
}));
默认情况下,Helmet 负责 11 个标头,包括上面提到的两个。
Helmet 最重要且最难配置的 header 是Content-Security-Policy
. 这里不值得深入描述;我推荐阅读MDN 的介绍性文章。
Helmet 可以帮助您设置Content-Security-Policy
标题,您可以在 Helmet 的文档中阅读更多信息。这是一个简单的例子:
app.use(
helmet.contentSecurityPolicy({
directives: {
...helmet.contentSecurityPolicy.getDefaultDirectives(),
"script-src": ["'self'", "example.com"],
},
})
);
你也问过Access-Control-Allow-Origin
。这是跨域资源共享的一部分,Helmet 没有涉及。
你可以这样写:
app.use(helmet({
frameguard: false // for SAMEORIGIN
}));
app.disable('x-powered-by'); // for disable the X-Powered-By header.