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 ¶
- func FindingFilename(f *db.DBFinding) string
- func FindingsCSV(fs []*db.DBFinding) []byte
- func FindingsMarkdown(fs []*db.DBFinding, generatedAt time.Time) string
- func FormatTimeUTC(t time.Time) string
- func Markdown(in Input) string
- func SeverityCN(s string) string
- func SeverityHex(sev string) string
- func SeverityHexSoft(sev string) string
- func SingleFindingMarkdown(f *db.DBFinding, generatedAt time.Time) string
- type Docx
- func (d *Docx) Bullet(text string)
- func (d *Docx) Code(text string)
- func (d *Docx) CoverLine(text string, sz int, bold bool)
- func (d *Docx) CoverLineColored(text string, sz int, hex string, bold bool)
- func (d *Docx) EmbedFont(name string, ttf []byte)
- func (d *Docx) Encode(w io.Writer) error
- func (d *Docx) H1(text string)
- func (d *Docx) H2(text string)
- func (d *Docx) H3(text string)
- func (d *Docx) H4(text string)
- func (d *Docx) Hei1(text string)
- func (d *Docx) Image(data []byte, caption string) bool
- func (d *Docx) Kai2(text string)
- func (d *Docx) P(text string)
- func (d *Docx) PRich(text string)
- func (d *Docx) PageBreak()
- func (d *Docx) SetArtifactImageResolver(fn func(id int64) ([]byte, string, bool))
- func (d *Docx) SetHeaderText(text string)
- func (d *Docx) TOC()
- func (d *Docx) Table(header []string, rows [][]string)
- func (d *Docx) TableFills(header []string, rows [][]string, fills []string)
- type FindingDocxInput
- type Input
- type Run
- type TaskDocxInput
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func FindingFilename ¶
FindingFilename 为「一漏洞一文件」生成安全的 .md 文件名,形如 `critical_SQL注入_#123.md`。去掉路径分隔符与控制字符,避免 zip 内非法路径。
func FindingsCSV ¶
FindingsCSV 把一批 findings 渲染成 CSV(带 UTF-8 BOM,便于 Excel 正确识别中文)。 不含大段 report/evidence 全文,只放摘要类字段;需要全文用 Markdown/JSON 导出。
func FindingsMarkdown ¶
FindingsMarkdown 把一批 findings 整合成一份汇总报告(摘要 + 按严重等级分组, 每条含类别/状态/所属任务/证据/详细报告)。
func FormatTimeUTC ¶ added in v0.3.18
FormatTimeUTC 统一时间展示(UTC,报告里避免时区歧义)。
func SeverityHex ¶ added in v0.3.93
SeverityHex 严重度主色(标题/表格底色用,A2)。
func SeverityHexSoft ¶ added in v0.3.93
SeverityHexSoft 严重度柔和底色(表格行底色用,比主色浅)。
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 (*Docx) Code ¶ added in v0.3.18
Code 等宽代码块(证据/PoC 用):底纹+左竖线、Consolas、保留空白。 整段合并为一个段落(行间用 w:br)——逐行成段会让长 JSON 被拆成上百个 独立段落、视觉散成一片(Kali 用户实测「全堆到一块儿」的主因之一)。
func (*Docx) CoverLineColored ¶ added in v0.4.0
CoverLineColored 带色的封面行(单漏洞封面按严重度着色用)。
func (*Docx) EmbedFont ¶ added in v0.4.4
EmbedFont 把一个 TTF 注册进文档,Encode 时混淆打包。公文三字体 (仿宋_GB2312/楷体_GB2312/方正小标宋_GBK)在新版 Windows、Linux 均不自带, 不嵌入时 Word 静默 fallback 成宋体——行盒与字形全变(用户实测「行距全不对」 的另一半根因)。嵌入后接收方无需装字体即可原样渲染。
func (*Docx) Image ¶ added in v0.4.9
Image 嵌入一张图片并输出「居中图片段落 + 居中图注段落」。 只接受 Go 标准库能解析尺寸的格式(png/jpeg/gif),失败返回 false 由调用方 决定是否降级为文字说明(不因一张坏图让整份报告失败)。
func (*Docx) SetArtifactImageResolver ¶ added in v0.4.9
SetArtifactImageResolver 注入证据附件图片解析器(v0.5.0)。
func (*Docx) SetHeaderText ¶ added in v0.3.94
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(漏洞明细小节)不进目录。
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 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 里
//  会内嵌为图片;nil = 降级为文字说明。
ArtifactImage func(id int64) (data []byte, caption string, ok bool)
}
TaskDocxInput 是总报告的输入。