MCP资源通常用于向AI提供文档、文章、数据库记录或项目资料。很多人会认为资源只读就没有风险,但只读接口同样可能泄露客户信息、内部配置和跨租户数据。

只读权限也要分范围
权限至少要同时考虑用户身份、资源类型和数据范围。一个用户可以读取公开文章,不代表他能读取所有草稿;一个项目成员可以查看本项目资料,也不代表可以读取其他租户的数据。
先识别资源中的敏感字段
文章正文、手机号、邮箱、订单号、内部URL和密钥都可能需要不同处理。不要等模型拿到数据后再要求它“不要泄露”,服务端应在返回资源前完成字段过滤和脱敏。
- 公开字段可以直接返回;
- 内部字段按角色决定是否返回;
- 个人信息优先脱敏;
- 密钥和签名永远不应作为资源返回。
租户边界必须由服务端决定
客户端传入的tenant_id只能作为查询条件,不能作为授权依据。服务端应从已验证的身份凭证中确定用户所属租户,再把租户范围强制加入查询条件。
资源名称不要暴露内部路径
资源URI可以使用稳定的业务标识,不要直接暴露服务器目录、数据库表名或对象存储内部路径。错误信息也不应返回完整文件路径和SQL片段。
分页和数量上限同样重要
即使用户有权限,资源接口也不应一次返回无限数据。设置分页、单页数量和总读取量上限,可以避免误调用造成大规模数据暴露和Token浪费。
审计日志要能还原访问过程
日志需要记录谁在什么时间访问了哪个资源、返回了多少条数据、是否触发脱敏以及最终状态。不要保存完整敏感内容,可以记录资源ID、字段摘要和内容哈希。
测试越权和边界情况
- 用用户A读取用户B的资源;
- 传入不存在或过期的租户ID;
- 尝试访问未公开的资源URI;
- 请求超大分页和异常字段;
- 检查错误响应是否泄露内部信息。
总结
MCP资源安全的关键是“最小可见范围”。身份决定用户是谁,服务端决定他能看什么,脱敏决定返回哪些字段,日志负责让每次访问都可追溯。
评论 0