fix: Robustheits-Luecken aus zweitem, unabhaengigem Sicherheitsaudit behoben
Ein zweiter, unabhaengiger Audit-Durchlauf (frischer Blick, keine Vorkenntnis meiner eigenen Fixes) bestaetigte alle bisherigen Fixes als korrekt verdrahtet und fand 3 LOW-severity Robustheitsluecken - keine davon war ausnutzbar, aber alle sind jetzt behoben: - HarvestsService.create/ExtractionsService.create pruefen jetzt, dass referenzierte colonyIds/harvestIds tatsaechlich existieren, bevor die Transaktion laeuft - vorher fuehrte eine unbekannte Id zu einem ungefangenen 500 mit rohem Prisma-Fehler statt einer sauberen 400. - Etiketten-Bildelemente durchlaufen jetzt denselben Magic-Byte-Check wie Avatar-/Dokument-Uploads, statt pdfkits Bildparser ungepruefte Bytes zu uebergeben. - Webhook-Secret-Redaktion im Audit-Log nutzt jetzt explizites delete statt sich auf Prismas JSON-Serialisierung zu verlassen, die undefined-Werte verwirft (fragil, falls sich die Serialisierung mal aendert). Co-Authored-By: Claude Sonnet 5 <[email protected]>
This commit is contained in:
1 parent
f57cffe6a8
commit
4bd7e9791a
7 files changed
+173
-7
No files matched your search
@@ -3,6 +3,7 @@ import PDFDocument from 'pdfkit';
|
||||
import * as QRCode from 'qrcode';
|
||||
import { PrismaService } from '../prisma/prisma.service';
|
||||
import { AuditLogService } from '../audit/audit-log.service';
|
||||
import { matchesFileSignature } from '../common/file-signature';
|
||||
import { LabelTemplate } from '../../generated/prisma';
|
||||
import { CreateLabelTemplateDto } from './dto/create-label-template.dto';
|
||||
import { UpdateLabelTemplateDto } from './dto/update-label-template.dto';
|
||||
@@ -62,7 +63,13 @@ function dataUrlToBuffer(dataUrl: string): Buffer | null {
|
||||
if (!match) {
|
||||
return null;
|
||||
}
|
||||
return Buffer.from(match[2], 'base64');
|
||||
const mimeType = match[1] === 'png' ? 'image/png' : 'image/jpeg';
|
||||
const buffer = Buffer.from(match[2], 'base64');
|
||||
// Same magic-byte check as every other upload path (avatar, documents) -
|
||||
// a template's embedded image is only ever entered by a label-template
|
||||
// editor (label-templates:create/update), but there's no reason to hand
|
||||
// pdfkit's image parser bytes that don't match what they claim to be.
|
||||
return matchesFileSignature(buffer, mimeType) ? buffer : null;
|
||||
}
|
||||
|
||||
@Injectable()
|
||||
|
||||
Reference in new issue
Block a user