Wykorzystuje dyspozycję treści w nagłówku odpowiedzi HTTP


127

Zauważyłem, że następujący kod asp.net jest bardzo przydatny podczas udostępniania plików z bazy danych:

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

Dzięki temu użytkownik może zapisać plik na swoim komputerze, a następnie zdecydować, jak go użyć, zamiast próbować użyć tego pliku przez przeglądarkę.

Jakie inne rzeczy można zrobić z nagłówkiem odpowiedzi dyspozycji dyspozycji treści?


23
Zwróć uwagę, że przykładowy kod zostanie uszkodzony, jeśli nazwa pliku zawiera spacje lub znaki spoza zestawu ASCII. Aby uzyskać więcej informacji, zobacz RFC 6266.
— Julian Reschke

@JulianReschke, A co ze znakami ASCII, które są uważane za niedrukowalne? ( 0do 0x1F)
— Pacerier

Przeczytaj RFC 6266 (pomijając fakt, że użycie ich w nazwie pliku byłoby złym pomysłem; odbiorcy i tak prawdopodobnie je wyrzucą)
— Julian Reschke

1
Możesz użyć spacji, Unicode itp., Jeśli użyjesz podwójnych cudzysłowów wokół nazwy. kb.mozillazine.org/…
— Tony BenBrahim

1
@Ronnie Overby Co to jest dyspozycja treści?
— divy3993

Odpowiedzi:


84

Należy zauważyć, że RFC 6266 zastępuje dokumenty RFC wymienione poniżej. Sekcja 7 przedstawia niektóre z powiązanych kwestii bezpieczeństwa.

Uprawnienia w nagłówku dyspozycji do treści to RFC 1806 i RFC 2183. Ludzie również wymyślili hakowanie dysponowania treścią. Należy zauważyć, że nagłówek dyspozycji treści nie jest częścią standardu HTTP 1.1.

Standard HTTP 1.1 ( RFC 2616 ) wspomina również o możliwych skutkach ubocznych zabezpieczeń związanych z rozmieszczaniem treści:

15.5 Kwestie dotyczące dyspozycji treści

RFC 1806 [35], z którego pochodzi często implementowany
nagłówek Content-Disposition (patrz sekcja 19.5.1) w HTTP, ma szereg bardzo
poważnych względów bezpieczeństwa. Dyspozycja treści nie jest częścią
standardu HTTP, ale ponieważ jest szeroko wdrażana,
dokumentujemy jej użycie i ryzyko dla implementujących. Szczegółowe informacje można znaleźć w dokumencie RFC 2183 [49]
(który aktualizuje RFC 1806).


31
Obecnie organem jest RFC 6266.
— Julian Reschke

@JulianReschke, Jak działają „zastępuje” i „aktualizacje”? Czy nowsze wersje, takie jak RFC 7230, również powodują, że RFC 6266 jest przestarzały?
— Pacerier,

@Pacerier - dlaczego RFC 7230 miałby wpływać na RFC 6266?
— Julian Reschke

@Julian, 1) Od 6266 aktualizacji 2616, 2) 2616 stało się przestarzałe przez 723X, 3) Czy 6266 również jest uważane za przestarzałe?
— Pacerier,

5
Cóż, RFC 5678 tutaj, RFC 9876 tam. Jeśli nastawienie treści jest źle widziane, czego powinniśmy użyć zamiast tego?
— Csaba Toth

25

Wygląda na to, że nagłówek Content-Disposition został pierwotnie utworzony dla poczty e-mail, a nie dla sieci. ( Link do odpowiedniego RFC .)

Domyślam się, że przeglądarki internetowe mogą na nie reagować

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

podczas zapisywania, ale nie jestem pewien.



5

Dla użytkowników asp.net platforma .NET udostępnia klasę do tworzenia nagłówka dyspozycji zawartości: System.Net.Mime.ContentDisposition

Podstawowe użycie:

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
Uwaga, ta klasa nie jest zgodna z RFC 6266 . Wykonuje kodowanie UTF-8 base64 w filenameparametrze, zamiast używać filename*parametru z kodowaniem RFC 5987 . Nie ma sposobu, aby wyprowadzić lub użyć narzędzi fx, aby to naprawić, prawie wszystko jest nienaruszalne lub wewnętrzne ... .Net fx wciąż ma długą drogę do nauczenia się otwartości i rozszerzalności. W MVC 5.2 FileResultklasa radzi sobie trochę lepiej filename, ale nie obsługuje innych parametrów, inlinea większość jej implementacji jest również wewnętrzna ...
— Frédéric

2

Ten nagłówek jest zdefiniowany w RFC 2183 , więc będzie to najlepsze miejsce do rozpoczęcia czytania.

Dozwolone wartości to wartości zarejestrowane przez Internet Assigned Numbers Authority (IANA); ich rejestr wartości należy traktować jako ostateczne źródło.


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.