6

我正在使用sails.js实现一个nodejs 应用程序。我希望我的用户仅通过 https 进行通信。因此,为此我需要以我的方式配置我的服务器,以便在每个响应中添加一个标题“Strict-Transport-Security”、“max-age=31536000”来告诉浏览器仅与 HSTS 通信。现在我如何修改我将从sails js发送的每个响应头。我搜索了文档但没有找到任何帮助。

4

2 回答 2

6

策略仅适用于您在 中明确分配给它们的控制器config/policies.js

尝试直接在 , 中添加快速中间件,而不是使用策略config/express.js(如果该文件尚不存在,则创建该文件)。此中间件适用于所有控制器。格式是这样的:

// config/express.js
"use strict";
exports.express = {
    customMiddleware: function (app) {
        app.use(function hsts(req, res, next) {
            res.setHeader("Strict-Transport-Security", "max-age=31536000");
            next();
        });
    }
}

如果您有多个要使用的快速自定义中间件,我的建议是将每个中间件函数保存在自己的文件中。我将提供一个示例,使用您的中间件以及接受某些选项的附加中间件。

// config/express.js
"use strict";
var hsts = require('../lib/middleware/hsts');
var staticguard = require('../lib/middleware/staticguard');
exports.express = {
    customMiddleware: function (app) {
        // ordering of middleware matters!
        app.use(hsts);
        app.use(staticguard(/^\/protected\/.*$/));
    }
}

// lib/middleware/hsts.js
"use strict";
module.exports = function hsts(req, res, next) {
    res.setHeader("Strict-Transport-Security", "max-age=31536000");
    next();
}

// lib/middleware/staticguard.js
"use strict";
module.exports = function (regex) {
    return function (req, res, next) {
        if (!regex.test(req.url)) {
            return next();
        }
        res.end('you are not allowed!');
    }
};

如果您尝试让多个文件在“express.customMiddleware”命名空间上导出一个函数,我相信只有最后一个加载文件的中间件才能工作。我还没有尝试过。

于 2014-02-05T14:39:42.477 回答
0

您应该能够使用Sails 策略。有了这个,您应该能够创建一个策略来更改被发回的标头。

// policies/hsts.js
module.exports = function hsts(req, res, next) {
  res.setHeader("Strict-Transport-Security", "max-age=31536000");
};
于 2014-02-05T02:32:33.610 回答