推荐答案
// www.javascriptcn.com code example
const express = require('express');
const csrf = require('csurf');
const cookieParser = require('cookie-parser');
const app = express();
// 使用 cookie-parser 解析 cookie
app.use(cookieParser());
// 使用 csurf 中间件
const csrfProtection = csrf({ cookie: true });
app.use(csrfProtection);
// 路由示例
app.get('/form', (req, res) => {
// 将 CSRF token 传递给视图
res.render('form', { csrfToken: req.csrfToken() });
});
app.post('/process', (req, res) => {
// 处理表单提交
res.send('表单已提交');
});
app.listen(3000, () => {
console.log('服务器正在运行在 http://localhost:3000');
});本题详细解读
1. 什么是 CSRF 攻击?
CSRF(Cross-Site Request Forgery,跨站请求伪造)是一种常见的网络攻击方式。攻击者通过伪造用户的请求,诱使用户在不知情的情况下执行某些操作,例如修改账户信息、发起转账等。
2. 为什么需要 csurf 中间件?
csurf 是一个用于防止 CSRF 攻击的中间件。它通过生成和验证 CSRF token 来确保请求是由用户本人发起的,而不是由攻击者伪造的。
3. 如何使用 csurf 中间件?
安装依赖:首先需要安装
csurf和cookie-parser依赖。npm install csurf cookie-parser
配置中间件:在 Express 应用中,使用
cookie-parser解析 cookie,然后使用csurf中间件生成和验证 CSRF token。const csrfProtection = csrf({ cookie: true }); app.use(csrfProtection);传递 CSRF token:在表单页面中,将生成的 CSRF token 传递给视图,并在表单中嵌入该 token。
app.get('/form', (req, res) => { res.render('form', { csrfToken: req.csrfToken() }); });验证 CSRF token:在表单提交时,
csurf中间件会自动验证请求中的 CSRF token 是否有效。如果无效,请求将被拒绝。
4. 注意事项
- Cookie 配置:
csurf中间件依赖于 cookie 来存储 CSRF token,因此需要确保cookie-parser中间件已经正确配置。 - HTTPS:在生产环境中,建议使用 HTTPS 来保护 CSRF token 的传输安全。
- 表单提交:确保所有可能修改数据的请求(如 POST、PUT、DELETE)都包含 CSRF token。