nodejs 提高工程安全、效率相关的中间件

1,276 阅读3分钟

应用加固:helmet


Helmet是一系列帮助增强Node.JS之Express/Connect等Javascript Web应用安全的中间件。
一些著名的对Web攻击有XSS跨站脚本, 脚本注入 clickjacking 以及各种非安全的请求等对Node.js的Web应用构成各种威胁,使用Helmet能帮助你的应用避免这些攻击。

安装Helmet:

npm install helmet --save

在Express使用Helmet:

// Load required modules
var express = require('express');
var helmet = require('helmet');

// Create our Express application
var app = express();

// Implement CSP with Helmet
app.use(helmet.csp({
  defaultSrc: ["'self'"],
  scriptSrc: ['*.google-analytics.com'],
  styleSrc: ["'unsafe-inline'"],
  imgSrc: ['*.google-analytics.com'],
  connectSrc: ["'none'"],
  fontSrc: [],
  objectSrc: [],
  mediaSrc: [],
  frameSrc: []
}));

// Simple endpoint
app.get('/', function(req, res) {
  res.send('Time to secure your application...');
});

// Start the server
app.listen(3000);

通常用frameguard阻止clickjacking

app.use(helmet.frameguard('sameorigin'));

更多细节传送门

日志管理工具:log4js

node默认的日志输出中一旦应用中断或者停止则记录就会消失,尽管在生产环境中pm2也会为我们记录一定的logs,但是这些可能并不能够满足生产环境所需要的日志信息,因此如果能够将日常的日式保存到文件中是最为可靠的,log4js满足了我们日常的需要。

依赖log4js:

npm install log4js

在app.js中进行配置

var log4js = require('log4js');
log4js.configure({
  appenders: [
    { type: 'console' }, //控制台输出
    {
      type: 'file', //文件输出
      filename: 'logs/cheese.log', 
      category: 'normal' 
    }
  ],
  replaceConsole: true //代替console默认样式
});
var logger = log4js.getLogger('cheese');
logger.setLevel('INFO'); //设置级别

log4js有6个输出级别,分别是:

logger.trace(‘Entering cheese testing’);
logger.debug(‘Got cheese.’);
logger.info(‘Cheese is Gouda.’);
logger.warn(‘Cheese is quite smelly.’);
logger.error(‘Cheese is too ripe!’);
logger.fatal(‘Cheese was breeding ground for listeria.’);

官方传送门

csurf:防止csurf攻击

 CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF。
 你这可以这么理解CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账……造成的问题包括:个人隐私泄露以及财产安全。

安装csurf:

npm install csurf

app.js中集成

var cookieParser = require('cookie-parser')
var csrf = require('csurf')
var bodyParser = require('body-parser')
var express = require('express')

var csrfProtection = csrf({ cookie: true })
var parseForm = bodyParser.urlencoded({ extended: false })

var app = express()


app.use(cookieParser())

app.get('/form', csrfProtection, function (req, res) {
  // pass the csrfToken to the view
  res.render('send', { csrfToken: req.csrfToken() })
})

app.post('/process', parseForm, csrfProtection, function (req, res) {
  res.send('data is being processed')
})

项目传送门

lodash:js工具库

官方的介绍是:A modern JavaScript utility library delivering modularity, performance & extras.

理解下来就是为js提供了一个现代化的、模块化的高效的额外性能提升。

其实就是解决了一些数据的转换、查找、匹配等问题,大大的提高了咱们的日常开发效率,一些程序化的流程我们就可以用这个模块来进行替代

相关的API有很多,传送门:lodash官方网站

compression:大大提高网站效率

这个库不用我说了,必用,大大的压缩了程序体积,加速了网页的加载

安装:

npm install compression

app.js依赖:

var compression = require('compression');  
app.use(compression());  

nodejs的社区很庞大,相关的类库也有很多,但是其中的优劣也是参差不齐,一定要慎用自己不是很了解类库。