express框架开发的web项目,怎么防御csrf?
看到https://github.com/expressjs/…,但项目是前后端分离的,怎么在项目中加csrftoken
CSRF库官方文档的例子修修改改就行了。
CSRF防护流程
- 服务端:Express返回前端页面时,在页面上注入
CSRF token
。 - 浏览器端:页面请求服务端接口,带上服务端返回的
CSRF token
。
服务端代码
服务端代码:
var cookieParser = require('cookie-parser')
var csrf = require('csurf')
var bodyParser = require('body-parser')
var express = require('express')
// 模板
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
// CSRF中间件初始化
var csrfProtection = csrf({ cookie: true })
// create express app
var app = express()
// cookie解析
app.use(cookieParser())
// 解析参数
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
// CSRF防护
app.use(csrfProtection)
// 访问页面,生成CSRF token,并注入页面
app.get('/index', function (req, res, next) {
res.render('index', { csrfToken: req.csrfToken() })
})
// 请求接口,解析请求参数,获取CSRF token,进行校验(中间件完成的)
app.post('/api', function (req, res) {
res.send('你的处理结果')
})
模板代码
预留了CSRF token的
位置。
<html>
<head>
<title>CSRF防护</title>
</head>
<body>
<h1>CSRF防护</h1>
<p id="csrf-token"><%= csrfToken %></p>
</body>
</html>
客户端请求
发请求时,把csrfToken
加到请求参数里去就行。这里略过
就用这个库,在登录的api里把token加上
正文完