Bun.CSRF 生成和验证 CSRF(跨站请求伪造)令牌。令牌使用 HMAC 签名并包含过期时间戳。
csrf.ts
始终向
generate() 和 verify() 传递一个 sessionId(请求者的会话标识符或用户 ID)。如果没有它,令牌仅绑定到密钥 — 服务器曾经颁发的任何令牌对每个用户都有效,因此攻击者可以在自己的会话中获取令牌,然后在受害者的浏览器中伪造跨站请求进行重放。Bun.CSRF.generate()
生成一个 CSRF 令牌。令牌包含一个加密随机数、一个时间戳和一个 HMAC 签名,编码为字符串。
generate.ts
secret(字符串,可选)— 用于签署令牌的密钥。如果未提供,Bun 会生成一个随机的内存默认密钥(每个线程唯一)。options(对象,可选):
返回:
string — 编码后的令牌。
generate-options.ts
Bun.CSRF.verify()
验证一个 CSRF 令牌。如果令牌有效且未过期,返回 true,否则返回 false。
verify.ts
token(字符串,必需)— 要验证的令牌。options(对象,可选):
返回:
boolean
verify-options.ts
与 Bun.serve() 配合使用
典型模式是:在渲染表单时生成一个令牌,将其嵌入隐藏字段,并在提交表单时验证它。将请求者的会话标识符作为 sessionId 传递给两个调用,以便令牌仅对为其颁发的用户有效。
server.ts
默认密钥
如果您在generate() 和 verify() 中都省略了 secret 参数,Bun 会使用每个线程生成一次的随机密钥。这对于单线程应用很方便,但令牌不会跨服务器、worker 或在重启后验证。
default-secret.ts
TypeScript
types.ts