2013-10-16 2 views
2

여기에 설정이 있습니다.콘텐츠 처분 보안

나는 Flask-WTF가있는 간단한 Flask 앱을 ​​가지고 있습니다.

사용자가 하나의 텍스트 필드 (filename)로 양식을 제출합니다.

양식은 CSRF 토큰이 (플라스크-WTF에서합니다.)

을 사용자가 양식을 제출하고 유효성을 검사 한 후 브라우저가 파일 이름으로 자동 생성 된 파일을 (즉, 서버 파일 시스템에서 파일이 아닌) 다운로드하는 경우 제출.

중요한 코드는 다음과 같습니다

response.headers['Content-Disposition'] = 'attachment; filename={0}.lsc'.format(filename) 

이 어떻게 안전합니까?

즉, Content-Disposition 헤더에 임의의 텍스트를 삽입 할 수 있다면 무엇을 할 수 있습니까?

+0

자동 생성 파일이란 무엇을 의미합니까? 파일의 출처는 어디입니까? –

+0

요청시 생성됩니다. 나는. 템플릿을 가져 와서 세션의 데이터를 삽입 한 다음 다운로드 한 파일로 스트리밍합니다. 참고로 파일 이름 변수는 템플릿에서 사용되지 않습니다. 실제로 제공된 코드 행에서만 사용됩니다. – korylprince

+0

서버 측 언어가 헤더 삽입에 취약하지 않은지 확인합니다 (예 :'filename'에 줄 바꿈 문자가 포함 된 경우). – SilverlightFox

답변

1

그들은 서버에 아무것도 할 수 없으며 제대로 RFC 2616를 구현하는 경우는 클라이언트 측에서 안전합니다 :

수신 사용자 에이전트가 어떤 디렉토리 경로를 정보를 존중하지 말아야 filename-parm 매개 변수에 있습니다.이 매개 변수는 현재 HTTP 구현에 적용되는 유일한 매개 변수입니다. 파일 이름은 터미널 구성 요소로만 처리되어야합니다 (SHOULD).

그러나이 문제에 대한 자세한 내용은 RFC 2183: Communicating Presentation Information in Internet Messages: The Content-Disposition Header Field, 특히 보안 고려 사항 섹션을 참조하십시오. (RFC 2183은 메일 메시지에 적용되지만 HTTP 사용자 에이전트에도 동일하게 적용됩니다.)

+0

감사합니다. 그게 내가 필요한 것입니다. – korylprince