1. 대상 독자
이 문서는 다음을 대상으로 합니다:
-
기술 문서 작성자: 이 개념들을 자신의 명세나 문서에서 재사용하거나 참조하려는 사람들.
-
사용자 에이전트 개발자: 사용자 우선의 설계 및 프라이버시 원칙에 구현을 맞추고자 하는 사람들.
-
웹 개발자: 사용자 에이전트가 개발자 편의성을 포함한 다른 이해당사자보다 사용자 프라이버시와 보안을 우선시하는 이유를 이해하고 싶은 사람들.
-
규제 기관 및 정책 입안자: 사용자 에이전트의 행동을 이끄는 의무, 원칙, 기대를 이해하기를 원하는 사람들.
2. 웹 사용자 에이전트란?
일반적으로 사용자 에이전트는 사용자를 대신하여 다른 엔티티와 상호 작용하는 모든 소프트웨어 엔티티입니다. 사용자 에이전트에는 많은 운영 체제; 이메일 클라이언트; PDF, 전자책, 이미지 뷰어; 자격 증명 관리자(디지털 지갑 포함); 그리고 다양한 종류의 소프트웨어가 포함됩니다.
웹 사용자 에이전트는 사용자 자신 외부에서 웹사이트와 상호작용하는 모든 소프트웨어 엔터티를 의미하며, 웹사이트의 콘텐츠를 단순히 렌더링하거나 사용자가 요청하거나 인가한 동작을 수행하는 것도 포함된다. 웹 명세와 본 문서의 나머지 부분에서는, 웹 사용자 에이전트를 보통 "사용자 에이전트"로 지칭한다. 혼란의 여지가 있을 경우에는 완전히 명확한 용어를 사용할 수 있다. 한 사람은 일상에서 여러 종류의 사용자 에이전트를 사용할 수 있다.
가장 일반적인 웹 사용자 에이전트는 웹 브라우저이며, 교차 사이트 링크를 따라갈 수 있는 앱 내 브라우저도 포함된다. 하지만 사용자 에이전트에는 검색 엔진, 음성 기반 어시스턴트, 생성형 AI 시스템 등 웹사이트 콘텐츠의 일부나 요약을 보여주거나, 사람들이 웹사이트를 탐색하고 상호작용하는 것을 도와주거나, 사용자 대신 자동화된 동작을 수행하는 다양한 도구들도 포함된다.
사용자 에이전트의 동작은 웹 표준이나 기술 명세서만으로 완전히 정의되지 않습니다. 특히, 사용자 에이전트는 사용자에게 가장 적합하도록 어떤 명세를 구현할지 선택하며, 구현한 명세 주변에 독자적인 사용자 인터페이스와 기타 동작을 추가합니다.
2.1. 소프트웨어 구성요소로서의 사용자 에이전트
소프트웨어 구성요소로서 사용자 에이전트는 더 큰 애플리케이션의 일부가 될 수 있고, 웹 플랫폼 또는 그 일부를 구현하는 라이브러리를 호출할 수 있습니다.
애플리케이션이 그 구성요소 중 사용자 에이전트와 아닌 것을 명확히 구분할 경우, 외부 콘텐츠를 탐색하는 사용자 에이전트부분만 사용자 에이전트의 의무를 따라야 합니다. 오직 애플리케이션 고유의 콘텐츠만을 보여주는 부분은 독립적으로 동작할 수 있으나, 각 부분별 예상 동작을 사용자에게 명확히 안내해야 합니다. 내부와 외부 콘텐츠의 구분이 너무 모호하다면—예를 들어 외부 콘텐츠 브라우징 시 주소 표시줄 등 출처 표시가 없다면— 자체 콘텐츠를 보여줄 때도 사용자 에이전트의 의무를 따라야 합니다.
웹 플랫폼을 구현하는 라이브러리 역시
반드시 완전한 사용자 에이전트일 필요는 없습니다.
SFSafariViewController
와 Android Custom Tabs 등 일부는
사용자 에이전트의 의무를 수행하며
탐색하는 외부 콘텐츠와 임베디드 애플리케이션이 제어하는 콘텐츠를 명확히 구분합니다.
이러한 라이브러리는 사용자 에이전트입니다.
Android, iOS, Windows WebView 라이브러리와 같이 다양한 종류의 애플리케이션 지원을 위해 설계된 것들도 있습니다. 일부 애플리케이션은 자체 콘텐츠만 포함하므로, WebView 라이브러리는 단독으로 사용자 에이전트가 아니며, 사용자 에이전트의 의무를 구현하지 않습니다.
결국, 애플리케이션이 사용자 에이전트로 동작하거나, 그 일부가 동작한다면, 사용자 에이전트의 의무를 따라야 할 책임이 있습니다. 사용자 에이전트 라이브러리를 사용해 외부 콘텐츠만 탐색한다면 이는 비교적 단순합니다. 개발자는 사용자 에이전트의 의무를 비-사용자 에이전트 WebView로 인앱 브라우저를 구현할 때 더욱 신중히 준수해야 합니다.
3. 사용자 에이전트의 의무
각 사용자 에이전트는 사용자(인터넷은 최종 사용자를 위해) 를 위해 봉사하며, 다른 집단을 위한 것이 아닙니다. 사용자 에이전트는 사용자에게 다양한 의무를 지니며, 이는 집단 논의를 통해 정립되고 사용자 에이전트가 구현하는 여러 표준에 반영되어야 합니다.
3.1. 보호
웹 페이지 방문은 안전해야 합니다. 페이지를 방문했다고 해서 자동으로 사용자의 컴퓨터나 환경이 변경되어서는 안 됩니다. (예: 소프트웨어 설치, 하드웨어 접근)
사이트나 제3자가 볼 수 있는 데이터는 사용자의 선호에 맞아야 하며, 데이터 최소화 원칙을 따라야 합니다. 특히 사용자 에이전트는 사이트가 사용자 활동을 추적할 가능성을 제한해야 합니다 [unsanctioned-tracking].
사용자는 더 많은 정보를 공유하기로 선택할 수 있습니다. (예: 폼 작성, 권한 부여 등) 이 경우에도 사용자 에이전트는 사용자가 속지 않도록 돕고, 페이지가 권한 상승을 시도할 때 명확히 표시해 주어야 합니다.
로컬 파일이나 기타 민감 리소스에 대한 접근은 명확하면서도 의도적인 사용자 행동(예: 경고 표시)이 있을 때에만 허용되어야 합니다.
사용자 에이전트는 사이트의 악성 코드가 사용자 에이전트 밖으로 탈출하여 사용자의 컴퓨터를 수정하거나 다른 origin 에 접근하지 못하도록 막아야 합니다. 샌드박스 사용, 메모리 안전 언어 사용, 보안 팀을 운영하여 취약점 대응 등으로 보호 의무를 이행할 수 있습니다. 이러한 방어는 새로운 위협에 맞춰 지속적으로 진화해야 합니다.
서로 관련 없는 웹사이트를 사용자가 방문할 때, iframe에 공유 식별 쿠키를 보내지 않는 것이 가능합니다. 이러한 쿠키를 보내는 브라우저는 보호 의무를 위반한 것입니다. 단, 고정 IP 주소 노출은 현재로서는 피할 수 없으므로 위반이 아닙니다.
사용자 에이전트는 사용자가 직접 선택하거나 열지 않는 한, 페이지가 로컬 파일에 접근하지 못하도록 해야 합니다. 이에 따라 아래와 같은 동작이 유도됩니다:
-
각
file:URL에 고유한 origin 부여 -
<input type=file>업로드에서 경로 정보 삭제 -
@font-face 규칙에서 사용 가능한 로컬 폰트 제한
단, 파일 업로드/다운로드 등을 통해 사용자가 파일을 공유하는 것은 여전히 가능합니다. File System Access 같은 API도 사용자가 주체적으로 결정할 수 있는 도구만 있다면 보호 의무를 위반하는 것이 아닙니다.
3.2. 정직
사용자 에이전트는 웹과 사용자 사이를 중재해야 하며, 사용자가 이해할 수 있는 형태로 무슨 일이 일어나고 있는지 설명해야 한다. 사용자 에이전트가 자동으로 또는 사용자를 대신해 동작을 수행할 때, 반드시 그 행동과 그 결과를 명확히 전달해야 한다.
사용자 에이전트는 설명을 위해 텍스트, 권한 요청 알림, 표시기, 미리보기, 기타 인터페이스 요소 등 여러 방식을 사용할 수 있다. 이 요소들의 위치와 무엇에 강조가 필요한지 고려해야 한다.
대표적인 예로, 사용자 에이전트는 웹사이트가 암호화된 연결로 제공되는지 여부를 표시한다. 예전에는 안전하지 않은 사이트에 깨진 자물쇠 아이콘을 보여줬지만, 지금은 일부 사용자 에이전트가 주소창에 "보안되지 않음"이라는 문구를 명시적으로 포함한다.
Media Capture and Streams와 같은 명세에는 프라이버시 표시 요건이 포함되어 사용자 에이전트가 웹사이트의 특정 동작을 설명하도록 요구하지만, 사용자 에이전트는 명세에서 명시적으로 요구하지 않은 행동에 대해서도 사용자가 그 사실을 알아야 할 때 동일한 기법을 활용해야 한다.
정직한 사용자 에이전트는 사용자의 진실 파악을 적극적으로 돕는다. 단순히 거짓을 피하는 것에 그치지 않는다. 그 설명은 현재 상태와 예상 결과를 명확히 나타내야 하며, 완곡어법이나 모호함을 피하고, 민감한 활동이 일어날 때 분명하게 드러나도록 해야 한다.
사용자 에이전트는 언제, 얼마나 자주 이런 설명을 보여줄지 선택해야 하며, 설명이 적절한 시점에 제공되어 사용자를 방해하지 않고 정보를 제공해야 한다. 또 사용자가 언제, 어떻게 결정을 내릴지 스스로 제어할 수 있도록 해야 한다.
예를 들어, 웹사이트가 위치 정보나 오디오 녹음과 같이 장기간 권한을 사용하는 경우, 사용자 에이전트는 주소창에 아이콘을 표시해 현재 상황을 설명할 수 있다.
3.3. 충성
사용자 에이전트는 구현자, 타인의 이익보다 사용자의 이익에 봉사해야 합니다.
공정한 지불이 사전에 합의된 경우, 사용자 에이전트는 사용자에게 충실하면서도 서비스 대가를 받을 수 있습니다.
사용자 에이전트는 사용자가 서비스를 받기 위해 페이지와 신뢰할 만한 약속을 하도록 도울 수 있으며, 서비스를 받은 뒤에도 그 약속을 유지하는 것은 충성 위반이 아닙니다.
사용자 에이전트는 사용자가 다른 사용자 에이전트로 전환하는 것을 막아서는 안 됩니다. 예를 들어, 사용자 데이터에 대한 접근을 차단하거나, 데이터를 내보내거나, 데이터를 휴대 불가능하게 저장해서는 안 됩니다. 여기에는 신원 정보, 북마크, 기록, 비밀번호, 패스키 등 자격 증명이 포함됩니다. 만약 사용자 에이전트가 기반 OS에 자격 증명을 저장한다면, 사용자가 다른 사용자 에이전트가 해당 정보를 접근할 수 있도록 허용하는 방법이 제공되어야 합니다.
4. 감사의 글
Infra Standard 에 사용자 에이전트의 초기 정의를 제공해 준 점과, Privacy Principles 에 이 의무의 초기 버전을 제공해 준 점에 감사드립니다.