koa-csrf
Cross-Site Request Forgery 跨站请求伪造
koa-csrf
原理
它在session中保存一个secret
字段,然后使用它生成token,其中salt是随机生成的字符串,长度可自定。每次请求时都会重新生成salt,于是每次token也会不同。
1 2 3 4 5
| var hash = crypto .createHash('sha1') .update(salt + '-' + secret, 'ascii') .digest('base64'); token = salt + '-' + hash;
|
验证的时候,只需要取出token头部的salt,再从session中取出secret
,再生成expected,与token对比
默认不检查GET,HEAD,OPTIONS请求
使用
与session配合使用,在请求时附带字段_csrf:token
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| var koa = require('koa') var csrf = require('koa-csrf') var session = require('koa-session') var Router = require('koa-router'); var bodyParser = require('koa-bodyparser'); var app = koa(); var router = Router(); app.use(bodyParser()); app.keys = ['session secret'] session(app) app.use(csrf()); router.get('/', async ctx => { ctx.body = ctx.csrf; }) router.post('/', ctx => { ctx.body = ctx.request.body });
|