1. 対象読者
この文書は以下の人々を対象としています:
-
技術文書の著者 ― これらの概念を自身の仕様やドキュメントで再利用・参照したい方。
-
ユーザーエージェントの開発者 ― 利用者を最優先する設計方針とプライバシー原則に沿った実装を目指す方。
-
ウェブ開発者 ― なぜユーザーエージェントが、開発者の利便性を含む他の関係者よりもユーザープライバシーやセキュリティを優先するのか理解したい方。
-
規制当局や政策立案者 ― ユーザーエージェントの行動を導く義務、原則、期待事項を知りたい方。
2. ウェブユーザーエージェントとは
ウェブユーザーエージェントとは、 自分自身以外のウェブサイトとユーザーの代理でやりとりする あらゆるソフトウェア実体を指します。 これは、単純にウェブサイトのコンテンツを表示するものも含まれます。 ウェブの仕様やこの文書の他の箇所では、 ウェブユーザーエージェントは通常「ユーザーエージェント」と呼ばれますが、 他分野には異なる種類のユーザーエージェントが存在します。 例えば電子メールの文脈では「メールユーザーエージェント」などがあります。 一人の人が日常生活の中で様々なユーザーエージェントを使う場合もあります。
最も一般的なウェブユーザーエージェントの例はウェブブラウザーです。 アプリ内で動作しクロスサイトのリンクを辿れるインアプリブラウザーも含みます。 しかし、ユーザーエージェントには他にも 検索エンジンや音声アシスタント、ウェブサイトのコンテンツ断片や要約を提示する生成AIシステム、 ウェブサイトのナビゲーションや操作を手助けするツールなども含まれます。
ユーザーエージェントの動作は ウェブ標準や技術仕様のみで完全に定義されているわけではありません。 特に、ユーザーエージェントは ユーザーの利益のためにどの仕様を実装するか選択し、 実装する仕様を取り巻く独自のインターフェースや動作も備えます。
2.1. ソフトウェア要素としてのユーザーエージェント
ソフトウェア要素として、ユーザーエージェントはより大きなアプリケーションの一部として機能したり、 ウェブプラットフォーム(またはその一部)を実装したライブラリを呼び出すこともあります。
アプリケーションが ユーザーエージェントである部分とそれ以外の部分を明確に区別する場合は、 ユーザーエージェント部分のみが 自身以外からのコンテンツを閲覧でき、ユーザーエージェントの義務に従う必要があります。 明らかにアプリ自身のコンテンツだけを表示する部分は独自の振る舞いができますが、 アプリ全体を通して各部分の動作についてユーザーに明確な説明をするべきです。 内部と外部のコンテンツの違いが曖昧な場合——例えばアドレスバーや起源インジケーターを表示しないなど——には アプリ自身のコンテンツを表示する場合でもユーザーエージェントの義務に従うべきです。
同様に、ウェブプラットフォームを実装するライブラリが
完全なユーザーエージェントになることもあれば、ならないこともあります。
例えば
SFSafariViewController
や Android Custom Tabsは
ユーザーエージェントの義務を担い、
閲覧する外部コンテンツと埋め込みアプリのコンテンツの違いを明確に区別します。
これらのライブラリはユーザーエージェントです。
一方、 Android、 iOS、 Windows WebViewライブラリなどは様々なタイプのアプリケーションを想定して設計されています。 これらのアプリが自身のコンテンツだけを取り扱う場合もあるため、 WebViewライブラリは単体ではユーザーエージェントではなく、 ユーザーエージェントの義務も実装していません。
最終的には、組み込みアプリケーションが その一部でもユーザーエージェントとして動作する場合、 ユーザーエージェントの義務に従う責任があります。 アプリが外部コンテンツをユーザーエージェントライブラリでのみ閲覧する場合は分かりやすいですが、 非ユーザーエージェントWebViewでインアプリブラウザーを実装する際は、 ユーザーエージェントの義務への配慮が特に求められます。
3. ユーザーエージェントの義務
各ユーザーエージェントはユーザー (The Internet is for End Users) のみのために機能し、その他の関係者のために機能しません。 ユーザーエージェントはユーザーに対して 様々な義務を負います。 これらは集団的な議論を通じて確立され、 ユーザーエージェントが実装する各種標準に具体化されるべきです。
3.1. 保護
ウェブページの閲覧は安全であるべきです。 ページを閲覧するだけで ソフトウェアのインストールやハードウェアへのアクセスなど、 ユーザーのコンピュータや環境をページが変更できてはなりません。
サイトや他の観察者に開示されるデータは ユーザーの好みに即しているべきであり、 データ最小化の原則が守られるべきです。 特にユーザーエージェントは サイトによるユーザーアクティビティの追跡可能性を制限するよう対応しなければなりません [unsanctioned-tracking]。
ユーザーは情報をさらに共有することを自ら選ぶ 場合もあります(例:フォームの入力や権限の許諾など)。 それでもユーザーエージェントは ユーザーが騙されないよう配慮し、 ページが特権的なアクセスを試みている場合には明確なサインで通知する必要があります。
ローカルファイルや他の機密リソースへのアクセスは 明確で意図的なユーザーの操作と適切な警告によってのみ可能であるべきです。
ユーザーエージェントは、サイト上の悪意あるコードが ユーザーエージェントを抜けてユーザーのコンピュータや他の オリジン にアクセスしたり変更したりするのを防ぐ必要があります。 コンポーネントのサンドボックス化や メモリ安全な言語の採用、 脆弱性調査・対応チームの設置などによって ユーザーエージェントは保護義務を果たします。 こうした防御策は新たな脅威に合わせて絶えず進化させる必要があります。
ユーザーが無関係な複数のウェブサイトにアクセスする場合、 埋め込みiframeに共有識別クッキーを送信しない選択は十分に可能です。 そうしたクッキーを送信するブラウザーは保護義務を果たしていません。 一方、安定したIPアドレスを開示することは現時点では避けられないため、 それは違反ではありません。
ユーザーエージェントは、ユーザーが明示的に選択または開いた場合を除き ページによるローカルファイルへのアクセスを防ぐことが求められます。 これが次のような挙動の動機となります:
-
各
file:URLに固有のオリジンを割り当てる -
<input type=file>アップロード時にパス要素を削除する -
@font-faceルールで利用できるローカルフォントを制限する
ただし、ユーザーはファイルのアップロードやダウンロード等で ファイルを共有することが可能です。 File System Access などのAPIも、ユーザーが適切な判断ができる限り この義務に違反しません。
3.2. 誠実性
ユーザーエージェントは、そのユーザーが理解できる形で現在何が起きているか説明する責任があります。 この説明は適切なタイミング・頻度で行い、 ユーザーの理解を助けこそすれ、邪魔や混乱を招かないようにすべきです。
3.3. 忠誠
ユーザーエージェントはユーザーの利益を 実装者や他の第三者の利益よりも優先しなければなりません。
公平で事前に合意された支払いである限り、 ユーザーエージェントがそのサービスの対価を徴収しても 忠誠心とは両立します。
またユーザーエージェントは 特定のページのサービスを受けるために信頼できるコミットメントをページに伝える役割を果たせます。 サービス獲得後もそのコミットメントを維持しても不忠実とはなりません。
ユーザーエージェントは、ユーザーが他のユーザーエージェントへ切り替えることを妨げてはなりません。 例えば、ユーザーデータへのアクセスをブロックしたり、エクスポートや保存の際に ポータビリティを妨げるような方法を取ってはいけません。 これはID情報、ブックマーク、履歴、パスワード、パスキー等の資格情報も含みます。 ユーザーエージェントが基盤のOSに 資格情報を保存している場合は、他のユーザーエージェントからのアクセスを ユーザーが許可できる方法が必要です。
4. 謝辞
Infra Standard には ユーザーエージェントの初期定義で、 Privacy Principlesには これらの義務の初期バージョンで感謝します。