尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Security Report for {{Workspace}}

Security Report for {{Workspace}} Security Report for {{Workspace}}【免费下载链接】osmedeusA Modern Orchestration Engine for Security项目地址: https://gitcode.com/GitHub_Trending/os/osmedeusGenerated: {{TaskDate}}Target: {{Target}}Run UUID: {{RunUUID}}## 二、三种语法形态从模板变量到可执行代码 ### 2.1 {{Variable}} 模板变量 渲染引擎在真正执行函数之前会先做一轮变量替换。从源码 [markdown_functions.go](https://link.gitcode.com/i/3a0abdd1a656faaead8f1cf1f78aa531) 可以看到renderTemplateVariables 使用正则 \{\{(\w)\}\} 匹配所有形如 {{Name}} 的占位符并从运行上下文getContextVariables中取值替换未匹配到任何变量的占位符会原样保留避免静默丢失。 getContextVariables[markdown_functions.go](https://link.gitcode.com/i/9e2a5de1396756f931f3ef24d6a684b0)会从 goja VM 中导出以下常用变量 | 变量名 | 含义 | |---|---| | Target | 本次扫描的目标如 example.com | | TargetSpace / Workspace | 当前工作区名称通常即目标名 | | Output | 当前扫描输出目录路径 | | BaseFolder | Osmedeus 基础目录 | | Binaries / Data | 外部二进制目录 / 外部数据目录 | | ExternalConfigs | 外部配置目录 | | Workflows / Workspaces | 工作流 / 工作区目录 | | RunUUID | 当前 run 的唯一标识 | | TaskDate | 当前日期 | | Version | Osmedeus 版本号 | | DefaultUA | 默认 User-Agent | 模板头部的 {{Workspace}}、{{TaskDate}}、{{Target}}、{{RunUUID}} 正是由这套机制注入的。 ### 2.2 osm-func 代码块 模板中所有被三反引号包裹、语言标记为 osm-func 的代码块都会在渲染时被提取、执行、替换。源码中用两个正则定义匹配规则[markdown_functions.go](https://link.gitcode.com/i/8ca19f2e97ef9b0a9615b87a3914458e) go var osmFuncPattern regexp.MustCompile((?s)osm-func\n(.*?)\n) var osmFuncInlinePattern regexp.MustCompile(([^])\\{\\.osm-func\\})osmFuncPattern匹配整块osm-func ... 代码通过extractOsmFuncCode去掉首尾标记后执行osmFuncInlinePattern匹配code{.osm-func}行内形态适合放在表格单元格中。2.3 行内函数语法Pandoc 风格严重性分布表正是用行内语法实现的——Markdown 表格单元格里无法优雅地嵌入多行代码块因此模板写成| Severity | Count | |----------|---------------------------------| | Critical | db_select_vuln_critical(){.osm-func} | | High | db_select_vuln_high(){.osm-func} | | Medium | db_select_vuln_medium(){.osm-func} | | Low | db_select_vuln_low(){.osm-func} |渲染后每个单元格会被替换成对应的整数计数。三、渲染引擎三步流水线render_markdown_report(template_path, output_path)是驱动整个流程的核心函数markdown_functions.go其执行分为三步变量替换先调用renderTemplateVariables渲染{{Variable}}处理代码块用osmFuncPattern找到所有osm-func块extractOsmFuncCode取出代码交给executeCode在 goja JS 虚拟机中执行vf.vm.RunString见 markdown_functions.go执行失败会在原位置注入!-- ERROR: ... --注释保证模板其余部分不受影响处理行内函数用osmFuncInlinePattern处理code{.osm-func}逻辑与第二步一致。处理完成后自动创建输出目录并写入结果文件。由于osm-func代码运行在完整的 goja JS 引擎中模板中不仅可以直接调用db_*、字符串等内置函数还能写条件表达式、拼接字符串见下文示例。另有两个便捷入口generate_security_report(template_path)markdown_functions.go固定输出到{{Output}}/security-report.md并通过registerReportArtifact将该文件以markdown类型注册为数据库 artifact含文件大小、行数统计报告可直接在 UI 中浏览render_markdown_from_file/print_markdown_from_filemarkdown_functions.go读取 Markdown 文件并用 glamour 渲染为终端彩色样式用于命令行预览。四、统计函数详解Summary Statistics 与严重性分布4.1 工作区统计函数模板的 Summary Statistics 段落依次调用了四个统计函数它们从当前工作区的统计记录中取值db_functions.goTotal subdomains: db_select_total_subdomains()Total URLs: db_select_total_urls()Total assets: db_select_total_assets()Total vulnerabilities: db_select_total_vulns()其内部实现均为根据当前workspaceName查询工作区记录读取对应计数字段TotalSubdomains、TotalURLs、TotalAssets、TotalVulns查询失败时返回0而不是报错保证报告永远可以生成。函数签名与返回类型在 constants.go 中有明确登记。4.2 严重性分布函数严重性统计函数同样基于工作区统计记录模板调用对应字段db_select_vuln_critical()VulnCriticaldb_select_vuln_high()VulnHighdb_select_vuln_medium()VulnMediumdb_select_vuln_low()VulnLow函数常量定义见 constants.go。这些字段在扫描过程中由 Osmedeus 汇总维护因此模板中只需一行行内函数即可完成按严重级别分布的可视化表格。五、全量数据导出Assets 与 Vulnerabilities5.1 导出全部漏洞db_select_vulnerabilities({{Workspace}}, markdown)db_select_vulnerabilities(workspace, format)实现在 db_functions.go按created_at DESC排序查询漏洞记录format支持markdown与jsonl两种输出格式markdown会生成一张可直接嵌入报告的表。同类函数还有带过滤能力的db_select_vulnerabilities_filtered(workspace, severity, asset_value, format)常量注册见 constants.go。5.2 导出全部资产db_select_assets({{Workspace}}, markdown)db_select_assets(workspace, format)db_functions.go查询资产表并按创建时间倒序输出内部对结果做了Limit(1000)上限保护防止大扫描结果导致内存问题。同理可参考db_select_assets_filtered(workspace, status_code, asset_type, format)按状态码、资产类型过滤。六、自定义 SQL 查询db_select当内置函数不足以表达查询时模板提供db_select(sql_query, format)直接执行原始 SQLdb_functions.godb_select(SELECT severity, COUNT(*) as count FROM vulnerabilities GROUP BY severity ORDER BY count DESC, markdown)实现要点也是使用时的安全边界仅接受markdown/jsonl两种格式非法格式直接报错validateOutputFormat执行前会通过validateSelectQuery做安全校验只允许 SELECT 类只读查询从源头阻断写入类 SQL 注入结果行数硬上限 1000 行防止拖库式查询拖垮引擎查询结果会以列为键转为 map并以 Markdown 表格或 JSONL 输出。七、字符串函数与表达式能力模板最后演示了字符串处理函数常量定义见 constants.gotrim( Example trimmed text )toUpperCase(example)Workspace: {{Workspace}} | Target: {{Target}}由于代码块运行在 gojaJavaScript引擎中模板天然支持字符串拼接、contains({{Target}}, example)、三元表达式如 contains({{Target}}, .com) ? 是 .com 域名 : 非 .com 域名等 JS 语法与 Osmedeus 工作流中 function 步骤共享同一套内置函数注册表能力完全一致。八、实战通过 Workflow 自动化生成报告模板本身不产生报告需要由 workflow 调用渲染函数。仓库提供了两个可直接运行的参考工作流。8.1 最小演示sample-report-workflowsample-report-workflow.yaml 演示了从创建模板到渲染、校验、预览的完整闭环osmedeus run -m sample-report-workflow -t example.com其关键步骤- name: generate-report type: function function: render_markdown_report({{Output}}/templates/demo-report.md, {{Output}}/security-report.md) - name: verify-report type: function function: file_exists({{Output}}/security-report.md)工作流内嵌的 demo 模板展示了to_upper_case、trim、len、uuid、random_string、contains及三元条件表达式等更多函数组合。8.2 漏洞专项报告generate-vuln-reportgenerate-vuln-report.yaml 演示如何只导出高危发现- name: create-high-severity-template type: bash command: | cat {{Output}}/templates/high-severity-report.md EOF # High Severity Findings - {{TargetSpace}} ... osm-func db_select_vulnerabilities_filtered({{TargetSpace}}, critical, , markdown) ... EOF - name: generate-high-severity-report type: function function: render_markdown_report({{Output}}/templates/high-severity-report.md, {{Output}}/reports/high-severity-findings.md)运行方式osmedeus run -m generate-vuln-report -t example.com【免费下载链接】osmedeusA Modern Orchestration Engine for Security项目地址: https://gitcode.com/GitHub_Trending/os/osmedeus创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表