本文目录一览:
nodejs安全吗
安全是不容忽视的,每个开发者都知道它非常重要,真正严肃对待它的却没有几人。我们 RisingStack 希望你能认真对待这一问题——这就是我们整理这份清单来帮助你的原因,你的应用在被成千上万用户使用前必须要做安全检查。
这份清单大部分内容是通用的,不仅适用于Node.js,同样适用于其他语言和框架,只是一些明确给出了在Node.js中使用的方法。同时推荐你去阅读我们的引导文章 Node.js security,如果你刚开始使用Node.js,推荐你看这篇文章 first chapter of Node Hero。
配置管理
HTTP 安全头部
有些关于安全的HTTP头部是你的网站必须要有的:
Strict-Transport-Security 强制将HTTP请求替换为HTTPS请求
X-Frame-Options 防止点击劫持
X-XSS-Protection 开启跨站脚本攻击(XSS)的过滤,大多数现代浏览器支持这个设置
X-Content-Type-Options 禁用浏览器对响应内容MIME类型的嗅探,严格使用响应的Content-Type的值
Content-Security-Policy 能有效防止多种攻击,包括跨站脚本和跨站注入
Node.js开发者可以使用Helmet模块置这些头部,代码如下:
var express = require('express');
var helmet = require('helmet');
var app = express();
app.use(helmet());
Koa和ThinkJS框架中可以使用koa-helmet来设置这些头部,当然有关安全的头部不止这些,更多请看Helmet和MDN HTTP Headers。
在大多数架构里这些头部可以设置在web服务器的配置中(Apache、Nginx),不需要对应用代码进行改动。在Nginx中的配置:
# nginx.conf
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
add_header Content-Security-Policy "default-src 'self'";
有一个完整的Nginx配置文件,帅气的传送门在此。
如果你想快速检查你的网站是否有了所有的必须头部,请使用这个在线检查器。
客户端的敏感数据
当发布前端应用时,确保你的代码里永远不会包含API密码和证书,因为它可以被任何人看到。
没有自动化的方法去检查你在代码里写了敏感数据,但是有两个可以降低向客户端暴露敏感数据风险的方法:
使用 pull requests 提交代码
定期 code review
koa怎么配置webpack热替换
实现修改代码自动刷新浏览器,需要添加相关插件,webpack提供了2种热更新的办法 1、webpack-hot-middleware(版本2.0以上),配置方法在插件的readme.md有写。 2、webpack-dev-server和webpack-hot-middleware,配置方法在插件的readme.md有写。
如何在express通过中间件将socket.io注册到express中
如何在express的中间件中使用request请求接口数据或进行数据库查询
中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源。中间件位于客户机/服务器的操作系统之上,管理计算机资源和网络通讯。中间件特点:满足大量应用的需要;运行于多种硬件和OS平台;支持分布式计算,提供跨网络、硬件和OS平台的透明性的应用或服务的交互功能;支持标准的协议;支持标准的接口。中间件分类:分为数据访问中间件、远程过程调用中间件、消息中间件、交易中间件、对象中间件等。中间件应该具备两个关键特征:首先要为上层的应用层服务,这是一个基本条件;此外,又必须连接到操作系统的层面,并却保持运行工作状态,具备了这样两个特征才能称为中间件。现在很多人把开发工具也称为中间件是不合适的,因为开发工具开发出来的软件,并不依赖开发工具与底层操作系统连接。windows中没有听说有中间件组件或是什么.
有人用 koa2 框架吗
koa2 完全抛弃了generator和co的做法,而是使用async/await来做异步开发。
## 不同
koa和express在表现上的一点不同是采用ctx一个参数来调用中间件,而不是express的req, res。
其实在使用上还是个人认为是更方便了的。
2. 然后是在中间件连接的方式上有所不同。
express的设计是串联的,设计思路超级简洁。
koa的某一个中间件可以自行选择之后中间件的执行位置的。
## 举例
比如一个服务器处理时间/日志的中间件的开发:
express:request
进来,记录时间到request._startTime上。绑定一个函数到response的'end','finish'以及
response.socket的'error','close'事件上。那个函数会用当前时间和startTime做差,算出运行时间。
koa2:
```js
const xTime = async (ctx,next)={
let start = new Date
await next()
ctx.set('X-Response-Time', (new Date) - start) + 'ms')
}
```
这是在功能开发上,在错误处理上的友好度就更高了。
没有特意抹黑express的中间件开发,那个express版的计时器是express自带的服务器日志中间件morgan的实现。
## 社区
express的社区还是大。
koa本来就小,还被从koa1转koa2一折腾,就更小了。
而现在koa2还在alpha版,koa及其插件的开发速度比较没有保证。
你找到一个中间件,如果是express的,得转过来。如果是koa的,一般也得再转一次。
比如我使用的passportjs,github有koa版koa-passport,就分koa1版本和koa2版本的,选择时得注意一下。
## 个人评价
koa2好用,设计上的确有优势。优势不在能实现更强的功能,而是可以更简单地完成功能。
koa2社区远不如express,原因之一是~~因为koa2的正式版离发行估计还得3~6个月。~~koa的正式版是koa1。
koa1在思想上与koa2是一致的,但是koa2的实现更漂亮。
有koa1到koa2的中间件封装函数`koa-convert`。
而一般通用的中间件都有koa版,或者能够轻松的转为koa版。