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

Muh*_*min 6 ssl node.js express hsts sails.js

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

Cha*_*ott 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();
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

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

// 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!');
    }
};
Run Code Online (Sandbox Code Playgroud)

如果你试图让多个文件在'express.customMiddleware'命名空间中导出一个函数,我相信只加载最后一个文件的middleWare就可以了.我没有尝试过.