Expand description
CSRF 防护中间件。 CSRF 防护:对写请求校验 Origin(回退 Referer)必须等于本站。
SameSite=Lax 只在顶级 GET 导航时自动带 cookie,对跨站 POST 不带 cookie, 挡住了大部分经典 CSRF。但存在两个 Lax 覆盖不到的盲区:
- 登录 CSRF(攻击者诱导受害者登录攻击者账号,Lax 不阻止「设置」cookie);
- 未来若出现 GET 化写接口,Lax 会在顶级 GET 导航时带 cookie。
因此对所有写请求叠加 Origin 校验作为纵深防御。
仅在
feature = "server"时编译。
Functions§
- app_
base_ 🔒url_ is_ set APP_BASE_URL是否已设置为非空值。纯函数,便于测试。- csrf_
middleware - CSRF 校验中间件。
- extract_
origin 🔒 - 从请求头解析来源站点(Origin 优先,回退 Referer)。
- is_
write_ 🔒method - 判断请求是否需要 CSRF 校验:非简单方法(POST/PUT/PATCH/DELETE)需要。
- normalize_
origin 🔒 - 从
scheme://host[:port][/path][?query]提取标准化的scheme://host[:port], 端口为默认值(http=80, https=443)时省略。 - trusted_
origin 🔒 - 计算本站可信 origin:优先
APP_BASE_URL环境变量(生产域名), 否则用请求 Host 头 +X-Forwarded-Proto(反代后)或 https 推导。 - warn_
if_ app_ base_ url_ unset - 启动时检查
APP_BASE_URL是否已设置,未设置则打一条 WARN。