Bun.CSRF 提供了一个内置 API,用于生成和验证 CSRF(跨站请求伪造)令牌。令牌使用 HMAC 签名,并包含过期时间戳以限制令牌的有效期窗口。
Bun.CSRF.generate()
生成 CSRF 令牌。令牌包含加密随机数(nonce)、时间戳和 HMAC 签名,编码为字符串。
secret(string,可选)— 用于签署令牌的密钥。如果未提供,Bun 会生成一个随机的内存中默认密钥(每个线程唯一)。options(object,可选):
| 选项 | 类型 | 默认值 | 描述 |
|---|---|---|---|
expiresIn | number | 86400000 | 令牌过期的毫秒数。默认为 24 小时。 |
encoding | string | "base64url" | 令牌编码格式:"base64"、"base64url" 或 "hex"。 |
algorithm | string | "sha256" | HMAC 算法:"sha256"、"sha384"、"sha512"、"sha512-256"、"blake2b256" 或 "blake2b512"。 |
string — 编码后的令牌。
Bun.CSRF.verify()
验证 CSRF 令牌。如果令牌有效且未过期,返回 true,否则返回 false。
token(string,必需)— 要验证的令牌。options(object,可选):
| 选项 | 类型 | 默认值 | 描述 |
|---|---|---|---|
secret | string | (auto) | 用于签署令牌的密钥。如果未提供,则使用与 generate() 相同的内存中默认值。 |
maxAge | number | 86400000 | 令牌的最大存活时间(毫秒),独立于令牌自身的 expiresIn。 |
encoding | string | "base64url" | 必须与 generate() 期间使用的编码匹配。 |
algorithm | string | "sha256" | 必须与 generate() 期间使用的算法匹配。 |
boolean
在 Bun.serve() 中使用
典型模式是在渲染表单时生成令牌,将其嵌入隐藏字段中,并在提交表单时进行验证。
默认密钥
如果在generate() 和 verify() 中都省略 secret 参数,Bun 会使用每个线程生成一次的随机密钥。这对于单线程应用很方便,但在多台服务器、多个 Worker 之间或重启后无法工作。