Usi della disposizione dei contenuti in un'intestazione di risposta HTTP


127

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?


23
Si noti che il codice di esempio si interromperà se il nome file contiene spazi bianchi o caratteri non ASCII. Vedere RFC 6266 per ulteriori informazioni.
Julian Reschke,

@JulianReschke, Che dire dei caratteri ASCII considerati non stampabili? ( 0a 0x1F)
Pacerier,

Leggi RFC 6266 (a parte il fatto che sarebbe una cattiva idea usare in un nome file; è probabile che i destinatari li buttino via comunque)
Julian Reschke,

1
È possibile utilizzare spazi bianchi, Unicode ecc. Se si utilizzano virgolette doppie attorno al nome. kb.mozillazine.org/…
Tony BenBrahim

1
@Ronnie Overby Che cos'è la disposizione dei contenuti?
divy3993,

Risposte:


84

Si noti che RFC 6266 sostituisce gli RFC indicati di seguito. La sezione 7 illustra alcuni dei problemi di sicurezza correlati.

L'autorità sull'intestazione della disposizione del contenuto è RFC 1806 e RFC 2183. Le persone hanno anche ideato l' hacking della disposizione del contenuto. È importante notare che l'intestazione 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 della disposizione dei contenuti:

15.5 Problemi di smaltimento dei contenuti

RFC 1806 [35], da cui
deriva l'intestazione Content-Disposition (vedi sezione 19.5.1) spesso implementata in HTTP, presenta una serie di
considerazioni di sicurezza molto serie. La disposizione dei contenuti non fa parte dello
standard HTTP, ma poiché è ampiamente implementata, ne stiamo
documentando l'utilizzo e i rischi per gli implementatori. Vedere RFC 2183 [49]
(che aggiorna RFC 1806) per i dettagli.


31
Oggi l'autorità è RFC 6266.
Julian Reschke,

@JulianReschke, come funzionano "sostituisce" e "aggiornamenti"? Le versioni più recenti come RFC 7230 rendono anche RFC 6266 obsoleto?
Pacerier,

@Pacerier: perché RFC 7230 dovrebbe influire su RFC 6266?
Julian Reschke,

@Julian, 1) Poiché gli aggiornamenti 6266 2616, 2) 2616 sono stati resi obsoleti da 723X, 3) Quindi, 6266 è anche considerato obsoleto?
Pacerier,

5
Bene, RFC 5678 qui, RFC 9876 lì. Se la disposizione dei contenuti è disapprovata, cosa dovremmo usare invece?
Csaba Toth,

25

Bene, sembra che l'intestazione Content-Disposition sia stata originariamente creata per la posta elettronica, non per il web. ( Collegamento a RFC pertinente .)

Immagino che i browser web possano rispondere

Response.AppendHeader("content-disposition", "inline; filename=" + fileName);

quando si salva, ma non sono sicuro.



5

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());

1
Attenzione, questa classe non è conforme a RFC 6266 . Fa la codifica UT64-base64 nel filenameparametro, invece di usare il filename*parametro con codifica RFC 5987 . Non c'è modo di ricavare o utilizzare i programmi di utilità fx per risolverlo, quasi tutto è non sostituibile o interno ... .Net fx ha ancora molta strada nell'apprendimento dell'apertura e dell'estensibilità. In MVC 5.2, la FileResultclasse fa un po 'meglio filename, ma non gestisce altri parametri poiché inlinee la maggior parte della sua implementazione è anche interna ...
Frédéric

2

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.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.