Expand description
CSRF 防护中间件。 CSRF 防护:对写请求校验 Origin(回退 Referer)必须等于本站。
SameSite=Lax 只在顶级 GET 导航时自动带 cookie,对跨站 POST 不带 cookie, 挡住了大部分经典 CSRF。但存在两个 Lax 覆盖不到的盲区:
- 登录 CSRF(攻击者诱导受害者登录攻击者账号,Lax 不阻止「设置」cookie);
- 顶级 GET 导航时 Lax 会带 cookie,GET 下载类接口(数据导出)可被跨站触发。
因此对所有写请求叠加 Origin 校验作为纵深防御;GET 下载类接口另挂
crate::api::csrf::same_origin_read_middleware。 仅在feature = "server"时编译。
Enums§
- Trusted
Source 🔒 - 本站来源的判定依据。
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。