
Label Studio 生产环境如何启用 SSRF 保护并限制服务器端口访问【免费下载链接】label-studioLabel Studio is a multi-type data labeling and annotation tool with standardized output format项目地址: https://gitcode.com/GitHub_Trending/la/label-studio当你把 Label Studio 开源版部署到生产环境时有两件事需要在部署层面做掉一是开启 SSRF服务端请求伪造保护阻止服务器代表用户向本地地址或内网地址发起请求二是收紧服务器端口只保留 Label Studio 运行所必需的端口。本文依据 Secure Label Studio、部署文档的端口要求、Kubernetes 部署指南 和 2.10.0 版本发布说明 给出操作步骤。准备条件已安装 Label Studio开源版部署方式可以是 Docker Compose 或 KubernetesHelm 3。你的目标是生产环境而非本地开发环境。SSRF_PROTECTION_ENABLED的设计取向是支持本地环境的用户直接访问本地数据源因此在生产环境中应当启用它见 security.md 中 Enable SSRF protection for production environments 一节。启用 SSRF 保护在部署配置中将环境变量SSRF_PROTECTION_ENABLED设置为true。开启后Label Studio 的默认行为是拦截所有落在保留地址块内的 IPIPv4 和 IPv6 均覆盖例如内网私有网段、回环地址等这些拦截对象覆盖 URL 导入、文件上传等由服务器发起的出站请求。以 Kubernetes Helm 部署为例install_k8s.md 的指引是通过helm install命令的--set参数指定需要设置的环境变量。安装命令本身为helm install RELEASE_NAME heartex/label-studio -f ls-values.yaml其中RELEASE_NAME替换为你要使用的 Helm release 名称ls-values.yaml是你自定义的 values 文件。按文档说明你可以在该命令中追加--set参数传入SSRF_PROTECTION_ENABLEDtrue也可以把该环境变量写入ls-values.yaml的环境变量配置中例如helm install RELEASE_NAME heartex/label-studio -f ls-values.yaml --set SSRF_PROTECTION_ENABLEDtrue注意一个文档与代码之间的版本差异security.md 和 2.10.0 发布说明 都写明该变量默认为false默认关闭而当前仓库源码 base.py 中的定义是SSRF_PROTECTION_ENABLED get_bool_env(SSRF_PROTECTION_ENABLED, True)即默认值已改为True。两个说法在不同版本下分别成立因此在生产环境中不要依赖默认值应显式设置为true。自定义拦截的子网可选分支如果你需要精确控制哪些网段被拦截2.10.0 引入了两个与SSRF_PROTECTION_ENABLEDtrue配合使用的环境变量见 2.10.0 发布说明USER_ADDITIONAL_BANNED_SUBNETS指定额外的 IP 地址或 CIDR 网段禁止服务器侧请求例如 URL 文件上传器访问这些地址。USE_DEFAULT_BANNED_SUBNETS默认值为True即保留默认的保留地址块拦截清单。如果你希望完全由自己控制被拦截的网段可以将其设置为False然后通过USER_ADDITIONAL_BANNED_SUBNETS列出所有需要禁止的 IP/CIDR。文档明确提示关闭默认子网拦截USE_DEFAULT_BANNED_SUBNETSFalse是有风险的做法should only be done if you know what youre doing。除非你的数据源确实位于保留地址段内且你理解放行后果否则保留默认值。限制服务器端口访问security.md 对开源版生产部署的原文建议是If youre running the open source version in production, restrict access to the Label Studio server. Restrict access to the server itself by opening only the required ports on the server. 即只打开 Label Studio 所需的端口不对外开放其他端口。所需端口见 部署文档includes/deploy.md 的 Port requirements 一节Label Studio 默认期望 8080 端口处于开放状态如果要使用其他端口在启动 Label Studio 时指定文档指向 Start Label Studio 相关说明。也就是说端口限制的操作路径是确认你的部署实际暴露的端口默认 8080然后在服务器防火墙/安全组层面只放行该端口其余端口一律关闭。结果验证服务状态Helm 安装后按 install_k8s.md 检查 Pod 是否正常拉起kubectl get podsSSRF 拦截是否生效2.10.0 的发布说明指出该版本改进了错误信息当某个操作因 SSRF 保护被阻止时错误提示会明确说明请求是被 SSRF 保护拦截的。因此验证方式就是触发一次受保护路径上的出站请求——例如通过 URL 导入一个指向保留地址段如127.0.0.1或内网私有网段的资源观察返回的报错是否提示被 SSRF 保护阻止而不是返回数据或挂起。端口限制在服务器之外尝试访问未放行的端口确认只有你开放的端口默认 8080可达。限制与已知变化SSRF 保护拦截的是服务器侧发起的请求。如果你的数据源例如自建 S3 端点、内网模型服务本身就位于私有网段开启保护后这些 URL 会被拒绝需要评估是否用USE_DEFAULT_BANNED_SUBNETS/USER_ADDITIONAL_BANNED_SUBNETS调整并自行承担文档中提示的风险。历史上 SSRF 防护有多次修补2.2.9 修复了添加模型和导入路径上的盲 SSRF2.4.9/2.4.10 增强了防护健壮性2.7.0 修复了 DNS rebinding 问题。生产环境保持版本更新同样重要。端口要求的来源是部署说明文档中的 Port requirements 一节默认值 8080如果你修改了启动端口防火墙放行规则要同步改为实际使用的端口。【免费下载链接】label-studioLabel Studio is a multi-type data labeling and annotation tool with standardized output format项目地址: https://gitcode.com/GitHub_Trending/la/label-studio创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考