7.5.6. Valori di campo non-List (Non-List Field Values)
7.5.6. Valori di campo non-List (Non-List Field Values)
Quando un campo HTTP compare più volte in un singolo messaggio, questi valori devono essere combinati in un'unica stringa su una riga da includere nella base della firma HTTP, come descritto nella Sezione 2.5. Non tutti i campi HTTP possono essere combinati in un singolo valore in questo modo e restare un valore valido per il campo. Ai fini della generazione della base della firma, il valore del componente del messaggio non è mai destinato a essere riletto dalla stringa della base della firma o usato nell'applicazione. Pertanto, si considera buona pratica trattare l'algoritmo di generazione della base della firma separatamente dall'elaborazione dei valori dei campi da parte dell'applicazione, in particolare per i campi noti per avere questa proprietà. Se i valori dei campi che vengono firmati non sono validi, anche il messaggio firmato dovrebbe essere rifiutato.
Se un campo HTTP consente virgole non quotate all'interno dei suoi valori, combinare più valori di campo può portare a una situazione in cui due messaggi semanticamente diversi producono la stessa riga in una base della firma. Ad esempio, si consideri il seguente campo di intestazione ipotetico con una virgola interna nella sua sintassi, qui usato per definire due elenchi separati di valori:
Example-Header: value, with, lots Example-Header: of, commas
Per questo campo di intestazione, inviare tutti questi valori come singolo valore di campo produce un singolo elenco di valori:
Example-Header: value, with, lots, of, commas
Entrambi questi messaggi creerebbero la seguente riga nella base della firma:
"example-header": value, with, lots, of, commas
Poiché due input semanticamente distinti possono creare lo stesso output nella base della firma, occorre particolare cura quando si gestiscono tali valori.
In particolare, il campo Set-Cookie [COOKIE] definisce una sintassi interna che non è conforme alla sintassi List fornita in [STRUCTURED-FIELDS]. In particolare, alcune porzioni consentono virgole non quotate e il campo è tipicamente inviato come più righe di campo separate con valori distinti quando si inviano più cookie. Quando più campi Set-Cookie sono inviati nello stesso messaggio, non è generalmente possibile combinarli in una singola riga e poter analizzare e usare i risultati, come discusso in [HTTP], Sezione 5.3. Pertanto, tutti i cookie devono essere elaborati dai loro valori di campo separati, senza essere combinati, mentre la base della firma deve essere elaborata dal valore combinato speciale generato solo a questo scopo. Se il valore del cookie non è valido, il messaggio firmato dovrebbe essere rifiutato, poiché questo è un possibile attacco di padding come descritto nella Sezione 7.5.7.
Per affrontare ciò, un'applicazione può scegliere di limitare la firma di campi problematici come Set-Cookie, ad esempio includendo il campo in una firma solo quando è presente un singolo valore di campo e i risultati sarebbero non ambigui. Occorre simile cautela con tutti i campi che potrebbero avere mappature non deterministiche nella base della firma. I firmatari possono anche usare il parametro bs per proteggere tali campi, come descritto nella Sezione 2.1.3.