report

package
v0.4.18 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 2, 2026 License: AGPL-3.0 Imports: 19 Imported by: 0

Documentation

Overview

Package report 的 docx 子模块:手写的最小 OOXML(.docx)生成器。 不引入第三方文档库——.docx 本质是 zip + XML,报告需要的元素(标题层级/ 段落/列表/表格/分页)用一小段生成器即可覆盖,换来:零新依赖、单二进制哲学 不破、输出结构完全可控(内置中文报告模板的字体/字号/表格边框都在 styles.xml)。

Package report renders a deliverable Markdown report from the exploration graph: confirmed findings (with severity/evidence) (docs §15 P5).

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func FindingFilename

func FindingFilename(f *db.DBFinding) string

FindingFilename 为「一漏洞一文件」生成安全的 .md 文件名,形如 `critical_SQL注入_#123.md`。去掉路径分隔符与控制字符,避免 zip 内非法路径。

func FindingsCSV

func FindingsCSV(fs []*db.DBFinding) []byte

FindingsCSV 把一批 findings 渲染成 CSV(带 UTF-8 BOM,便于 Excel 正确识别中文)。 不含大段 report/evidence 全文,只放摘要类字段;需要全文用 Markdown/JSON 导出。

func FindingsMarkdown

func FindingsMarkdown(fs []*db.DBFinding, generatedAt time.Time) string

FindingsMarkdown 把一批 findings 整合成一份汇总报告(摘要 + 按严重等级分组, 每条含类别/状态/所属任务/证据/详细报告)。

func FormatTimeUTC added in v0.3.18

func FormatTimeUTC(t time.Time) string

FormatTimeUTC 统一时间展示(UTC,报告里避免时区歧义)。

func Markdown

func Markdown(in Input) string

Markdown renders the report.

func SeverityCN added in v0.3.18

func SeverityCN(s string) string

SeverityCN 严重度中文映射(报告用)。

func SeverityHex added in v0.3.93

func SeverityHex(sev string) string

SeverityHex 严重度主色(标题/表格底色用,A2)。

func SeverityHexSoft added in v0.3.93

func SeverityHexSoft(sev string) string

SeverityHexSoft 严重度柔和底色(表格行底色用,比主色浅)。

func SingleFindingMarkdown

func SingleFindingMarkdown(f *db.DBFinding, generatedAt time.Time) string

SingleFindingMarkdown 渲染单条漏洞为一份独立 Markdown(用于「一漏洞一文件」打包)。

Types

type Docx added in v0.3.18

type Docx struct {
	// contains filtered or unexported fields
}

Docx 是一份正在组装的文档;方法按顺序追加元素。

func BuildFindingDocx added in v0.3.18

func BuildFindingDocx(in FindingDocxInput) *Docx

BuildFindingDocx 渲染单漏洞报告(复现步骤/证据/修复建议的自包含文档)。 v0.4.0:补真封面页(居中标题/委托方/密级/日期)+ 页眉(漏洞名)——与总报告 同一交付标准;正文里的请求/响应/复测章节沿用 v0.3.93 的渲染。

func BuildTaskDocx added in v0.3.18

func BuildTaskDocx(in TaskDocxInput) *Docx

BuildTaskDocx 渲染任务总报告: 封面页(居中标题/委托方/密级/日期)→ 目录页(TOC 字段)→ 一、评估概览 → 二、测试范围与方法论 → 三、漏洞明细(按类别折叠分组+着色+复测+流量证据)→ 四、修复优先级路线图 → 附录 A 资产清单。 同类漏洞×多主机的重复上报在类别层折叠呈现。

func NewDocx added in v0.3.18

func NewDocx() *Docx

NewDocx 建立空文档(自动加封面后的第一个标题也由调用方控制)。

func (*Docx) Bullet added in v0.3.18

func (d *Docx) Bullet(text string)

Bullet 无序列表项。

func (*Docx) Code added in v0.3.18

func (d *Docx) Code(text string)

Code 等宽代码块(证据/PoC 用):底纹+左竖线、Consolas、保留空白。 整段合并为一个段落(行间用 w:br)——逐行成段会让长 JSON 被拆成上百个 独立段落、视觉散成一片(Kali 用户实测「全堆到一块儿」的主因之一)。

func (*Docx) CoverLine added in v0.3.94

func (d *Docx) CoverLine(text string, sz int, bold bool)

CoverLine 封面行:居中、可指定半点字号(sz)与颜色。空文本输出空行(撑版面用)。

func (*Docx) CoverLineColored added in v0.4.0

func (d *Docx) CoverLineColored(text string, sz int, hex string, bold bool)

CoverLineColored 带色的封面行(单漏洞封面按严重度着色用)。

func (*Docx) EmbedFont added in v0.4.4

func (d *Docx) EmbedFont(name string, ttf []byte)

EmbedFont 把一个 TTF 注册进文档,Encode 时混淆打包。公文三字体 (仿宋_GB2312/楷体_GB2312/方正小标宋_GBK)在新版 Windows、Linux 均不自带, 不嵌入时 Word 静默 fallback 成宋体——行盒与字形全变(用户实测「行距全不对」 的另一半根因)。嵌入后接收方无需装字体即可原样渲染。

func (*Docx) Encode added in v0.3.18

func (d *Docx) Encode(w io.Writer) error

Encode 打包成 .docx 字节流。

func (*Docx) H1 added in v0.3.18

func (d *Docx) H1(text string)

H1/H2/H3 标题。

func (*Docx) H2 added in v0.3.18

func (d *Docx) H2(text string)

func (*Docx) H3 added in v0.3.18

func (d *Docx) H3(text string)

func (*Docx) H4 added in v0.3.93

func (d *Docx) H4(text string)

H4 四级标题(漏洞明细内的小节:报告正文里的 ## 降到这里,不再压平)。

func (*Docx) Hei1 added in v0.4.3

func (d *Docx) Hei1(text string)

Hei1 公文一级标题:黑体三号、首行缩进 2 字符(如「一、评估概览」)。

func (*Docx) Image added in v0.4.9

func (d *Docx) Image(data []byte, caption string) bool

Image 嵌入一张图片并输出「居中图片段落 + 居中图注段落」。 只接受 Go 标准库能解析尺寸的格式(png/jpeg/gif),失败返回 false 由调用方 决定是否降级为文字说明(不因一张坏图让整份报告失败)。

func (*Docx) Kai2 added in v0.4.3

func (d *Docx) Kai2(text string)

Kai2 公文二级标题:楷体三号、首行缩进 2 字符(如「(一)复现步骤」)。

func (*Docx) P added in v0.3.18

func (d *Docx) P(text string)

P 正文段落(支持 \n 拆多段)。

func (*Docx) PRich added in v0.3.93

func (d *Docx) PRich(text string)

PRich 富文本段落:支持 **加粗** 级别(Markdown 富渲染 A5 的底层)。\n 拆多段。

func (*Docx) PageBreak added in v0.3.18

func (d *Docx) PageBreak()

PageBreak 分页。

func (*Docx) SetArtifactImageResolver added in v0.4.9

func (d *Docx) SetArtifactImageResolver(fn func(id int64) ([]byte, string, bool))

SetArtifactImageResolver 注入证据附件图片解析器(v0.5.0)。

func (*Docx) SetHeaderText added in v0.3.94

func (d *Docx) SetHeaderText(text string)

SetHeaderText 自定义页眉文字(客户名/报告名)。须在 Encode 前调用。

func (*Docx) TOC added in v0.3.94

func (d *Docx) TOC()

TOC 目录字段:Word 打开时按 updateFields 设置自动刷新(settings.xml 已置 updateFields,见 Encode)。\o "1-3" 收 Heading1-3——H4(漏洞明细小节)不进目录。

func (*Docx) Table added in v0.3.18

func (d *Docx) Table(header []string, rows [][]string)

Table 带表头的表格。rows 与 header 列数不一致时按最短补齐。

func (*Docx) TableFills added in v0.3.93

func (d *Docx) TableFills(header []string, rows [][]string, fills []string)

TableFills 带行底色的表格:fills[i] 是第 i 行数据的底色 hex(空串或越界 = 无底色)。 严重度分布表按严重度着色用(A2)。

type FindingDocxInput added in v0.4.0

type FindingDocxInput struct {
	Finding *db.DBFinding
	// ArtifactImage 证据附件图片解析器(v0.5.0,见 TaskDocxInput.ArtifactImage)。
	ArtifactImage  func(id int64) (data []byte, caption string, ok bool)
	GeneratedAt    time.Time
	AssetNameMap   map[int64]string
	Retests        []*db.FindingRetest
	Customer       string // 委托方(空 = 省略该行)
	Classification string // 密级占位(空 = 默认「内部资料 · 仅限授权方」)
}

FindingDocxInput 是单漏洞报告的输入(v0.4.0:与总报告同级的封面/页眉)。

type Input

type Input struct {
	Title       string
	Goal        string
	GeneratedAt time.Time
	AssetCounts map[string]int
	Findings    []*db.Node
}

Input bundles what the report needs.

type Run added in v0.3.93

type Run struct {
	Text string
	Bold bool
	Code bool // 内联代码(`x`):Consolas 字体区分
}

Run 富文本片段(PRich 用)。

type TaskDocxInput added in v0.3.18

type TaskDocxInput struct {
	TaskID      int64
	Title       string
	Goal        string
	GeneratedAt time.Time
	AssetCounts map[string]int
	Findings    []*db.DBFinding
	// AssetNames 资产 id → 可读名(域名/IP/URL)。nil/缺项回退 "id:N"(A8)。
	AssetNames map[int64]string
	// Retests finding id → 复测记录(最新在前)。报告带「复测记录」小节(A9)。
	Retests map[int64][]*db.FindingRetest
	// Customer 委托方(企业名,逗号连接;空 = 封面省略该行)。A12
	Customer string
	// TestWindow 测试窗口描述(如「2026-10-29 ~ 2026-10-31」;空 = 只给生成时间)。A12
	TestWindow string
	// AppendixAssets 附录资产清单:类型 → 可读名列表(A16;nil = 无附录)。
	AppendixAssets map[string][]string
	// Classification 密级/用途占位(空 = 默认「内部资料 · 仅限授权方」)。A12
	Classification string
	// PageHeader 页眉文字(空 = 「渗透测试报告」)。
	PageHeader string
	// ArtifactImage 证据附件图片解析器(v0.5.0):Markdown 里
	// ![说明](artifact:<id>) 会内嵌为图片;nil = 降级为文字说明。
	ArtifactImage func(id int64) (data []byte, caption string, ok bool)
}

TaskDocxInput 是总报告的输入。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL