요약

  • RFC 2049는 모든 사용자 에이전트가 모든 서브타입을 이해할 것을 요구하지 않으면서, 개방형 미디어 시스템에 대한 적합성을 정의했습니다.
  • 그 결정적인 폴백은 보수적이었습니다. 알 수 없는 전송 인코딩, 알 수 없는 문자 집합, 알 수 없는 비텍스트 유형은application/octet-stream으로 후퇴했으며, 원시 비텍스트 바이트는 텍스트로 표시되어서는 안 되었습니다.
  • 이 문서에서 '안전(safe)'이라는 단어는 알려진 적합한 RFC 821/822 시스템을 통한 전송과 우발적인 원시 표시로부터의 보호를 설명했습니다. 파일, 발신자, 디코더, 렌더링 또는 결과를 인증하는 것이 아니었습니다.

모르기 위한 표준

확장 가능한 유형 시스템은 즉각적인 문제를 만듭니다. 발신자는 수신자가 한 번도 본 적 없는 형식을 알고 있을 수 있습니다. 적합성이 동일한 형식 라이브러리를 요구한다면, 레지스트리가 커지는 동안 어떤 구현도 적합 상태를 유지할 수 없습니다. 무지에 대한 규칙이 없다면, 같은 바이트가 인쇄되거나, 실행되거나, 버려지거나, 서로 다르게 추측될 수 있습니다.

RFC 2049는 보편적 이해 대신 최소 동작을 선택했습니다. 적합한 메일 사용자 에이전트는 MIME 제어 지점을 인식하고 해석을 언제 멈춰야 하는지 알아야 했습니다. 이것이 제5부의 역사적 주제입니다. 앞선 부분들은 필드, 인코딩, 미디어 계열 및 헤더 텍스트를 정의했고, 제5부는 수신자의 무지를 상호운용 가능하게 만들었습니다.

요구 사항은 평범한 생성과 보관에서 시작했습니다. 적합한 에이전트는 자신이 생성한 메시지에MIME-Version: 1.0을 넣었습니다.Content-Transfer-Encoding을 인식하고, quoted-printable과 base64를 디코딩했으며, 7bit, 8bit, binary를 인식했습니다. 기반 전송이 8bit나 binary를 운반할 수 없다면, 발신자는 본문을 적절히 인코딩하고 레이블을 붙여야 했습니다. 이 레이블은 사후에 바이트를 복구하지 않습니다. 수신자에게 어떤 가역적 연산이 기대되는지 알려줄 뿐입니다.

인코딩 자체가 알려지지 않았을 때

가장 엄격한 후퇴는 미디어 해석 이전에 왔습니다. 인식되지 않은 Content-Transfer-Encoding은, 선언된 Content-Type이 익숙한 것이더라도, MIME 엔터티를application/octet-stream으로 취급하도록 강제했습니다. 표현된 옥텟을 어떻게 복구하는지 알기 전에는 수신자가 이미지, 텍스트 또는 애플리케이션 의미론을 안전하게 적용할 수 없습니다.

현재의 정오표 기록이 여기서 중요합니다. 향후 문서 업데이트를 위해 보류 중인 EID 5470은, 원래 문장이 문법적으로 Content-Transfer-Encoding에 Content-Type을 부여한다고 지적합니다. 그 제안 문구는 함축된 주어를 보완합니다. 인식되지 않은 인코딩을 가진 MIME 엔터티. 기술적 경계는 변하지 않지만, 정오표의 지위를 대체 텍스트로 격상시켜서는 안 됩니다.

이 순서는 두 질문을 분리했습니다. 수신자가 의도된 옥텟 시퀀스를 재구성했는가? 그렇다면 미디어 선언을 이해하는가? 첫 번째 질문에서 실패한 채 두 번째 질문의 레이블을 핸들러에 넘기면, 인식 가능한 이름이 복구되지 않은 데이터를 위장할 수 있습니다.

최상위 계열이 산 것은 아주 적은 지식이었다

text에 대해 RFC 2049는 US-ASCII 표시와 다른 문자 집합에 대한 최소한의 통지를 요구했습니다. 알 수 없는 텍스트 서브타입은 문자 집합이 알려져 있고 정준 형식이 로컬 형식으로 변환된 후에만 원시 형태로 제공될 수 있었습니다. 알 수 없는 문자 집합은 octet-stream이 되었습니다. 따라서 '텍스트'는 디코딩되지 않은 옥텟을 화면에 뿌릴 허가가 아니었습니다.

알 수 없는 image, audio, video 서브타입도 최소한 octet-stream이 되었습니다.application의 경우, 수신자는 quoted-printable이나 base64를 제거하고 그 결과를 사용자 파일에 담을 수 있어야 했습니다. 이는 보관 능력이지 결과를 실행하라는 지시가 아니었습니다. RFC 2046은 범용 뷰어가 자신이 지원하는 가장 위험한 형식의 보안 노출을 물려받는다고 경고했습니다.

복합 유형에는 다른 폴백이 있었습니다. 적합한 구현은multipart/mixed를 인식하고,multipart/alternative에서 중복 표시를 피하고,multipart/digest내부의 특별한 기본값을 적용했으며, 알 수 없는 multipart 서브타입은 mixed로 취급했습니다.message/rfc822를 재귀적으로 인식했고, 알 수 없는 message 서브타입은 octet-stream이 되었습니다. 완전히 인식되지 않은 Content-Type 값도 마찬가지로 매개변수 없는 octet-stream이 되었으며, 파일로 저장하거나 프로그램을 선택하는 것은 가능한 로컬 처리로만 기술되었습니다.

'안전'은 화면에서 멈췄다

열 가지 요구 사항을 나열한 뒤 RFC 2049는 MIME 적합이 무엇을 의미하는지 설명했습니다. 거의 모든 적절히 표시된 데이터를 보내는 것은 안전하다고 가정되었습니다. 수신자가 최소한 그것을 미분화된 바이너리로 취급할 수 있고, 아무런 의심 없는 사용자의 화면에 그대로 쏟아붙이지 않을 것이기 때문입니다. 또한 RFC 821과 RFC 822에 적합한 알려진 시스템이 그 데이터로 인해 망가지지도 않고 그것을 망가뜨리지도 않는다는 의미에서 적합 데이터를 안전하다고 불렀습니다.

이것은 협소한 주장입니다. 불투명한 바이트는 여전히 악의적일 수 있습니다. 선택된 프로그램은 취약할 수 있습니다. 올바른 디코더도 사용자가 허가하지 않은 내용을 드러낼 수 있습니다. 메시지는 위조되거나, 잘리거나, 수신 전에 변경되거나, 적합하지 않은 릴레이에 의해 잘못 다뤄지거나, 잘못 렌더링될 수 있습니다. 적합성 레이블은 최소한의 동작 집합을 기록할 뿐, 특정 제품에서 그 실행을 관찰하지 않습니다.

성공적인 표시조차 이 약속 밖에 있습니다. 익숙하지 않은 문자 집합에 대해서는 사용자에게 알려주기만 하면 충분했습니다. 알 수 없는 서브타입에 대해서는 저장만으로 충분했습니다. 표준은 의도적으로 유용한 거부를 허용했습니다.

불량 메일 시스템은 증거였지 허가가 아니었다

RFC 2049는 더 지저분한 네트워크도 묘사했습니다. 널리 배포된 많은 적합하지 않은 MTA가 로컬 저장 규칙에 따라 메시지를 변경하거나 그저 불량이었다고 말합니다. NUL, TAB, 후행 공백, 긴 줄, 불변 문자가 아닌 문자, 한 줄에 홀로 있는 마침표, 줄 앞의From은 사라지거나 변경될 수 있었습니다. Base64는 가장 좁은 이식 가능한 알파벳과 줄 제약을 충족했고, quoted-printable은 문서가 이름을 대는 대부분의 게이트웨이는 통과했지만 전부는 아니었습니다.

그런 다음 RFC는 명확한 선을 그었습니다. 이것들은 MTA에 대한 권고가 아니었습니다. RFC 821은 여기서 기술되는 공백 변경과 줄 바꿈을 금지했습니다. 그 지침은 작성자가 무효한 현실 속에서 살아남되 그 현실을 프로토콜 계약으로 세탁하지 말라고 요청한 것입니다.

이 구분이 이 글의 증거적 한계입니다. 규범적 규칙은 적합한 에이전트가 무엇을 해야 하는지 말합니다. 1996년의 경고는 적합하지 않은 에이전트가 존재했다는 사실을 기록합니다. 어느 클라이언트가 어느 단계를 수행했는지, 규칙이 얼마나 널리 배포되었는지, 사용자가 궁극적으로 무엇을 보았는지는 둘 다 증명하지 않습니다.

지위, 정오표, 그리고 기록이 증명할 수 있는 것

RFC Editor의 현재 정보 페이지는 RFC 2049를 Draft Standard로 표시하고 있습니다. 문서 자체는 Standards Track이라고 하며 1996년 11월로 날짜가 매겨져 있습니다. 그 출판 기록은 이 명세의 위치를 확립할 뿐, 구현에 대한 조사를 확립하지 않습니다.

검증된 EID 3933은 또 다른 경계를 교정합니다. 열 번째 요구 사항은 RFC 2049의 4절이 아니라 RFC 822의 단어 문법과 RFC 2047의 encoded-word 인식 규칙을 가리켜야 합니다. 이것은 상호 참조를 개선할 뿐, 인코딩된 표시 단어를 발신자 신원이나 라우팅 주소로 바꾸지 않습니다.

지속적인 성취는 절제된 무지였습니다. MIME은 어휘가 자신의 소프트웨어를 앞서가더라도 수신자가 즉흥적으로 대응할 필요가 없도록 하여 어휘가 확장될 수 있게 했습니다. 수신자는 아는 것은 디코딩하고, 모르는 것은 보존하며, 바이너리 보관과 텍스트적 이해를 혼동하는 것을 거부할 수 있었습니다.

출처