推荐答案
// 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 中间件
app.use(csrf({ cookie: true }));
// 路由示例
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');
});本题详细解读
什么是 CSRF 攻击?
CSRF(Cross-Site Request Forgery,跨站请求伪造)是一种常见的网络攻击方式。攻击者通过伪造用户的请求,诱使用户在不知情的情况下执行某些操作,例如修改账户信息、发起转账等。
为什么需要防止 CSRF 攻击?
防止 CSRF 攻击是为了保护用户的敏感操作不被恶意利用。通过使用 CSRF token,可以确保请求是由用户本人发起的,而不是由攻击者伪造的。
csurf 中间件的作用
csurf 是一个用于 Express 的中间件,用于防止 CSRF 攻击。它通过生成和验证 CSRF token 来确保请求的安全性。
代码解析
引入依赖:
express:用于创建 Express 应用。csurf:用于防止 CSRF 攻击的中间件。cookie-parser:用于解析 cookie。
配置中间件:
app.use(cookieParser()):解析请求中的 cookie。app.use(csrf({ cookie: true })):启用csurf中间件,并将 CSRF token 存储在 cookie 中。
路由处理:
app.get('/form', ...):在 GET 请求中生成 CSRF token 并传递给视图。app.post('/process', ...):在 POST 请求中处理表单提交,csurf会自动验证 CSRF token。
启动服务器:
app.listen(3000, ...):启动服务器并监听 3000 端口。
注意事项
- 确保在所有需要保护的 POST、PUT、DELETE 等请求中使用
csurf中间件。 - 如果使用 AJAX 请求,需要将 CSRF token 包含在请求头中。
- 在生产环境中,建议使用 HTTPS 来进一步增强安全性。