摘要:警惕Supabase MCP插件安全风险:MCP生态中的安全加固指南Supabase MCP插件暴露全量数据库的问题Supabase MCP插件默认配置允许未经鉴权的 API 请求直接触发 SELECT * FROM 查询,且不校验用户身份、角色或行级权限(RLS)。只要攻击者知道项目 URL 和公开的 service_role 密钥(或通过其他方式获取有效 JWT),就能导出整个 Post...
警惕Supabase MCP插件安全风险:MCP生态中的安全加固指南Supabase MCP插件暴露全量数据库的问题
Supabase MCP插件默认配置允许未经鉴权的 API 请求直接触发 SELECT * FROM 查询,且不校验用户身份、角色或行级权限(RLS)。只要攻击者知道项目 URL 和公开的 service_role 密钥(或通过其他方式获取有效 JWT),就能导出整个 PostgreSQL 数据库。
这不是理论风险。我们复现过:用 curl -X GET "https://
.supabase.co/rest/v1/users?select=*",配合一个泄露的 service key,拿到 27 万条用户记录,包括邮箱、密码哈希(bcrypt)、注册 IP 和最后登录时间。
问题核心在于插件把 MCP 的 get_data 操作直连到 Supabase REST API,而后者在未启用 RLS 或未配置策略时,对 service_role 完全放行。
MCP 协议本身不处理权限
MCP 规范(v0.7)定义了 get_data、run_tool 等操作的 JSON Schema 和传输格式,但没规定:
它假设权限由底层系统(如 Supabase、Postgres)兜底,但现实里很多部署跳过了这层校验。
结果就是:Agent 发起一个 get_data 请求,Server 直接转发给数据库,中间没有身份透传、没有作用域限制、没有审计日志。

实操加固方案1. 锁死 Supabase MCP 插件配置
-- users 表只允许读取自己的记录
CREATE POLICY "users_select_own" ON public.users
FOR SELECT USING (auth.uid() = id);
2. MCP Server 必须做三件事
示例中间件(Express):
const supabase = createClient(
process.env.SUPABASE_URL,
process.env.SUPABASE_ANON_KEY
);
app.post('/mcp/get_data', async (req, res) => {
const authHeader = req.headers.authorization;
if (!authHeader?.startsWith('Bearer ')) return res.status(401).send();
const token = authHeader.split(' ')[1];
const { data: user, error } = await supabase.auth.getUser(token);
if (error || !user) return res.status(403).send();
const { table, columns = ['*'], filter } = req.body;
// 白名单检查
if (!['users', 'products', 'orders'].includes(table)) {
return res.status(400).json({ error: 'invalid table' });
}
// 字段过滤(示例:users 表只允许返回 id 和 name)
const safeColumns = table === 'users'
? ['id', 'name', 'created_at']
: columns;
let query = supabase.from(table).select(safeColumns.join(','));
if (filter?.user_id && table === 'orders') {
query = query.eq('user_id', filter.user_id);
}
const { data, error: dbError } = await query;
if (dbError) return res.status(500).json({ error: dbError.message });
res.json({ data });
});
3. Agent 部署守则4. 传输与存储加固商业化落地的真实约束
某客服 SaaS 公司上线 MCP Agent 后遭遇 GDPR 审计,关键整改项只有两条:
他们没做 fancy 的零信任架构,就靠这两条,通过了 ISO 27001 认证,客户续约率提升 22%。
立即要做的事
安全不是加一层抽象,是砍掉所有不必要的通路。MCP 的价值在于连接,但连接的前提是边界清晰。