node.js express 框架怎么防御csrf

阅读 7.9k
2 个回答

CSRF库官方文档的例子修修改改就行了。

CSRF防护流程

  1. 服务端:Express返回前端页面时,在页面上注入CSRF token
  2. 浏览器端:页面请求服务端接口,带上服务端返回的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加上

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题