Una casella di posta di reporting è un limite di input, non un'origine dati attendibile. Un allegato può essere malformato, sovradimensionato o intenzionalmente costoso da elaborare. Costruire il percorso di inserimento in modo che l'accettazione del trasporto non significhi automaticamente l'accettazione del parser e l'accettazione del parser non significhi automaticamente che le attestazioni del report sono affidabili.
RFC 9990 descrive la consegna XML aggregata e avverte dell'esaurimento delle risorse e di informazioni false. La pipeline seguente è una raccomandazione di implementazione, non un'affermazione secondo cui un particolare prodotto fornisce già questi controlli.
Isolare l'assunzione dall'analisi
Riferimenti: RFC 9990 §8.1, RFC 9990 §8.2.
Assegnare un identificatore di arrivo e conservare un riferimento limitato e con accesso controllato all'allegato originale. Registra le sue dimensioni, l'impronta digitale, l'ora di arrivo e i metadati di trasporto. Applica controlli sulle risorse per coda e per origine in modo che un flusso non possa monopolizzare i lavoratori. Trattare l'indirizzo del mittente o il nome di file familiare come prova insufficiente di autenticità.
Mantieni il lavoratore con privilegi minimi e separato dalle credenziali del database utilizzate per pubblicare i parametri finali. Impedisce al contenuto dell'allegato di determinare comandi eseguibili o percorsi di destinazione. Gli input non riusciti appartengono a un percorso diagnostico controllato, non alle pagine di errore pubbliche o ai log senza restrizioni.
Decompressione vincolata durante l'esecuzione
Riferimenti: RFC 9990 §3.5.2, RFC 9990 §8.1.
RFC 9990 specifica XML e consiglia la compressione GZIP. Rileva il formato supportato e rifiuta i contenitori non supportati in base a una politica di compatibilità documentata. Se i formati di archivio più vecchi sono supportati deliberatamente, rivedi i rischi aggiuntivi relativi all'estrazione e al percorso invece di trattarli come equivalenti a un singolo flusso XML.
Imposta i limiti per byte compressi, byte espansi, tempo di elaborazione trascorso, memoria, conteggio dei record e concorrenza. Applica i limiti di dimensione estesa durante la lettura, non dopo aver allocato l'intero output. Le dichiarazioni sulle dimensioni all'interno di un contenitore non sostituiscono la misurazione della produzione effettiva. Interrompe l'elaborazione quando viene raggiunto un limite configurato.
Analizzare senza funzionalità non necessarie
Riferimenti: RFC 9990 §3.1.1, RFC 9990 §8.1.
Riferimento: Prevenzione di entità esterne OWASP XML, Guida generale.
Utilizzare un parser mantenuto con la sua configurazione di runtime effettiva rivista. Disabilita i tipi di documenti non necessari, la risoluzione di entità esterne, XInclude e il recupero di risorse esterne. Tratta le impostazioni di protezione avanzata non supportate come errori di configurazione e non come avvisi da ignorare. Utilizzare schemi locali attendibili dove è richiesta la convalida anziché seguire i percorsi dello schema forniti da un allegato. Applica limiti alla nidificazione e alle dimensioni del testo, nonché ai byte totali.
Convalidare la struttura del report prevista e la semantica dei campi separatamente dalla corretta formattazione dell'XML. Un documento può essere ben formato ma inutilizzabile come file DMARC rapporto. Preservare il motivo del rifiuto senza tradurre un errore del parser in un verdetto di autenticazione della posta.
Utilizzare un piccolo dispositivo delimitato
Configurazione di staging illustrativa: consente un input compresso di 64 KiB e un output espanso di 256 KiB per un addetto al test volutamente piccolo. Un innocuo dispositivo GZIP si espande fino a 300 KiB di testo di test ripetitivo. Il risultato previsto è un arresto di dimensioni espanse prima della completa materializzazione, nessuna riga del report impegnata e una diagnostica contenente il limite e il riferimento di input.
Questi numeri sono limiti dimostrativi, non consigli sul dimensionamento della produzione. Testare un piccolo report valido subito dopo per verificare che il lavoratore rimanga utilizzabile. Registrare le misurazioni effettive prima di dichiarare che il controllo funziona. Questo articolo descrive il comportamento di gestione temporanea richiesto, non un test del tenant eseguito. Il pacchetto di revisione registra anche una nuova dimostrazione GZIP Python limitata: rileva l'espansione oltre il limite di 256 KiB con al massimo un byte di rilevamento aggiuntivo, quindi gestisce con successo un piccolo flusso di testo XML valido. Ciò dimostra solo questa protezione di decompressione locale, non il rafforzamento del parser, l'isolamento della memoria o il comportamento del database.
Effettua il commit solo dei dati convalidati
Riferimenti: RFC 9990 §3.5.4, RFC 9990 §9.2.
Metti in scena i record normalizzati e completa l'importazione in modo atomico dopo la convalida e la gestione dei duplicati. Un file interrotto non dovrebbe lasciare un conteggio parziale nell'analisi della produzione. Rendi il replay idempotente e mantieni la decisione che collega gli arrivi ripetuti al report conteggiato.
Monitora i byte rifiutati, il tempo di elaborazione, la durata della coda e i risultati del ripristino. Le segnalazioni legittime possono superare i limiti locali, quindi fornisci un percorso di revisione controllato anziché aumentare automaticamente ogni limite. Chiudere la progettazione operativa con proprietari nominati per l'assunzione, la manutenzione del parser, la conservazione dello storage e la risposta agli incidenti.