Skip to main content

Module csrf

Module csrf 

Source
Expand description

CSRF 防护中间件。 CSRF 防护:对写请求校验 Origin(回退 Referer)必须等于本站。

SameSite=Lax 只在顶级 GET 导航时自动带 cookie,对跨站 POST 不带 cookie, 挡住了大部分经典 CSRF。但存在两个 Lax 覆盖不到的盲区:

  1. 登录 CSRF(攻击者诱导受害者登录攻击者账号,Lax 不阻止「设置」cookie);
  2. 顶级 GET 导航时 Lax 会带 cookie,GET 下载类接口(数据导出)可被跨站触发。 因此对所有写请求叠加 Origin 校验作为纵深防御;GET 下载类接口另挂 crate::api::csrf::same_origin_read_middleware。 仅在 feature = "server" 时编译。

Enums§

TrustedSource 🔒
本站来源的判定依据。

Functions§

app_base_url_is_set 🔒
APP_BASE_URL 是否已设置为非空值。纯函数,便于测试。
csrf_middleware
CSRF 校验中间件。
extract_origin 🔒
从请求头解析来源站点(Origin 优先,回退 Referer)。
fetch_site_is_same_origin 🔒
从 Fetch Metadata 判断请求是否由本站页面发起。
forbidden 🔒
is_write_method 🔒
判断请求是否需要 CSRF 校验:非简单方法(POST/PUT/PATCH/DELETE)需要。
normalize_authority 🔒
从 host[:port][/path] 取出 host[:port],省略默认端口(80/443)。
normalize_origin 🔒
从 scheme://host[:port][/path][?query] 提取标准化的 scheme://host[:port], 端口为默认值(http=80, https=443)时省略。
origin_matches 🔒
判断写请求的来源是否可信。
same_origin_read_middleware
GET 下载类接口的同源校验中间件:拒绝跨站触发的顶级导航。
trusted_source 🔒
计算本站来源:优先「站点配置 → 安全」面板的 APP_BASE_URL(即时生效), 否则取请求 Host 头。
warn_if_app_base_url_unset
启动时检查 APP_BASE_URL 是否已设置,未设置则打一条 WARN。