本项目是 DeerFlow on Hugging Face Space 的 demo / proof-of-concept 包装,不是生产多租户部署。
默认安全目标:能公开访问基础 UI,但不暴露任意命令执行、Docker socket、Kubernetes provisioner 或 web terminal。
hfs/config/config.hfs.yaml 默认:
sandbox:
use: deerflow.sandbox.local:LocalSandboxProvider
allow_host_bash: false
uploads:
auto_convert_documents: false
tool_groups:
- name: web
- name: file:read默认不启用:
bashtool。file:writetool group。- Docker sandbox。
- Kubernetes provisioner。
/api/sandboxesprovisioner route。- web terminal。
- SSH。
- tunnel。
- 任意用户输入命令执行面。
DeerFlow Gateway 对非公开 API 有 auth middleware。首次管理员初始化走 /setup 和 /api/v1/auth/initialize。
GATEWAY_CORS_ORIGINS 必须包含当前浏览器 origin,例如:
GATEWAY_CORS_ORIGINS=https://blueskyxn-deerflow-all-in-one-hfs.hf.space否则 auth POST 会被 CSRF middleware 拦截,报:
Cross-site auth request denied.
Nginx 需要正确传递 X-Forwarded-Proto 和 X-Forwarded-Host,当前 hfs/nginx/nginx.conf 已处理 HF proxy 场景。
Gateway 当前使用 AUTH_JWT_SECRET 签名 session。BETTER_AUTH_SECRET 不是当前上游运行时契约,仅由 entrypoint 作为旧 HFS secret 的一次兼容来源。Nginx access log 不记录 query string,避免 OAuth code、token 或其他敏感参数进入公开容器日志。
上游 schema 29 默认允许 POST /api/v1/auth/register 创建本地普通账号。HFS managed config 显式设置:
auth:
local:
allow_registration: false这不会阻止首次管理员初始化,但会避免可访问 Space 的访客绕过管理员邀请自行注册。scripts/smoke-test.sh 会从 /api/v1/auth/setup-status 验证 registration_enabled=false。
公开:
/_ops/healthz
/_ops/readyz
需要 DEER_FLOW_OPS_TOKEN:
/_ops/status
/_ops/health
/_ops/system
/_ops/persistence
/_ops/version
/_ops/metrics
/_ops/logs
/_ops/errors
/_ops/config
/_ops/config 只返回白名单配置和 secret presence,不返回 secret 值。/_ops/logs 和 /_ops/errors 只读取 allowlist 中的日志目标,并会按当前进程已知 secret 值做 redaction;它们仍属于受保护诊断面,不应公开分享输出。
/_ops/ 浏览器 shell 不把 token 写入 localStorage。通过 Authorization: Bearer 或 X-Ops-Token 成功认证后,服务可签发 path-scoped、HttpOnly、SameSite=Strict session cookie;query string 不接受 token。
Nginx 对 /_ops/* 只允许 GET,并把 request body limit 收窄到 16k,避免公开诊断面继承上传接口的 100M 限制。
公开 HTML shell:
/_admin/
/_admin/ 可以公开路由,但它只是 token 输入和 API 调用 shell;默认不得返回 secret、完整配置、进程详情或任何写能力。
默认 DEER_FLOW_ADMIN_ENABLED=false,admin API 关闭,只保留 HTML shell。维护窗口显式启用后,API 仍需要 DEER_FLOW_ADMIN_TOKEN:
/_admin/api/status
/_admin/api/config
/_admin/api/actions
/_admin/api/audit
/_admin/api/actions/run-health-checks
/_admin/api/reload-nginx
/_admin/api/restart
写动作默认由 DEER_FLOW_ADMIN_ACTIONS_ENABLED=false 关闭;维护窗口确需启用时,还需要:
DEER_FLOW_ADMIN_ACTIONS_ENABLED=true默认应保持:
DEER_FLOW_ADMIN_ENABLED=false
DEER_FLOW_ADMIN_ACTIONS_ENABLED=false写动作还需要 X-DeerFlow-Admin-Intent: DeerFlow-HFS-Admin 和精确的 X-DeerFlow-Admin-Confirm header,并会写入 /data/deer-flow/logs/admin-actions.jsonl 审计记录。审计读取限制为最近 1 MiB,并再次执行 secret redaction。run-health-checks 是只读 action,不受 DEER_FLOW_ADMIN_ACTIONS_ENABLED 控制,但仍要求 admin token、intent 和 confirm header,并记录精简审计事件。
Nginx 对 /_admin/* 只允许 GET / POST,并把 request body limit 收窄到 64k。公开 HTML shell 不持久化 admin token 到 browser storage。
Admin restart 仅允许固定服务:
gateway
frontend
nginx
没有任意 service 名称,没有 shell command 输入。
当前默认模型通过 Cloudflare AI Gateway 调用 longcat-flash-thinking-2601。公网 Space 配模型 key 后会产生模型费用或额度消耗。
建议:
- Space 保持 Private 或 Protected,除非已做好成本控制。
- API key 使用低权限、低额度、可快速轮换的 demo key。
- provider 侧设置预算上限。
- 管理员密码使用强密码。
- 不在日志或截图中暴露 token。
应放入 HF Secrets:
OPENAI_API_KEY
OPENROUTER_API_KEY
AUTH_JWT_SECRET
DEER_FLOW_INTERNAL_AUTH_TOKEN
DEER_FLOW_OPS_TOKEN
DEER_FLOW_ADMIN_TOKEN
TAVILY_API_KEY
SERPER_API_KEY
JINA_API_KEY
EXA_API_KEY
FIRECRAWL_API_KEY
INFOQUEST_API_KEY不要放入:
hfs/config/config.hfs.yaml.env/ committed env files- README
- docs
- PR 文案
- issue
- test snapshot
- public screenshots
默认 auto_convert_documents=false。启用文档转换会扩大解析器攻击面,也会增加 CPU/内存消耗。只建议在可信用户、私有 Space 中启用。
公开前确认:
/api/sandboxes返回 404。allow_host_bash: false。- 未启用
bashtool。 - 未启用不受控
file:write。 DEER_FLOW_ADMIN_ACTIONS_ENABLED=false。GATEWAY_CORS_ORIGINS只包含可信 origin。- 管理员密码足够强。
- 模型 provider key 有预算上限。
AUTH_JWT_SECRET和DEER_FLOW_INTERNAL_AUTH_TOKEN是稳定 secret。/data已持久化或明确接受重启丢状态。