跨站请求伪造(CSRF或XSRF)是一种恶意利用的网站,未经授权的命令是传播从一个web应用程序的用户信任。
减轻这种攻击可以使用csurf
包。这里有篇文章浅谈cnode社区如何防止csrf攻击
安装 csurf
npm i --save csurf
csurf
要配合cookie-parser
使用
在入口文件新增
// main.ts
import * as csurf from 'csurf';
import * as cookieParser from 'cookie-parser'
...
app.use(cookieParser())
app.use(csurf({ cookie: true }));
app.use((err, req, res, next) => {
if (err.code !== 'EBADCSRFTOKEN') return next(err)
// handle CSRF token errors here
res.status(403)
res.json({
code : 403,
msg:'invalid csrf token'
})
})
然后可以用req.csrfToken()
获取token
后 在前端的请求头上带上'CSRF-Token': token
进行验证
对于cnode社区 csrf的一些思考
[浅谈cnode社区如何防止csrf攻击] (https://cnodejs.org/topic/5533dd6e9138f09b629674fd) 在练习nestjs的时候看到这个文章,对token放在参数上提交有疑问,因为别人可以通过获取token后在form表单提交接口,这样也可以通过验证。