部署 Stable Diffusion WebUI 后,防止未授权访问的核心是启动时添加`--api-auth`参数设置认证凭证,并通过防火墙限制 7860 端口仅受信任 IP 访问。若调用外部 API,密钥应存入环境变量而非代码明文。
先说结论:本地部署需启用 API 认证参数并配置网络隔离,云端调用需通过环境变量管理密钥。
- 先判断:区分是保护本地 WebUI 接口还是存储第三方 API 密钥
- 优先做:启动参数增加
`--api-auth`,防火墙放行仅限内网或特定 IP - 再验证:使用无凭证请求测试接口,确认返回 401 或连接拒绝
命令速用版
本地 WebUI 启动时增加认证与监听控制,以下命令适用于 Linux/macOS 环境:
python launch.py `--api` `--listen` 0.0.0.0 `--api-auth` username:password
Windows 环境使用webui.bat添加相同参数。若需限制仅本机访问,将0.0.0.0改为127.0.0.1。
为什么会这样
默认部署往往开放 7860 端口且无认证,导致局域网或公网可直接调用生成接口。Stable Diffusion WebUI 默认配置侧重于易用性,未强制开启访问控制,任何知道服务器 IP 的用户均可消耗计算资源或获取生成数据。
分步处理
步骤 1:启用 API 访问认证
修改启动脚本,在参数列表中加入`--api-auth`,格式为用户名:密码。此配置位于modules/api/api.py逻辑中,启用后所有 API 请求需携带 Basic Auth 头。
步骤 2:配置防火墙端口限制
使用系统防火墙工具(如ufw或安全组)限制 7860 端口。仅允许受信任的管理 IP 访问,避免对整个网络开放。默认端口风险分析显示,未配置防火墙时端口对全网开放。
步骤 3:安全存储第三方 API 密钥
若使用外部 Stable Diffusion API 服务,密钥不应硬编码在代码中。通过操作系统环境变量读取,例如STABLE_DIFFUSION_API_KEY。代码中调用os.environ.get获取密钥,缺失时程序应报错退出。
怎么验证是否生效
验证 API 认证:使用curl命令不带认证信息访问接口,如curl http://ip:7860/sdapi/v1/txt2img。若配置生效,应返回 401 Unauthorized 状态码。
验证网络隔离:在非信任网络环境下尝试连接服务器 IP 的 7860 端口。若防火墙生效,连接应超时或被拒绝。
验证密钥读取:运行调用脚本时不设置环境变量,检查程序是否按预期报错提示密钥缺失,而非使用空值或默认值。
常见坑
监听地址配置错误:使用`--listen` 0.0.0.0会监听所有网卡,若未配合防火墙或认证,等同于公网暴露。仅内网使用时建议绑定127.0.0.1。
密钥明文泄露:将 API 密钥直接写在 Python 脚本或配置文件中,一旦代码库泄露会导致密钥失效风险。生产环境应使用密钥管理服务或环境变量。
忽略 HTTPS 传输:若 API 接口涉及敏感数据传输,未启用 HTTPS 可能导致密钥在传输过程中被窃听。公共网络环境下必须强制 HTTPS。
常见问题
如何获取第三方 Stable Diffusion API 密钥?
需访问官方服务平台注册账户,在 API Settings 页面生成并复制密钥。该密钥用于调用云端生成服务,与本地 WebUI 认证密码不同。
忘记设置的 API 认证密码怎么办?
需停止服务,修改启动脚本中的`--api-auth`参数为新密码后重启。WebUI 不支持通过界面直接找回或重置 API 认证密码。
多人协作时如何管理不同权限?
原生`--api-auth`仅支持单一凭证。多用户权限管理需通过反向代理或中间件层实现,或在应用层构建用户系统与 API 调用逻辑分离。
参考来源
- 完整指南:如何使用 Stable Diffusion API (stablediffusionapi.com)
- 比迪丽 LoRA 镜像安全加固:防火墙端口限制、登录认证接入、API 调用权限管控
- 高效协作指南:多人同时使用 stable-diffusion-webui 的 5 个实用技巧
- Vidu 1.5:Stable Diffusion API 安全存储