文本与字符串操作
文本处理是安全研发中最高频的工作:解析报文、提取参数、清洗数据、生成 payload,几乎都离不开字符串操作。Yaklang 把这部分能力拆成几个互补的内置库,本章按"从通用到专用、从结构化到生成式"的顺序逐一展开。
验证约定
本章所有示例都可直接用 yak file.yak 运行。沿用上一章的约定:assert 负责确定性硬校验,println 负责打印用户可直接观察的结果,配套的校验脚本会捕获标准输出并核对 STDOUT 声明确实被打印。
本章目录
- 基础内置库 str 手册:最常用的字符串库,覆盖判断、查找、切割、替换、修剪、大小写与安全场景下的提取函数。
- 正则表达式 re / re2:基于 RE2 的正则匹配、提取、替换与分组捕获。
- XML / HTML 解析 xhtml / xpath:用 XPath 在 HTML/XML 文档中定位与抽取节点。
- JSON 处理与流式操作:JSON 序列化/反序列化、JSONPath 取值,以及大文本/流式 JSON 抽取。
- 模糊生成与随机字符串:用
regen按正则反向生成、用fuzz/随机函数批量造数据与 payload。
选择哪个库
| 场景 | 推荐 | 说明 |
|---|---|---|
| 子串判断/切割/替换/修剪 | str | 通用字符串操作的首选 |
| 复杂模式匹配与捕获 | re / re2 | 正则提取参数、清洗文本 |
| 从网页结构中抽取 | xpath + xhtml | 按节点路径精确定位 |
| 接口数据读写 | json | 结构化序列化与按路径取值 |
| 大文本/不完整 JSON 抽取 | str.ExtractJson / jsonstream | 容错地从噪声中捞 JSON |
| 批量生成测试串/payload | regen / fuzz | 按规则反向生成字符串 |