多租户平台安全模糊化(Security through Ambiguity)策略示例(防止跨租户的资源枚举攻击(Resource Enumeration Attack))租户隔离、租户校验、跨租户攻击
工具调用租户不敏感的 internal 端点后必须校验响应的 tenant_id不匹配当 “not found”。这是什么意思文章目录多租户安全隔离原则关键概念1. 什么是租户不敏感的 internal 端点2. 必须校验响应的 tenant_id3. 不匹配当 not found为什么要这样做一句话总结多租户安全隔离原则这是一条多租户系统中的数据安全隔离规则常见于 SaaS 平台或 AI Agent 工具调用的安全规范中。下面逐句拆解关键概念1. 什么是租户不敏感的 internal 端点指的是那些本身不会按租户过滤数据的内部 API。比如GET /internal/orders/12345这个端点可能只根据order_id查数据不管你是哪个租户只要 ID 存在就返回结果。与之相对的是租户敏感端点会在 SQL 层面自动加上WHERE tenant_id ?的过滤。2. “必须校验响应的 tenant_id”既然端点本身不做租户隔离那调用方工具/Agent就必须自己来做这层校验responsecall_internal_endpoint(resource_id)# ⚠️ 关键步骤校验返回数据中的 tenant_idifresponse.tenant_id!current_user.tenant_id:# 不匹配 → 当作不存在raiseNotFoundError()3. “不匹配当 not found”如果tenant_id不匹配不能返回权限不足403 Forbidden而应该返回“未找到”404 Not Found。为什么要这样做做法风险返回 403 Forbidden攻击者能推断出这个资源存在只是不属于我 →信息泄露返回 404 Not Found攻击者无法区分资源不存在和资源存在但不属于我 →安全这是一种经典的安全模糊化Security through Ambiguity策略防止跨租户的资源枚举攻击Resource Enumeration Attack。一句话总结当你调用的内部接口不区分租户时你必须在拿到结果后自己检查数据属于哪个租户如果数据不是当前租户的就假装这个数据根本不存在从而防止跨租户的数据泄露和探测攻击。