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