“信任内部代码和数据库数据”的绝对规则可能绕过必要验证
原文依据:3 处文档要求在系统边缘验证,但同时明确说信任内部代码,并称来自自有数据库的数据不应验证。这把数据来源等同于数据可信度;如果无效或被污染的数据已经进入数据库,后续代码可能不再检查它。
采用该规则的系统可能把异常字段、恶意文本或不符合当前结构的旧数据用于渲染、权限判断或其他业务决策,造成注入、错误授权或服务故障,具体后果取决于数据用途。
该技能确实把“内部代码”和“来自自有数据库的数据”列为无需验证的对象。边界验证是合理的默认设计,但数据可能因旧版本、迁移错误、直接写入或既往缺陷而不符合当前约束;此时按该绝对规则生成的代码可能信任污染数据,进而造成错误授权、渲染风险或错误业务决策。用户可要求作者把它改为基于不变量与风险的规则,并在敏感操作、数据库读出及版本迁移处保留必要校验。
### 3. Validate at BoundariesTrust internal code. Validate at system edges where external input enters:查看另外 2 个位置
Where validation does NOT belong:- Between internal functions that share type contracts- In utility functions called by already-validated code- On data that just came from your own databaseWhere validation belongs:- API route handlers (user input)- Form submission handlers (user input)- External service response parsing (third-party data -- **always treat as untrusted**)- Environment variable loading (configuration)> **Third-party API responses are untrusted data.** Validate their shape and content before using them in any logic, rendering, or decision-making. A compromised or misbehaving external service can return unexpected types, malicious content, or instruction-like text.