HTTP応答ヘッダーでのcontent-dispositionの使用


127

次のasp.netコードは、データベースからファイルを提供するときに非常に役立つことがわかりました。

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

これにより、ユーザーはファイルをコンピューターに保存し、ブラウザーがファイルを使用する代わりに、ファイルの使用方法を決定できます。

content-disposition応答ヘッダーを使用して他に何ができますか?


23
ファイル名に空白文字または非ASCII文字が含まれていると、サンプルコードが壊れることに注意してください。詳細については、RFC 6266を参照してください。
Julian Reschke、2011

@JulianReschke、印刷不可と見なされるASCII文字についてはどうですか?(0から0x1F
Pacerier、2015

RFC 6266をお読みください(ファイル名に使用するのは悪い考えですが、受信者はとにかく捨ててしまう可能性があります)
Julian Reschke

1
名前を二重引用符で囲む場合は、空白、Unicodeなどを使用できます。kb.mozillazine.org/...
トニーBenBrahim

1
@Ronnie Overbyコンテンツ処理とは何ですか?
divy3993 2016年

回答:


84

RFC 6266は、以下で参照されるRFCに取って代わるものであることに注意しください。セクション7では、関連するセキュリティ上の懸念事項のいくつかについて概説します。

content-dispositionヘッダーの権限はRFC 1806およびRFC 2183です。人々はcontent-dispositionのハッキングも考案しましたcontent-dispositionヘッダーはHTTP 1.1標準の一部ではないことに注意してください。

HTTP 1.1標準(RFC 2616)では、コンテンツ処理のセキュリティ上の副作用についても言及されています。

15.5コンテンツ処理の問題


HTTPで頻繁に実装されるContent-Disposition (セクション19.5.1を参照)ヘッダーの派生元であるRFC 1806 [35] には、非常に
深刻なセキュリティに関する考慮事項がいくつかあります。Content-Dispositionは
HTTP標準の一部ではありませんが、広く実装されている
ため、実装者に対するその使用とリスクを文書化しています。詳細については、RFC 2183 [49]
(RFC 1806を更新)を参照してください。


31
今日では、当局はRFC 6266.ある
ジュリアンReschke

@JulianReschke、「置き換え」と「更新」はどのように機能しますか?RFC 7230のような新しいバージョンでもRFC 6266は廃止されましたか?
Pacerier 2014

@Pacerier-RFC 7230がRFC 6266に影響を与えるのはなぜですか?
Julian Reschke 2014

@ジュリアン、1) 6266の更新2616以降、2) 2616は723Xによって廃止されました。3 次に、6266も廃止されたと見なされますか?
Pacerier、2015

5
まあ、ここではRFC 5678、そこにはRFC 9876があります。Content-Dispositionが不快な場合、代わりに何を使用すればよいですか?
Csaba Toth

25

さて、Content-Dispositionヘッダーは、もともとWebではなく電子メール用に作成されたようです。(関連RFCへのリンク。)

私はウェブブラウザが応答するかもしれないと思っています

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

保存するとき、私はわかりません。



5

asp.netユーザーの場合、.NETフレームワークは、コンテンツ処理ヘッダーを作成するクラスを提供します: System.Net.Mime.ContentDisposition

基本的な使い方:

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
このクラスはRFC 6266に準拠しいないことに注意してくださいRFC 5987エンコーディングでパラメータをfilename使用filename*する代わりに、パラメータでUTF-8 base64エンコーディングを行います。fx utilsを派生または使用して修正する方法はありません。ほとんどすべてが上書き不可または内部です。.Netfxには、オープン性と拡張性を学ぶ長い道のりがあります。MVC 5.2では、このクラスは少し良くに対して行いますが、他の人のようにパラメータを処理していないとその実装のほとんどは...また、内部でFileResultfilenameinline
フレデリック・

2

このヘッダーはRFC 2183で定義されているため、ここから読み始めるのが最適です。

許可される値は、Internet Assigned Numbers Authority(IANA)に登録されている値です。それらの価値の登録は、決定的な情報源と見なされるべきです。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.