DelshadH/rechnungsprobe
GitHub: DelshadH/rechnungsprobe
Rechnungsprobe 是一款用于 XRechnung UBL 发票导入器的命令行兼容性测试与模糊测试工具,通过确定性语义变体生成和官方验证器来发现并最小化导入器的兼容性失败。
Stars: 0 | Forks: 0
# 发票核对
**您的发票是合法的。您的导入器呢?**
Rechnungsprobe 是一个用于 XRechnung UBL 导入器的命令行兼容性测试工具。它会创建确定性的语义变体,使用锁定的官方 KoSIT 制品验证每个候选对象,运行指定的导入器,并在声明的操作下将匹配失败的问题缩减为仍然有效的 1-最小化重现。
版本 `0.1.0a1` 是一个经过技术审查的 alpha 候选版本。记录在案的研究关卡(research gate)验证了 10,000 个独特的语义指纹,并在五个开源导入器适配器中的三个里,在本地保留了三项私有兼容性观察结果。公开的承诺并未独立证实它们;在通知维护者之前,细节将保密。Rechnungsprobe 不确立税务、法律、会计或一般合规性方面的正确性。
## 环境要求
- CPython 3.11、3.12 或 3.13。
- 提供可通过 `java` 命令调用的 Java 环境,用于内置的 KoSIT 验证器。
- 提供 Docker,用于推荐的隔离式导入器路径。
唯一发布的配置文件是
`xrechnung-ubl-3.0.2-2026-01-31`,使用 KoSIT 验证器 1.6.2 及 2026-01-31 的配置。
版本、源 URL、许可证和 SHA-256 值均被锁定,并在使用前进行离线验证。
## 安装说明
在所有者授权发布后:
```
python -m pip install rechnungsprobe==0.1.0a1
rechnungsprobe --version
```
如果使用源码检出:
```
python -m pip install --require-hashes -r requirements/ci.txt
python -m pip install --no-deps --no-build-isolation .
```
## 生成并验证语料库
```
rechnungsprobe corpus \
--output corpus \
--count 1000 \
--seed 42
rechnungsprobe corpus-gate \
--output gate \
--count 10000 \
--seed 42
```
语料库生成是通过 Python API 实现的确定性、可恢复和可分片的过程。语料库关卡(corpus gate)会记录语料库根目录、验证根目录、变异器(mutator)和交互覆盖情况、配置文件标识以及执行环境。
验证根目录将每个发票摘要和结果绑定到规范化的 KoSIT 语义报告摘要;易失性报告时间戳和工作区路径被排除在外。
## 测试摘要锁定的容器
```
rechnungsprobe fuzz \
--output run \
--count 20 \
--seed 42 \
--container sha256:<64-hex-local-image-id> \
--input-mode file \
--output-file roundtrip.xml \
--predicate output-invalid \
-- importer-command /input/invoice.xml
```
锁定为 `name@sha256:` 的 Registry 引用也被接受。运行器会禁用网络连接,使用只读根文件系统,丢弃 capabilities,设置 `no-new-privileges`,使用非特权用户,并对进程、内存、CPU、时间、输出、输入和文件增长进行限制。由守护进程拥有的容器会在 Docker 客户端退出或超时后被显式终止、移除并检查。
断言(Predicates)包括 `crash`、`timeout`、有界 stdout `json`、`output-invalid` 以及声明的 `field-loss`。输出断言需要 `--output-file`;字段丢失还需要一个或多个 `--field` 值。
## 受信任的本地执行
本地命令是非隔离的,可以访问宿主机的文件系统和网络。它们需要显式的当前用户权限:
```
rechnungsprobe fuzz \
--trusted-local \
--output run \
--predicate crash \
-- python importer.py
```
Rechnungsprobe 使用参数向量而不是 shell,清理继承的环境变量,将常规文件参数暂存到工作区中,并应用资源限制。这些措施并不能将本地执行转化为沙盒环境。
## 验证并重放
```
rechnungsprobe verify finding.rechnungsprobe
rechnungsprobe replay finding.rechnungsprobe
```
`verify` 严格不执行任何代码。它会检查有界归档、成员顺序、哈希值、规范化报告、安全的 XML、语义指纹、配置文件、断言和目标元数据。
容器胶囊(capsule)通过有界的无网络容器路径进行重放。默认情况下,胶囊描述的本地命令永远不会执行。请提供受信任的替代命令:
```
rechnungsprobe replay finding.rechnungsprobe \
--replacement-command python reviewed-importer.py
```
可选的
`--unsafe-use-capsule-local-command` 参数被刻意设计得非常显眼,它会在没有隔离的情况下执行胶囊描述的宿主机命令。
退出状态 `0` 表示干净的活动或重放成功,`1` 表示活动找到了匹配项或重放不再匹配,`2` 表示操作或安全错误。
## 证据与局限性
- [基准测试](docs/benchmark.md)
- [方法论](docs/methodology.md)
- [安全模型](docs/security-model.md)
- [发现格式](docs/finding-format.md)
- [兼容性策略](docs/compatibility.md)
- [质量计划](docs/quality-plan.md)
此 alpha 版本仅涵盖一个 XRechnung UBL 配置文件。它不包含 GUI、Peppol 传输、发票编制、ZUGFeRD/PDF 处理、税务建议和生产级会计连接器。这里的极简性是在 `invoice-node-value-v1` 下的 1-极简(1-minimal),而非全局极简。
## 开发说明
```
python -m pytest
python -m ruff check .
python -m mypy
python -m build --no-isolation
```
基于 Apache-2.0 许可证。请参阅 [SUPPORT.md](SUPPORT.md) 和 [SECURITY.md](SECURITY.md)。
标签:JS文件枚举, Python, XRechnung, 兼容性测试, 无后门, 测试工具, 电子发票, 请求拦截, 逆向工具