gte-base-zh WebUI安全加固:禁用CORS、关闭Swagger UI、限制Referer白名单

张开发
2026/4/4 4:42:14 15 分钟阅读
gte-base-zh WebUI安全加固:禁用CORS、关闭Swagger UI、限制Referer白名单
gte-base-zh WebUI安全加固禁用CORS、关闭Swagger UI、限制Referer白名单重要提示本文介绍的安全加固方案适用于生产环境部署可有效防止未授权访问和数据泄露风险。1. 为什么需要WebUI安全加固当你使用xinference部署gte-base-zh embedding模型并开放WebUI界面时默认配置可能存在安全风险。未经保护的Web界面可能面临未授权访问任何人都可以调用你的模型服务数据泄露敏感文本数据可能被恶意获取跨站请求伪造恶意网站可能利用你的模型服务接口信息暴露Swagger UI会暴露所有API细节通过本文的三个关键加固措施你可以显著提升模型服务的安全性同时保持正常的业务使用。2. 环境准备与现状分析2.1 当前部署情况根据提供的部署信息你的gte-base-zh模型通过以下方式运行模型位置/usr/local/bin/AI-ModelScope/gte-base-zhXinference启动命令xinference-local --host 0.0.0.0 --port 9997模型服务启动脚本/usr/local/bin/launch_model_server.py2.2 安全风险识别默认部署存在以下安全隐患CORS配置宽松允许任意来源的跨域请求Swagger UI暴露API文档界面可被任意访问无访问控制缺少Referer验证等基础防护3. 安全加固实施方案3.1 禁用CORS跨域资源共享CORS默认配置可能过于宽松建议在生产环境中严格限制。修改启动脚本(/usr/local/bin/launch_model_server.py)from flask import Flask from flask_cors import CORS app Flask(__name__) # 默认的不安全配置需要修改 # CORS(app) # 这会允许所有跨域请求 # 安全配置完全禁用CORS或严格限制 # 方案1完全禁用CORS # app.config[CORS_ENABLED] False # 方案2仅允许特定域名推荐 cors CORS(app, resources{ r/api/*: { origins: [https://your-domain.com, https://your-app.com] } }) # 或者使用更严格的配置 app.config[CORS_SUPPORTS_CREDENTIALS] False app.config[CORS_ALLOW_HEADERS] [Content-Type]验证方法# 测试CORS配置 curl -H Origin: http://malicious-site.com \ -H Access-Control-Request-Method: POST \ -H Access-Control-Request-Headers: X-Requested-With \ -X OPTIONS --verbose \ http://localhost:9997/api/embed正确配置后非法来源的请求应该被拒绝。3.2 关闭Swagger UI文档界面Swagger UI虽然方便调试但在生产环境中会暴露API细节建议关闭。修改方案from flask import Flask from flask_swagger_ui import get_swaggerui_blueprint app Flask(__name__) # 默认的不安全配置需要修改 # SWAGGER_URL /api/docs # API_URL /static/swagger.json # swaggerui_blueprint get_swaggerui_blueprint( # SWAGGER_URL, # API_URL, # config{app_name: GTE Model API} # ) # app.register_blueprint(swaggerui_blueprint, url_prefixSWAGGER_URL) # 安全配置完全禁用Swagger UI # 注释掉或删除所有Swagger相关代码 # 或者通过环境变量控制 import os if os.environ.get(ENVIRONMENT) ! production: # 仅在开发环境启用Swagger SWAGGER_URL /api/docs API_URL /static/swagger.json swaggerui_blueprint get_swaggerui_blueprint( SWAGGER_URL, API_URL, config{app_name: GTE Model API} ) app.register_blueprint(swaggerui_blueprint, url_prefixSWAGGER_URL)验证方法 访问http://your-server:9997/api/docs应该返回404错误或重定向到登录页面。3.3 实施Referer白名单限制Referer检查是防止CSRF攻击和未授权访问的有效手段。实现代码from flask import request, abort # 配置允许的Referer列表 ALLOWED_REFERERS [ https://your-domain.com, https://your-app.com, https://your-internal-service.com ] app.before_request def check_referer(): # 排除健康检查等必要接口 if request.path in [/health, /metrics, /]: return referer request.headers.get(Referer) origin request.headers.get(Origin) # 如果没有Referer或Origin头拒绝请求 if not referer and not origin: abort(403, descriptionReferer or Origin header required) # 检查Referer是否在白名单中 if referer: if not any(allowed in referer for allowed in ALLOWED_REFERERS): abort(403, descriptionReferer not allowed) # 检查Origin是否在白名单中 if origin: if origin not in ALLOWED_REFERERS and origin ! null: abort(403, descriptionOrigin not allowed)Nginx层面配置推荐额外添加server { listen 9997; server_name your-model-server.com; location / { # Referer检查 valid_referers none blocked your-domain.com your-app.com; if ($invalid_referer) { return 403; } proxy_pass http://localhost:9997; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }4. 完整的安全加固示例4.1 修改后的启动脚本示例#!/usr/bin/env python3 # /usr/local/bin/launch_model_server.py import os from flask import Flask, request, abort from flask_cors import CORS app Flask(__name__) # 安全配置 # 1. CORS严格限制 cors CORS(app, resources{ r/api/*: { origins: [https://your-domain.com, https://your-app.com], methods: [POST, GET], allow_headers: [Content-Type, Authorization] } }) # 2. Referer白名单 ALLOWED_REFERERS [https://your-domain.com, https://your-app.com] app.before_request def security_checks(): # 排除健康检查接口 if request.path in [/health, /metrics, /]: return # Referer检查 referer request.headers.get(Referer) origin request.headers.get(Origin) if not referer and not origin: abort(403, descriptionAccess denied: Referer or Origin header required) if referer and not any(allowed in referer for allowed in ALLOWED_REFERERS): abort(403, descriptionAccess denied: Invalid Referer) if origin and origin not in ALLOWED_REFERERS and origin ! null: abort(403, descriptionAccess denied: Invalid Origin) # 3. 生产环境禁用Swagger UI if os.environ.get(ENV, production) ! development: # 不注册Swagger蓝图 pass else: # 开发环境可启用Swagger from flask_swagger_ui import get_swaggerui_blueprint SWAGGER_URL /api/docs API_URL /static/swagger.json swaggerui_blueprint get_swaggerui_blueprint( SWAGGER_URL, API_URL, config{app_name: GTE Model API - Development} ) app.register_blueprint(swaggerui_blueprint, url_prefixSWAGGER_URL) # 你的模型路由和其他业务代码 app.route(/api/embed, methods[POST]) def embed_text(): # 模型推理逻辑 return {embedding: [...]} app.route(/health) def health_check(): return {status: healthy} if __name__ __main__: app.run(host0.0.0.0, port9997, debugFalse)4.2 部署和测试步骤备份原脚本cp /usr/local/bin/launch_model_server.py /usr/local/bin/launch_model_server.py.backup应用修改# 将新的安全配置写入启动脚本 vi /usr/local/bin/launch_model_server.py重启服务# 停止现有服务 pkill -f python.*launch_model_server # 启动新服务 nohup python /usr/local/bin/launch_model_server.py /root/workspace/model_server.log 21 验证安全配置# 测试非法访问 curl -H Referer: https://malicious-site.com http://localhost:9997/api/embed # 应该返回403错误 # 测试合法访问 curl -H Referer: https://your-domain.com http://localhost:9997/api/embed # 应该正常响应5. 额外安全建议5.1 网络层防护# 使用ipt限制端口访问 iptables -A INPUT -p tcp --dport 9997 -s 192.168.1.0/24 -j ACCEPT iptables -A INPUT -p tcp --dport 9997 -j DROP # 或者使用云服务商的安全组规则5.2 认证授权增强考虑添加API密钥认证API_KEYS { app1: your-secret-key-1, app2: your-secret-key-2 } app.before_request def api_key_auth(): if request.path.startswith(/api/): api_key request.headers.get(X-API-Key) if not api_key or api_key not in API_KEYS.values(): abort(401, descriptionInvalid API key)5.3 监控和日志import logging from datetime import datetime app.after_request def log_request(response): logger.info(f{datetime.now()} - {request.remote_addr} - f{request.method} {request.path} - f{response.status_code} - fReferer: {request.headers.get(Referer)}) return response6. 总结通过实施本文介绍的三重安全加固措施你的gte-base-zh模型WebUI将获得显著的安全提升CORS严格限制防止跨域攻击和数据泄露Swagger UI禁用避免API信息暴露Referer白名单有效控制访问来源这些措施可以在不影响正常业务使用的前提下大幅降低安全风险。建议根据实际业务需求调整白名单配置并定期审查安全设置。记得在生产环境部署前进行全面测试确保安全配置不会影响正常的业务访问。同时保持系统和依赖库的及时更新以获取最新的安全补丁。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

更多文章