应用加固: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的社区很庞大,相关的类库也有很多,但是其中的优劣也是参差不齐,一定要慎用自己不是很了解类库。