保留并传播数据库原始错误详情可能泄露敏感数据
原文依据:3 处指南要求保留原始数据库错误代码和消息,示例还复制 detail、column 和 hint。某些数据库错误的 detail 可能包含表结构、约束名称或发生冲突的实际字段值。
如果应用把 P2039、适配器异常或生产日志暴露给不可信客户端或第三方日志服务,用户数据和数据库内部结构可能随错误信息泄露。
该指南明确要求适配器保留数据库的原始错误消息,并在未识别的 PostgreSQL 错误中复制 detail、column 和 hint。若应用把这些错误返回给不受信任的客户端、写入可被低权限人员读取的日志,或让 P2039 直接显示这些字段,数据库结构、约束名称及可能出现在 detail 中的数据值可能泄露。此要求有诊断用途,并不证明已经泄露;用户可要求作者说明哪些字段会对外暴露,并在 API/日志边界进行脱敏和访问控制,同时在内部保留排障信息。
For database errors, preserve `originalCode` and `originalMessage` even when falling back to the provider-specific raw variant:查看另外 2 个位置
} return { kind: 'postgres', code: String(error.code ?? 'N/A'), severity: error.severity ?? 'N/A', message: error.message, detail: error.detail, column: error.column, hint: error.hint, }Prisma uses preserved original details when an unmapped driver error becomes `P2039`. Do not replace every unknown exception with a fabricated `GenericJs` id; rethrow genuinely unexpected non-driver errors so programming bugs remain visible.