针对 Issue #2 的安全边界,为 db-init 增加一层可选的访问保护。db-init 当前以 execute=["any"] 部署,任何匿名调用方都能触发建库/重建,存在误操作或滥用风险。
db-init
execute=["any"]
在 harmony_cloud/functions/db-init/main.js 的处理入口增加 ADMIN_TOKEN 校验:
harmony_cloud/functions/db-init/main.js
ADMIN_TOKEN
x-admin-token
unauthorized
const adminToken = process.env.ADMIN_TOKEN || ''; if (adminToken) { const provided = req.headers['x-admin-token'] || ''; if (provided !== adminToken) { return res.json(fail('unauthorized: missing or invalid x-admin-token')); } } else { log('WARN: ADMIN_TOKEN not set; db-init is publicly callable...'); }
在 Appwrite 控制台为 db-init 函数设置环境变量 ADMIN_TOKEN=<随机强口令>,之后调用需附带:
ADMIN_TOKEN=<随机强口令>
curl -X POST http://<host>/v1/functions/db-init/executions -H "X-Appwrite-Project: <project_id>" -H "x-admin-token: <ADMIN_TOKEN>" -H "Content-Type: application/json" -d '{"body":"{}","async":false}'
Refs #2
变更说明
针对 Issue #2 的安全边界,为
db-init增加一层可选的访问保护。db-init当前以execute=["any"]部署,任何匿名调用方都能触发建库/重建,存在误操作或滥用风险。变更内容
在
harmony_cloud/functions/db-init/main.js的处理入口增加 ADMIN_TOKEN 校验:ADMIN_TOKEN:调用方必须携带匹配的x-admin-token请求头,否则返回unauthorized;ADMIN_TOKEN:行为与现在完全一致(向后兼容),仅在函数日志中输出告警,提示该函数仍可公开调用。const adminToken = process.env.ADMIN_TOKEN || ''; if (adminToken) { const provided = req.headers['x-admin-token'] || ''; if (provided !== adminToken) { return res.json(fail('unauthorized: missing or invalid x-admin-token')); } } else { log('WARN: ADMIN_TOKEN not set; db-init is publicly callable...'); }使用方式
在 Appwrite 控制台为
db-init函数设置环境变量ADMIN_TOKEN=<随机强口令>,之后调用需附带:curl -X POST http://<host>/v1/functions/db-init/executions -H "X-Appwrite-Project: <project_id>" -H "x-admin-token: <ADMIN_TOKEN>" -H "Content-Type: application/json" -d '{"body":"{}","async":false}'说明与边界
Refs #2