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 会在顶级 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。