使用sails.js修改响应头以实现HSTS

时间:2014-02-05 01:23:16

标签: node.js ssl express sails.js hsts

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

2 个答案:

答案 0 :(得分:5)

策略仅适用于您在config/policies.js中明确指定的控制器。

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

// 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'命名空间中导出一个函数,我相信只加载最后一个文件的middleWare才有效。我没试过。

答案 1 :(得分:0)

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

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