aboutsummaryrefslogtreecommitdiffstats
path: root/docs/specs/2026-09-09-report.md
diff options
context:
space:
mode:
authorDanilo M. <danix@danix.xyz>2026-09-09 19:48:22 +0200
committerDanilo M. <danix@danix.xyz>2026-09-09 19:48:22 +0200
commit57dc93c3069ccac583533f4f2d4f9cbc2720c73e (patch)
treecef3411c3fbb3d3289a3b35f9a3c55adf34cfebc /docs/specs/2026-09-09-report.md
parent0fd9f1632d25142323df419e189c46c8068694bf (diff)
downloadabusectl-57dc93c3069ccac583533f4f2d4f9cbc2720c73e.tar.gz
abusectl-57dc93c3069ccac583533f4f2d4f9cbc2720c73e.zip
feat: assemble the RFC 5965 report documentHEADmaster
Three parts and no message/rfc822: the original carries every identifier the first property keeps out, and text/rfc822-headers is the standard's own answer for a report that cannot include the message. The third part filters the manifest's headers against the same whitelist parse.report_headers() applies, rather than trusting it. The structural argument is that report cannot disclose what it was never given, and a manifest is a file the user edits: that is exactly a way it can be given a To. parse still decides; this refuses to publish what it did not decide for. A header value is attacker-supplied free text the spec keeps deliberately, so a newline in a Subject forges a header line in a part read entirely as headers. RFC 2047 turns the break into a fold instead, and a parser unfolds it back to one header with the value intact. Applied only when a value carries something unsafe, since encoding every header costs the desk the legibility this part exists for. From is built with headerregistry.Address: "Example Consulting, Ltd" through an f-string parses back as two addresses, the first a bogus addr-spec with no domain, so a desk's reply reaches nobody. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Xj1ayFRSUQ2u7cwb3S4axE
Diffstat (limited to 'docs/specs/2026-09-09-report.md')
0 files changed, 0 insertions, 0 deletions