HTTP 응답 헤더에서 컨텐츠 처리 사용


127

데이터베이스에서 파일을 제공 할 때 다음 asp.net 코드가 매우 유용하다는 것을 알았습니다.

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

이를 통해 사용자는 파일을 컴퓨터에 저장 한 다음 파일을 사용하려는 브라우저 대신 파일 사용 방법을 결정할 수 있습니다.

콘텐츠 처리 응답 헤더로 다른 작업을 수행 할 수 있습니까?


23
filename에 공백이나 ASCII가 아닌 문자가 포함되어 있으면 샘플 코드가 작동하지 않습니다. 자세한 내용은 RFC 6266을 참조하십시오.
Julian Reschke

@JulianReschke, 인쇄 할 수없는 ASCII 문자는 어떻습니까? ( 00x1F)
Pacerier

RFC 6266을 읽어보십시오 (파일 이름에 사용
하기에는

1
이름에 큰 따옴표를 사용하면 공백, 유니 코드 등을 사용할 수 있습니다. kb.mozillazine.org/…
Tony BenBrahim

1
@Ronnie Overby 콘텐츠 처리 란 무엇입니까?
divy3993

답변:


84

참고 RFC 6266 대체합니다 RFC는 아래 참조. 섹션 7 에는 관련 보안 문제 중 일부가 요약되어 있습니다.

콘텐츠 처리 헤더에 대한 권한은 RFC 1806RFC 2183입니다. 사람들도 콘텐츠 처리 해킹을 고안했습니다 . 콘텐츠 처리 헤더는 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입니다.
Julian Reschke

@JulianReschke, "대체"및 "업데이트"는 어떻게 작동합니까? RFC 7230과 같은 최신 버전에서도 RFC 6266이 더 이상 사용되지 않습니까?
Pacerier

@Pacerier-RFC 7230이 RFC 6266에 영향을주는 이유는 무엇입니까?
Julian Reschke

@Julian, 1) 6266 업데이트 2616 이후 2) 2616은 723X에 의해 폐기되었습니다. 3) 그러면 6266도 폐기 된 것으로 간주됩니까?
Pacerier

5
여기 RFC 5678, RFC 9876이 있습니다. 내용 처분이 싫은 경우 대신 무엇을 사용해야합니까?
Csaba Toth

25

글쎄, Content-Disposition 헤더는 원래 웹이 아니라 전자 메일 용으로 만들어진 것 같습니다. ( 관련 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사용하는 대신 매개 변수 에서 UTF-8 base64 인코딩을 수행 합니다. fx utils를 유도하거나 사용하여 수정하는 방법은 없습니다. 거의 모든 것이 재정의 불가능하거나 내부적입니다 ... .Net fx는 여전히 개방성과 확장 성을 배우는 데 오랜 시간이 걸렸습니다. MVC 5.2에서 class는 약간 더 잘 수행 하지만 다른 매개 변수는 처리하지 않으며 대부분의 구현도 내부적으로 수행됩니다.filename*FileResultfilenameinline
Frédéric

2

이 헤더는 RFC 2183에 정의되어 있으므로 읽기 시작하기 가장 좋은 장소입니다.

허용되는 값은 IANA (Internet Assigned Numbers Authority)에 등록 된 값입니다. 그들의 가치레지스트리 는 결정적인 근원으로 보여 져야한다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.