Express 中如何防止跨站请求伪造 (CSRF)?

· 约 4 分钟读完 · 第 70 / 120 章

推荐答案

在 Express 中防止跨站请求伪造 (CSRF) 攻击的推荐方法是使用 csurf 中间件。以下是一个简单的实现示例:

在这个示例中,csurf 中间件会生成一个 CSRF 令牌,并将其存储在 cookie 中。在表单提交时,前端需要将这个令牌包含在请求中,csurf 中间件会验证这个令牌的有效性。

本题详细解读

什么是 CSRF?

跨站请求伪造 (CSRF) 是一种攻击方式,攻击者通过伪造用户的请求,利用用户的身份执行未经授权的操作。例如,攻击者可以诱使用户点击一个链接,这个链接会向用户的银行网站发送一个转账请求。

为什么需要防止 CSRF?

防止 CSRF 攻击是为了保护用户的敏感操作不被恶意利用。如果网站没有 CSRF 保护,攻击者可以轻松地伪造用户的请求,执行诸如转账、更改密码等操作。

如何使用 csurf 中间件防止 CSRF?

  1. 安装依赖:首先需要安装 csurf 和 cookie-parser 中间件。

  2. 配置中间件:在 Express 应用中配置 cookie-parser 和 csurf 中间件。

  3. 生成 CSRF 令牌:在需要保护的请求中生成 CSRF 令牌,并将其传递给前端。

  4. 验证 CSRF 令牌:在提交表单时,csurf 中间件会自动验证 CSRF 令牌的有效性。

前端如何处理 CSRF 令牌?

在前端,通常会将 CSRF 令牌包含在表单的隐藏字段中,或者在 AJAX 请求的头部中传递。

或者在 AJAX 请求中:

其他注意事项

  • Cookie 配置:确保 csurf 中间件的 cookie 选项设置为 true,以便将 CSRF 令牌存储在 cookie 中。
  • HTTPS:在生产环境中,确保使用 HTTPS 来传输 CSRF 令牌,以防止中间人攻击。
  • 令牌过期:CSRF 令牌通常会有一个有效期,确保在令牌过期时重新生成新的令牌。

通过以上步骤,你可以在 Express 应用中有效地防止 CSRF 攻击。