安全反序列化与JSON Schema校验最佳实践概述不安全的反序列化可能导致任意代码执行或逃逸。通过严格的Schema校验与类型白名单、禁用危险结构,可有效防护。安全解析function safeJsonParse(input: string): any | null {
try { return JSON.parse(input) } catch { return null }
}
JSON Schema校验(示例:简化实现)type Schema = { type: 'object'; properties: Record<string, { type: 'string' | 'number' | 'boolean' }>; required?: string[] }
function validate(schema: Schema, obj: any): boolean {
if (typeof obj !== 'object' || obj === null) return false
for (const [key, def] of Object.entries(schema.properties)) {
const v = (obj as any)[key]
if (schema.required?.includes(key) && v === undefined) return false
if (v !== undefined && typeof v !== def.type) return false
}
return true
}
类型白名单与拒绝危险结构function rejectDangerous(obj: any): boolean {
const s = JSON.stringify(obj)
return s.includes('__proto__') || s.includes('constructor') || s.includes('prototype')
}
组合校验流程function safeDeserialize(input: string, schema: Schema): any | null {
const o = safeJsonParse(input)
if (!o) return null
if (rejectDangerous(o)) return null
return validate(schema, o) ? o : null
}
运维要点严格的Schema校验与类型白名单,拒绝未定义字段禁止原型污染相关结构与危险属性在审计中记录拒绝的结构与来源,持续完善规则通过Schema校验与危险结构拒绝的组合,可在后端形成稳健的反序列化防线。

发表评论 取消回复