Faraday 5.3.0 版本解析:跨工作区数据访问、CSV 导出内存优化与 API 体验升级

发布时间:2026/10/15 7:05:29
Faraday 5.3.0 版本解析:跨工作区数据访问、CSV 导出内存优化与 API 体验升级
网络安全渗透测试漏洞扫描【免费下载链接】faradayOpen-source and AI-powered cybersecurity tools for offensive security, vulnerability management, and autonomous pentesting. Built by hackers in Latin America, used worldwide.项目地址https://gitcode.com/gh_mirrors/far/faraday点击查看免费下载导读Faraday 5.3.0发布于 2024 年 5 月 23 日见 CHANGELOG/5.3.0/date.md是一次聚焦数据可及性与导出性能的维护性发布。本次更新围绕六项变更展开新增返回用户有权访问的所有对象的全局端点、优化 CSV 导出时 references 的拉取策略以降低内存占用、修复从模板创建漏洞的问题、调整交互式 Swagger 参数、以及依据 dependabot 扫描结果升级依赖库版本。阅读本文后你将掌握 5.3.0 中跨工作区数据查询的权限模型、CSV 导出的实现细节以及从模板创建漏洞的正确调用方式。一、版本背景与变更总览本版本所有变更记录于 CHANGELOG/5.3.0/community.md共 6 条变更类型内容IssueMOD修改交互式 Swagger 的参数#7610ADD新增 services 与 hosts 端点可检索用户有权访问的所有信息#7503FIX修订 CSV 导出时 references 的获取策略以优化内存使用#7712FIX修复从模板创建漏洞vuln的问题#7711MOD依据 dependabot 扫描结果调整依赖库版本#7691ADD新增 vuln 端点可检索用户有权访问的所有对象#7521整体来看5.3.0 的主线是权限感知的数据访问扩展#7503、#7521与大数据量导出场景的内存优化#7712配合模板创建漏洞的缺陷修复#7711。下面逐条结合仓库源码展开。二、新增全局端点获取用户有权访问的所有对象#7503、#75212.1 从工作区限定到用户上下文Faraday 的 API 长期采用GenericWorkspacedView设计——以route_prefix /v3/ws/workspace_name/为前缀见 faraday/server/api/base.py所有读写操作都被限定在 URL 中指定的单个工作区内。5.3.0 引入的 #7503 与 #7521 打破了这一限制在不指定 workspace_name的情况下hosts、services、vulns 三类资源的端点现在可以返回当前登录用户有权访问的所有对象跨工作区聚合。从源码结构看这一能力依赖两个关键机制_apply_filter_context权限过滤在 base.py 中查询会被注入WorkspacePermission.user_id current_user.id OR Workspace.public True条件即我是成员的工作区 公开工作区activeTrue工作区过滤hosts 与 services 的_generate_filter_query均追加了filter(Host.workspace.has(activeTrue))/filter(Service.workspace.has(activeTrue)) 确保只统计未归档active工作区中的数据见 hosts_base.py、services_base.py。2.2 hosts 的 countVulns 端点以 hosts 为例countVulns端点hosts_base.py在收到请求时先检查workspace_nameworkspace_name kwargs.get(workspace_name) if workspace_name: workspaces [get_workspace(workspace_name)] # 传统单工作区模式 else: workspaces self._get_context_workspace_query().all() # 5.3.0 新增用户上下文全部工作区随后对每个工作区执行Host.query_with_count(host_id_list, workspace)并把结果以{hosts: {host_id: 统计值}}的形式聚合返回。也就是说只要不带workspace_name调用GET /v3/hosts/countVulns即可一次性拿到当前用户在其所有可见工作区中的主机漏洞严重级别统计critical/high/med/low/info/unclassified。对应测试见 tests/test_api_hosts.py该测试验证了六种严重级别的统计字段能正确返回。2.3 vulns 的全局过滤查询vulns 端点在_generate_filter_query中实现了同样的双模式切换vulns_base.pyif workspace: vulns vulns.filter(VulnerabilityGeneric.workspace workspace) else: vulns self._apply_filter_context(vulns) vulns vulns.filter(vulnerability_class.workspace.has(activeTrue))当传入 workspace 时行为与旧版本一致不带 workspace 时则通过_apply_filter_context自动限定到用户可访问的工作区集合。这一逻辑贯穿 vulns 的多个子端点tools_history、attachment、filter、top_users、批量删除等均调用_apply_filter_context做权限校验见 vulns_base.py意味着用户上下文查询能力是系统性的而非单一端点特例。适用前提全局端点返回的是当前登录用户的可见数据因此调用方必须携带有效会话/认证信息匿名或未授权请求不会获得任何工作区数据。此外全局模式只会返回 active 工作区的内容归档工作区的对象不会出现在聚合结果中。三、CSV 导出内存优化references 获取策略重构#77123.1 两种导出模式的由来vulns 的/filter端点支持两种 CSV 导出参数vulns_base.pyexport_csvtrue全量导出完整上下文生成Faraday-SR-Context.csvexport_csv_limitedtrue精简导出仅包含核心字段生成Faraday-SR-Limited.csv两者互斥同时传入返回 400。3.2 内存优化的实现#7712 的核心是调整 references引用链接的获取方式。优化体现在三处精简导出排除大字段export_vulns_to_csv_limitedexport.py将refs与其他大体积字段 description、request、response、data、resolution、policyviolations、_attachments一并列入large_fields 在默认列选择时不写入 CSV显著减小序列化与内存占用按需加载 refs在_generate_filter_query中selectinload(VulnerabilityGeneric.refs)仅在is_csvTrue时追加vulns_base.py 常规 JSON 列表查询不再无条件加载 refs 关联对象避免无谓的 N1 查询与对象实例化批量预取替代逐条遍历export_vulns_to_csvexport.py先一次性收集全部 vuln ID 用单条IN查询批量加载 comments再以 dict 索引comments_dict[object_id]完成关联避免循环内逐条查库。此外 export.py 中的csv_escape对以、、-、开头的单元格值加前缀防止 CSV 公式注入——导出数据在 Excel 中打开时不会执行恶意公式。3.3 数据完整性说明需要说明的是精简导出limited默认不含 refs 列适合大批量、低内存场景若业务上必须保留 refs可以显式传入columns参数指定列此时_filter会把请求列从 exclude 列表里移除见 vulns_base.py但需自行权衡内存开销。四、修复从模板创建漏洞#77114.1 模板体系在代码中的位置漏洞模板由VulnerabilityTemplateView管理vulnerability_template.py其 schema 设计有一个值得注意的细节VulnerabilityTemplateSchema的模型声明使用VulnerabilityTemplate的同时注释明确指出Here we use vulnerability instead of vulnerability_template to avoid duplicate row见 vulnerability_template.py即序列化时复用 vulnerability 的字段布局避免同一行数据重复输出。4.2 从模板创建漏洞的正确流程在 Faraday 5.3.0 中从模板创建漏洞的链路为查询模板GET /v3/vulnerability_template/列出模板支持分页与过滤VulnerabilityTemplateFilterSet复用模板全部字段携带模板字段提交漏洞创建漏洞POST /v3/ws/workspace_name/vulns/时将模板中的 name、description、severity、references 等字段复制到漏洞 payload 中references 特殊处理创建/更新漏洞时payload 中的refs会被提取到custom_behaviour_fields再以批量 INSERT ON CONFLICT DO NOTHING的方式写入关联表见 vulns_base.py模板携带的引用因此能干净地落库。#7711 修复的具体问题属于创建链路的缺陷此前某些模板字段如 refs、cwe、owasp 等关联对象在创建时未正确映射导致从模板新建的漏洞丢失部分信息或报错。修复后模板 → 漏洞的字段传递在 vulns_base.py 的_perform_create路径上得到统一处理。排查建议若在 5.3.0 之前的版本中遇到从模板创建漏洞后 refs/自定义字段缺失可直接升级到本版本验证仓库中 vulnerability_template.py 展示了模板 refs 的读取方式reference_template_instances名称拼接可作为字段映射的对照参考。五、交互式 Swagger 参数调整与依赖版本维护#7610、#76915.1 Swagger 文档端点的实现Swagger 文档由 swagger.py 中的SwaggerView提供优先返回本地配置的LOCAL_OPENAPI_FILE否则回退到仓库内置的 faraday/openapi/faraday_swagger.json该文件中的/_api/v3/swagger路径即此端点。#7610 对交互式 Swagger 的请求参数做了调整使文档中的参数声明与实际 API 行为保持一致——例如分页、q过滤 JSON、export_csv等查询参数在 OpenAPI 描述中与代码实现对齐避免调用方按文档构造请求时出现 400。5.2 依赖版本收敛#7691依据 dependabot 的扫描结果5.3.0 调整了部分依赖版本。从 faraday/requirements.txt 可以看到当前仓库的版本策略精确锁定类werkzeug2.3.8、kombu5.4.2、celery5.4.0、bidict0.22.0等避免框架级行为漂移区间约束类flask2.3.2,3.0、sqlalchemy2.0.30,2.1、marshmallow3.19.0,4.0.0、bleach4.1.0,5.0.0等在兼容范围内允许补丁升级安全敏感类cryptography42.0.0、pyopenssl26.0.0、pyjwt2.12.0等均采用下限约束确保安全补丁可被安装。适用前提以上版本约束以当前仓库5.3.0 之后的演进版本为准实际部署时应以pip install -r faraday/requirements.txt或 uv.lock 锁定的解析结果为准dependabot 调整通常不会引入破坏性 API 变更但升级 celery/kombu 等消息队列组件后建议重启 worker 并回归验证任务队列faraday/server/celery_worker.py。六、升级与验证建议升级路径从 5.2.x 升级到 5.3.0 前先执行数据库迁移仓库使用 Alembic迁移脚本位于 faraday/migrations/versions再启动服务功能回归清单不带 workspace_name 调用GET /v3/hosts/countVulns验证跨工作区聚合统计不带 workspace_name 调用 vulns 的/filterJSON 模式验证仅返回可访问工作区的漏洞触发export_csvtrue与export_csv_limitedtrue对比 refs 列与响应体大小、内存占用从漏洞模板新建漏洞确认 refs、cwe、owasp、自定义字段完整落库参考实现上述行为均有对应测试覆盖如 tests/test_api_hosts.py、tests/test_api_vulns.py可将其作为功能契约用于回归验证。总结Faraday 5.3.0 通过 #7503/#7521 将 hosts、services、vulns 的数据访问从单工作区扩展为用户可见全部工作区并依托_apply_filter_context权限过滤保证跨工作区查询不越权通过 #7712 重构 references 获取策略让大额 CSV 导出在内存占用上更可控同时修复了从模板创建漏洞的缺陷#7711并完成 Swagger 参数对齐与依赖库版本收敛#7610、#7691。对于需要跨工作区聚合统计、批量导出或模板化录入漏洞的运维与开发场景5.3.0 提供了明确的升级价值。赞分享网络安全渗透测试漏洞扫描【免费下载链接】faradayOpen-source and AI-powered cybersecurity tools for offensive security, vulnerability management, and autonomous pentesting. Built by hackers in Latin America, used worldwide.项目地址https://gitcode.com/gh_mirrors/far/faraday点击查看免费下载相关推荐Faraday 3.3 版本解读工作区禁用、插件体系升级与 CouchDB 导入修复Faraday 3.3 版本解读工作区禁用、插件体系升级与 CouchDB 导入修复 本文基于 Faraday 开源项目 CHANGELOG/3.3/comm网络安全渗透测试漏洞扫描Faraday 5.22.0 版本要点解析CSV 导出增强、工作流规则与资产 API 的 14 项更新Faraday 5.22.0 版本要点解析CSV 导出增强、工作流规则与资产 API 的 14 项更新 本篇文章围绕 Faraday 开源平台 5.22.0网络安全渗透测试漏洞扫描Faraday 5.14.1 修复实录CSV 导出内存优化与重复报告上传的去重机制Faraday 5.14.1 修复实录CSV 导出内存优化与重复报告上传的去重机制 本文以 Faraday 项目 5.14.1 版本的社区变更日志 CHAN网络安全渗透测试漏洞扫描上一篇wait-on 高级功能探索HTTP over Unix Socket 和自定义验证下一篇FastAPI-Backend-Template核心功能解析异步SQLAlchemy 2.0与PostgreSQL无缝集成创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考