本文档提供了 Stable Diffusion Web UI API 的身份验证和安全功能的全面指南。它涵盖了 HTTP 基本身份验证机制、URL 验证、请求过滤、TLS/SSL 支持以及保护 API 部署的最佳实践。
有关 API 端点和用法的更多信息,请参阅 API 参考和 API 端点。
Stable Diffusion Web UI API 支持 HTTP 基本身份验证,以防止未经授权的用户访问 API。
身份验证默认禁用,必须在启动应用程序时使用 --api-auth 命令行参数显式启用。
python launch.py --api --api-auth="username:password"
可以通过逗号分隔来指定多个凭据
python launch.py --api --api-auth="user1:pass1,user2:pass2"
启用身份验证后,所有 API 端点都需要在 HTTP 请求头中提供有效的凭据。
身份验证通过 FastAPI 的依赖注入系统和 HTTP Basic 安全方案实现
--api-auth 参数创建的auth() 方法使用 compare_digest 进行安全的字符串比较来验证用户凭据WWW-Authenticate: Basic 头部API 实施 URL 验证,以防止因允许任意 URL 请求而带来的安全风险。
URL 验证可防止通过外部 URL 请求未经授权访问本地资源。
来源: modules/api/api.py58-74 modules/api/api.py77-99
API 实现了多项 URL 处理安全功能
api_enable_requests 选项禁用所有外部请求api_forbid_local_requests 后,将阻止对本地资源的请求verify_url 函数分析 URL,以确定它们是指向本地还是全局资源api_useragent 选项为外部请求使用指定的用户代理API 包含一个全面的日志系统,可以启用以跟踪所有 API 请求。
启用后,API 日志将包含:
日志条目示例
API 2023-05-01 12:34:56.789 200 http/1.1 POST /sdapi/v1/txt2img 192.168.1.100 0.4567
要启用日志记录,请使用 --api-log 命令行参数
python launch.py --api --api-log
API 实现了健壮的错误处理,以便在发生问题时提供清晰的反馈。
API 错误以标准 JSON 格式返回
API 根据错误类型使用不同的错误处理策略
API 支持 TLS/SSL 加密以实现安全通信。
要启用 TLS/SSL,请在启动应用程序时提供证书和密钥文件
python launch.py --api --tls-keyfile=key.pem --tls-certfile=cert.pem
API 包含用于控制服务器的端点,出于安全原因,这些端点默认禁用。
以下服务器控制端点仅在明确启用时可用
| 端点 | 功能 | 描述 |
|---|---|---|
/sdapi/v1/server-kill | kill_webui | 完全终止应用程序 |
/sdapi/v1/server-restart | restart_webui | 重启应用程序 |
/sdapi/v1/server-stop | stop_webui | 优雅地停止服务器 |
要启用这些端点,请使用 --api-server-stop 命令行标志
python launch.py --api --api-server-stop
来源: modules/api/api.py248-252 modules/api/api.py917-927
下图展示了身份验证如何集成到 API 路由注册过程中
来源: modules/api/api.py199-210 modules/api/api.py274-284
在部署 Stable Diffusion Web UI API 时,请考虑以下安全最佳实践:
始终启用身份验证 在生产环境中
python launch.py --api --api-auth="secure_username:complex_password"
使用 HTTPS 进行所有 API 通信
python launch.py --api --tls-keyfile=key.pem --tls-certfile=cert.pem
限制本地请求 以防止潜在的 SSRF 攻击
python launch.py --api --api-forbid-local-requests
限制服务器控制 功能,除非需要,否则不要启用 --api-server-stop
启用日志记录 以审计 API 使用情况
python launch.py --api --api-log
考虑网络级安全,例如:
来源: modules/api/api.py201-205 modules/api/api.py905-916 modules/api/api.py147-165
下表总结了与安全相关的命令行参数
| 参数 | 描述 |
|---|---|
--api-auth | 启用身份验证及指定凭据 |
--api-log | 启用 API 请求日志记录 |
--api-enable-requests | 控制 API 是否可以发出出站 HTTP 请求 |
--api-forbid-local-requests | 阻止 API 向本地资源发出请求 |
--api-useragent | 设置 API 请求的用户代理 (User-Agent) 头部 |
--tls-keyfile | SSL 密钥文件路径 |
--tls-certfile | SSL 证书文件路径 |
--api-server-stop | 启用服务器控制端点 |