设置安全策略(如CSP)和http安全标头(如HSTS)时,最佳实践是什么?是否应该在我的 express.js 应用程序中配置它们?还是在nginx中配置它们是最佳实践?我找到了有关如何实施它们的文件,但我不确定应该在哪里实施它们。
两者都可以使用。您应该将它们放在最适合您的位置,这实际上取决于您的设置。
我假设您在一个或多个 NodeJs 应用程序服务器前面有一个 Nginx Web 服务器?
如果是这样,那么一些页面是从Nginx返回的(例如静态页面)和一些从Node返回的(例如动态的)?您是否有多个节点服务器?
这也取决于你用 Node 做什么。让Nginx返回HTML,CSS和Javascript,然后使用该Javascript对节点服务器进行AJAX调用以返回JSON数据是很常见的。由于 HTML 文档需要 CSP 而不是远程 JSON,因此在这种情况下从 Node 返回 CSP 标头是没有意义的。
像HSTS这样的一些标头是为整个域设置的,所以对我来说,将它们设置在Nginx层是有意义的,这样它们就会影响所有请求 - 由Nginx服务的静态页面和由一个或多个Node服务器提供的动态页面。这也意味着,如果您还设置了另一个节点服务器,则不必记住设置它们。
但是,如果为每个服务和/或请求返回不同的数据,则在 Node 中执行此操作可能是有意义的。例如,如果您的 Node 应用程序需要能够根据传入的请求以不同的方式设置不同的 CORS 标头,那么在 Nginx 中执行此操作并尝试根据请求 URL 和参数重复逻辑是没有意义的。
最终,您应该决定根据应用程序设置在最有意义的地方执行此操作,在最有可能正确设置的地方(因此在不应该设置为错误值时不会设置它,因此将来不会忘记设置它)以及管理它最有意义的地方(例如,有时更改应用程序代码比服务器配置更容易,反之亦然)。