- Verschifft
- 23. September 2026 um 02:35 UTC
- Autor
- Kamo
- Ausschuss
- d1a8762
/download die gesamte Datei in ein Byte[] durch ImageService.downloadDocument vor Servieren; /bulk-download das gesamte ZIP (oder zusammengeführte PDF) als ein Byte[] in DocumentPrepareService vor der Antwort; Uploads laufen bis zu 3 GB gegen diesen Dienst 1,4 GB Haufen, und /bulk-download's 100-id Kappe hatte keine Größenbegrenzung dahinter 100 ungedeckelte Dokumente könnte fragen Sie nach Hunderten von Gigabyte in einer einzigen Anfrage. buildZip schrieb auch Img.fileName direkt in ein ZipEntry ohne Desinfektion, so dass ein Dokument umbenannt, um so etwas wie **************** (DateiName ist benutzergesteuert - freier Text, geändert über /update/filename/{imgId') erstellte ein Archiv, dessen Eintrag von einem Extraktor geöffnet wurde, der nicht sich vor Zip-Slip schützen, schreibt außerhalb des Zielverzeichnisses, auf welchem Betriebssystem auch immer Ausziehen. - /download streamt jetzt über MinIOStorageService.openRange + StreamingResponseBody, genau wie /stream bereits getan, anstatt die ganze Datei zu puffern. (Drops ImageService.downloadDocument's dl-first/dl-last buchhalterische Nebenwirkung - tot von grep bestätigt: nichts im Java-Hinterend liest immer gelesen Img.dlFirstDate/dlLastDate, schreibt sie immer nur. Das separate ImgLogDownload Audit Zeile über recordDownloadEvent, das IST, von der Download-History-Panel zurückgelesen zu werden, ist unverändert.) - /bulk-download-Dedupes forderten IDs vor der 100-id-Kappe und der pro-item-Arbeit. - /bulk-download verweigert direkt (400), sobald die ausgewählten Dokumente kombiniert Img.fileSize übergeben 500 MB, anstatt den Merge/Reißverschluss zu versuchen und eine OOM zu riskieren - abgelehnt, nicht stillschweigend Abgeschnitten, denn Vollständigkeit ist der Punkt eines Bulk EXPORT. - buildZip säinigt jeden Eintragsnamen zu seinem endgültigen Pfadsegment (Spaltung auf beiden / und \, seit der Extraktor kann auf einem Betriebssystem sein, das dieser Server nicht steuert und die Reißverschlusslücke schließt. NOT DONE, berichtet als bekannte Lücke: buildZip/mergePdfs bauen ihr Ergebnis immer noch als ein edes[] vor dem Beantworten statt Streaming es direkt auf die HTTP-Antwort - die 500 MB Kappe jetzt begrenzt, dass an eine bekannte Decke (von unbegrenzt), aber es ist nicht beseitigt. Sie umzuwandeln in einen von Anrufern gelieferten OutputStream würde /bulk-download-Stream auch lassen; verschoben, weil es Änderungen der öffentlichen Signaturen von DocumentPrepareService, die in drei bestehende Testdateien einfließen (Mocks stub the byte[]-returning methods), für eine MEDIUM-Severity, bereits gedeckelt Rest - ein absichtlicher Aufruf, nicht ein Versehen. Neue Tests: ************ (Cusw. für sanizeZipEntryName) und drei Fälle zu ImagingControllerMediaAssocTest hinzugefügt (Streaming-nicht-Puffering, id dedupe, die Größenkappe). Mutation-geprüft: Reverting ImagingController.java zu seinem vorfixen Zustand dreht sich die drei neuen Controller-Fälle rot; reverting sanizeZipEntryName zu "Return Name;" dreht 5 der 7 zip-slip Fälle rot (der 6., ein bereits sicherer gewöhnlicher Dateiname, ist so oder so nicht betroffen). Volle Suite: 741 Tests grün (war 731; +10 neu).
