DOC-02: Dublettenpruefung auf eigene Dokumente des Aufrufers beschraenkt #366

Closed
patrick wants to merge 0 commits from fix/doc-02-dublettenpruefung-sichtbarkeits-scope into main
pull from: fix/doc-02-dublettenpruefung-sichtbarkeits-scope
Owner

P1-Fund aus DMS-Vergleichsreview (Fable 5.1): Pruefsummensuche vor Dokumentanlage lief global, DuplicateError gab DocumentID/RevisionID fremder, sonst unsichtbarer Dokumente preis (Existenz-Oracle). Suche jetzt auf documents.created_by = sess.CreatedBy beschraenkt.

Test plan

  • go test ./internal/upload/... -run TestCompleteUpload -v auf Host 204 gegen migrierte Testdatenbank: 7/7 PASS
  • Neuer Test TestCompleteUpload_DuplicateCheckIsScopedToOwnDocuments: zwei Nutzer, identischer Dateiinhalt, je eigenes Dokument statt Verweis auf fremdes
  • Review/Merge durch Repo-Verantwortlichen

🤖 Generated with Claude Code

P1-Fund aus DMS-Vergleichsreview (Fable 5.1): Pruefsummensuche vor Dokumentanlage lief global, DuplicateError gab DocumentID/RevisionID fremder, sonst unsichtbarer Dokumente preis (Existenz-Oracle). Suche jetzt auf documents.created_by = sess.CreatedBy beschraenkt. ## Test plan - [x] go test ./internal/upload/... -run TestCompleteUpload -v auf Host 204 gegen migrierte Testdatenbank: 7/7 PASS - [x] Neuer Test TestCompleteUpload_DuplicateCheckIsScopedToOwnDocuments: zwei Nutzer, identischer Dateiinhalt, je eigenes Dokument statt Verweis auf fremdes - [ ] Review/Merge durch Repo-Verantwortlichen 🤖 Generated with [Claude Code](https://claude.com/claude-code)
patrick added 1 commit 2026-10-19 03:21:37 +02:00
DOC-02: Dublettenpruefung auf eigene Dokumente des Aufrufers beschraenkt
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (pull_request) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Canceled after 0s
CI / Web (dms-browser) (pull_request) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (push) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Canceled after 0s
CI / Web (dms-browser) (push) Canceled after 0s
CI / Web (pdf-viewer) (push) Canceled after 0s
CI / Web (shl) (push) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (push) Canceled after 0s
CI / Web (pdf-viewer) (pull_request) Canceled after 0s
CI / Web (shl) (pull_request) Canceled after 0s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (pull_request) Canceled after 0s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Canceled after 0s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Canceled after 0s
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
50585df0ec
Fable-5.1-Vergleichsreview gegen paperless-ngx/Alfresco/Docspell/ecoDMS
fand: die Pruefsummensuche vor dem Anlegen eines neuen Dokuments lief
global ueber alle Dokumente des Mandanten. Ein Treffer gab per
DuplicateError DocumentID/RevisionID eines fremden, fuer den Aufrufer
sonst unsichtbaren Dokuments preis (Existenz-Oracle), bevor irgendeine
Zugriffsrechtepruefung greifen konnte.

Fix: Suche zusaetzlich auf documents.created_by = sess.CreatedBy
eingeschraenkt, konsistent mit dem aktuellen eigentuemerbasierten
Sichtbarkeitsmodell (internal/authz, siehe SEC-08 fuer die geplante
Erweiterung um echte Objektrechte). Zwei Nutzer mit identischem
Dateiinhalt bekommen jetzt je ein eigenes Dokument statt eines
ueberraschenden Verweises auf das Dokument der anderen Person.

Echter Testlauf auf Host 204 gegen migrierte Testdatenbank:
go test ./internal/upload/... -run TestCompleteUpload -v
Alle 7 Tests PASS, inkl. neuem
TestCompleteUpload_DuplicateCheckIsScopedToOwnDocuments.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
patrick added 1 commit 2026-10-19 03:26:10 +02:00
DOC-01: MIME-Sniff gegen tatsaechlichen Inhalt vor Verschluesselung/Speicherung
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (pull_request) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (push) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Canceled after 0s
CI / Web (dms-browser) (push) Canceled after 0s
CI / Web (pdf-viewer) (push) Canceled after 0s
CI / Web (shl) (push) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Canceled after 0s
CI / Web (dms-browser) (pull_request) Canceled after 0s
CI / Web (pdf-viewer) (pull_request) Canceled after 0s
CI / Web (shl) (pull_request) Canceled after 0s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (push) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (pull_request) Canceled after 0s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Canceled after 0s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Canceled after 0s
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Canceled after 0s
0d524fc714
Fable-5.1-Vergleichsreview: die Positivlisten-Pruefung lief bisher nur
gegen die vom Client bei StartUpload angekuendigte Typangabe
(validate.go ValidateMimeType); ein als "application/pdf" deklariertes,
tatsaechlich beliebiges Archiv/Binary wurde erst beim spaeteren
Ausliefern per Magic-Bytes erkannt (documentapi/handler.go), nicht vor
der Aufnahme.

Fix: Complete() liest die ersten 512 Bytes aus dem Staging-Reader, prueft
sie per http.DetectContentType gegen dieselbe Positivliste, BEVOR
Verschluesselung/Storage/DB-Eintrag passieren. Der Praefix wird fuer
Pruefsumme/Verschluesselung wieder vorangestellt (kein Byteverlust).

Echter Testlauf auf Host 204 gegen migrierte Testdatenbank:
go test ./internal/upload/... -v -> 12/12 PASS, davon neu:
TestCompleteUpload_ContentMismatchingDeclaredMimeTypeIsRejected (ZIP-Inhalt
mit deklariertem application/pdf wird jetzt abgelehnt). Ausserdem
go build ./... fuer das gesamte dms-Modul lief fehlerfrei durch.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Author
Owner

Bereits direkt per merge_all_prs.sh in main gemergt und gepusht. Schliesse PR, da Gitea den direkten Push nicht automatisch als Merge erkennt.

Bereits direkt per merge_all_prs.sh in main gemergt und gepusht. Schliesse PR, da Gitea den direkten Push nicht automatisch als Merge erkennt.
patrick closed this pull request 2026-10-19 12:30:23 +02:00

Pull request closed

This pull request cannot be reopened because the branch was deleted.
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: scripte/nexarch#366