用途
错误处理安全技能旨在防止应用程序通过错误信息向攻击者泄露内部细节。生产环境中的详细错误信息是攻击者进行信息收集的重要来源,可能暴露框架、数据库结构、文件路径和依赖版本。该技能帮助开发者建立安全的错误处理模式,在保证调试能力的同时避免信息泄露。
主要能力
该技能围绕一条核心规则展开:绝不向用户暴露内部错误细节,始终对外返回通用消息,同时在内部记录详细信息。
文档通过对比「错误示范」与「正确示范」说明泄露风险。错误示范中会返回类似 ER_NO_SUCH_TABLE 的数据库错误、完整堆栈跟踪信息以及实际执行的 SQL 查询语句,这些内容会暴露数据库类型(如 MySQL)、表名、文件结构、依赖关系和具体查询。正确做法则只返回通用错误消息、错误代码和 requestId,完整错误在服务端记录以便调试。
技能针对多个框架给出了具体实现模式:
- Cloudflare Workers:通过 AppError 接口区分对外安全消息与内部信息,使用 handleError 函数记录完整错误并返回安全响应,未知错误统一返回 500 状态。
- Express.js:定义 AppError 类封装状态码、错误代码和安全消息,使用全局错误处理中间件记录完整错误并返回安全响应,路由中通过 next(err) 转发错误。
- Next.js:在 API 路由中捕获错误,服务端记录完整错误,对外仅返回通用错误消息和错误代码。
- Laravel:在异常处理器中通过 $dontReport 排除部分异常,记录完整错误信息,对已知错误返回特定状态码,未知错误返回通用 500 响应,并强调生产环境需设置 APP_DEBUG=false。
- Python FastAPI:使用全局异常处理器记录完整错误,对外返回通用错误消息、错误代码和 request_id。
使用方式
文档提供了生产环境变量配置建议:设置 NODE_ENV=production、APP_DEBUG=false、LOG_LEVEL=error,并明确列出生产环境中不应出现的调试配置(如 DEBUG=*、APP_DEBUG=true、SHOW_ERRORS=true)。
同时提供了一份错误处理检查清单,包括:生产环境中 API 响应不含堆栈跟踪、错误消息中不含 SQL 查询、不含文件路径、不含依赖版本、生产环境关闭调试模式、未知错误使用通用消息、每个错误响应包含请求 ID、服务端完整记录错误并通过请求 ID 关联、验证错误返回字段级安全消息、404 错误不向未授权用户泄露资源是否存在。
适用场景
该技能适用于构建 Web 应用和 API 的开发者,尤其关注生产环境的安全加固。文档提到 PDPA 2024 相关背景:泄露数据库结构、用户数据或系统内部的详细错误信息构成信息泄露漏洞,可能帮助攻击者利用系统访问个人数据,从而使开发者因未能实施合理安全措施而承担责任。
限制
文档主要聚焦错误处理这一特定安全领域,未涉及其他安全主题的完整覆盖。各框架示例为代码片段形式,实际使用时需要根据项目结构调整。文档未提供关于性能影响、具体部署平台或收费相关的信息。