一、白名单与验证
```ts
const allowSchemes = new Set(['myapp'])
const allowDomains = new Set(['example.com','app.example.com'])
function validScheme(s: string): boolean { return /^[a-z][a-z0-9+\-.]*$/.test(s) && allowSchemes.has(s) }
function validDomain(d: string): boolean { return allowDomains.has(d.toLowerCase()) }
```
二、状态参数与签名
```ts
import crypto from 'crypto'
function signState(state: string, secret: Buffer): string { return crypto.createHmac('sha256', secret).update(state).digest('hex') }
function verifyState(state: string, sig: string, secret: Buffer): boolean { return signState(state, secret) === sig }
```
三、回调URL过滤
```ts
function sanitizeCallback(u: string): { ok: boolean; url?: string } {
try {
const x = new URL(u)
if (!validDomain(x.hostname)) return { ok: false }
if (!/^\/callback\/[a-z0-9_\-]+$/.test(x.pathname)) return { ok: false }
const next = new URL(x.origin + x.pathname)
return { ok: true, url: next.toString() }
} catch { return { ok: false } }
}
```
四、服务端校验示例
```ts
type Req = { query: Record

发表评论 取消回复