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

· 约 4 分钟读完 · 第 121 / 128 章

推荐答案

在 FastAPI 中,可以通过以下步骤来防止跨站请求伪造 (CSRF) 攻击:

  1. 使用 CSRF Token:在表单或请求中包含一个 CSRF Token,并在服务器端验证该 Token 的有效性。
  2. 设置 SameSite Cookie:将 Cookie 的 SameSite 属性设置为 Strict 或 Lax,以防止跨站请求携带 Cookie。
  3. 验证请求来源:检查请求的 Referer 或 Origin 头部,确保请求来自受信任的源。

以下是一个简单的 FastAPI 实现示例:

本题详细解读

1. CSRF Token 的使用

CSRF Token 是一种常见的防御机制,通过在表单或请求中包含一个随机生成的 Token,并在服务器端验证该 Token 的有效性,来防止跨站请求伪造攻击。在 FastAPI 中,可以通过生成一个随机的 Token 并将其存储在服务器端(如内存或数据库)来实现这一点。

2. SameSite Cookie 的设置

SameSite 是 Cookie 的一个属性,用于控制 Cookie 是否在跨站请求中发送。将 SameSite 设置为 Strict 或 Lax 可以有效防止跨站请求伪造攻击。Strict 模式会完全禁止跨站请求携带 Cookie,而 Lax 模式则允许某些安全的跨站请求(如导航)携带 Cookie。

3. 请求来源的验证

通过检查请求的 Referer 或 Origin 头部,可以确保请求来自受信任的源。如果请求的 Referer 或 Origin 头部与预期的源不匹配,则可以拒绝该请求。

4. 示例代码解析

在示例代码中,我们首先生成一个随机的 CSRF Token 并将其存储在服务器端的内存中。然后在表单中嵌入该 Token,并在提交表单时验证该 Token 的有效性。如果 Token 无效,则返回 403 错误。

通过以上步骤,可以有效地防止跨站请求伪造攻击,保护 FastAPI 应用的安全性。