Usi della disposizione dei contenuti in un'intestazione di risposta HTTP
-
06-07-2019 - |
Domanda
Ho trovato il seguente codice asp.net molto utile quando si servono file da un database:
Response.AppendHeader("content-disposition", "attachment; filename=" + fileName);
Ciò consente all'utente di salvare il file sul proprio computer e quindi di decidere come utilizzarlo, anziché il browser che tenta di utilizzare il file.
Quali altre cose si possono fare con l'intestazione della risposta di disposizione del contenuto?
Soluzione
Nota che RFC 6266 sostituisce gli RFC indicati di seguito. Sezione 7 delinea alcuni dei problemi di sicurezza correlati.
L'autorità nell'intestazione di disposizione del contenuto è RFC 1806 e RFC 2183. Le persone hanno anche ideato hacking di content-disposition. È importante notare che l'intestazione di content-disposition non fa parte dello standard HTTP 1.1.
Lo standard HTTP 1.1 ( RFC 2616 ) menziona anche i possibili effetti collaterali della sicurezza di disposizione dei contenuti:
15.5 Problemi di smaltimento dei contenuti
RFC 1806 [35], da cui spesso implementato Content-Disposition
(vedi sezione 19.5.1) l'intestazione in HTTP è derivato, ha un certo numero di
gravi considerazioni di sicurezza. La disposizione dei contenuti non fa parte di
lo standard HTTP, ma dal momento che lo è ampiamente implementato, siamo
documentandone l'uso e i rischi implementatori. Vedi RFC 2183 [49]
(che aggiorna RFC 1806) per i dettagli.
Altri suggerimenti
Bene, sembra che l'intestazione Content-Disposition sia stata originariamente creata per la posta elettronica, non per il web. ( Link alla RFC pertinente .)
Suppongo che i browser web possano rispondere
Response.AppendHeader("content-disposition", "inline; filename=" + fileName);
durante il salvataggio, ma non sono sicuro.
Fare riferimento a RFC 6266 (Uso del campo di intestazione di disposizione del contenuto nel protocollo di trasferimento ipertestuale (HTTP)) http://tools.ietf.org/html/rfc6266
Per gli utenti asp.net, il framework .NET fornisce una classe per creare un'intestazione di disposizione del contenuto: System.Net.Mime.ContentDisposition
Utilizzo di base:
var cd = new System.Net.Mime.ContentDisposition();
cd.FileName = "myFile.txt";
cd.ModificationDate = DateTime.UtcNow;
cd.Size = 100;
Response.AppendHeader("content-disposition", cd.ToString());
Questa intestazione è definita in RFC 2183 , quindi sarebbe il posto migliore per iniziare a leggere.
I valori consentiti sono quelli registrati presso Internet Assigned Numbers Authority (IANA); il loro registro dei valori dovrebbe essere visto come la fonte definitiva.
Pensato che questo articolo KB sulla sezione di supporto Microsoft sia correlato alla discussione qui Come aumentare una finestra di dialogo di download di file per un tipo mime noto