1. 対象読者
この文書は以下の人々を対象としています:
-
技術文書の著者 ― これらの概念を自身の仕様やドキュメントで再利用・参照したい方。
-
ユーザーエージェントの開発者 ― 利用者を最優先する設計方針とプライバシー原則に沿った実装を目指す方。
-
ウェブ開発者 ― なぜユーザーエージェントが、開発者の利便性を含む他の関係者よりもユーザープライバシーやセキュリティを優先するのか理解したい方。
-
規制当局や政策立案者 ― ユーザーエージェントの行動を導く義務、原則、期待事項を知りたい方。
2. ウェブユーザーエージェントとは
ユーザーエージェントは、一般的に、ユーザーのために他のエンティティとやり取りするソフトウェアです。 ユーザーエージェントには、多くのオペレーティングシステム、電子メールクライアント、PDF・電子書籍・画像ビューア、 認証情報マネージャー(デジタルウォレットを含む)、その他多くの種類のソフトウェアが含まれます。
ウェブユーザーエージェントとは、 自身以外のウェブサイトとユーザーの代わりにやり取りを行う すべてのソフトウェア実体を指します。 これには、ウェブサイトの内容の単純なレンダリングや、 ユーザーによって要求または許可された操作の実行も含まれます。 ウェブ仕様やこの文書内では、 ウェブユーザーエージェントは通常「ユーザーエージェント」とだけ呼ばれます。 混乱の恐れがある場合は、どちらの完全な用語も使用できます。 一人の人が日常生活で複数のユーザーエージェントを使うこともあります。
最も一般的なウェブユーザーエージェントの種類はウェブブラウザです。 これにはクロスサイトリンクをたどることができるアプリ内ブラウザも含まれます。 しかし、ユーザーエージェントには 検索エンジンや音声アシスタント、生成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. 誠実性
ユーザーエージェントはWebとユーザーの間を仲介し、 何が起きているかをユーザーが理解できる形で説明しなければなりません。 ユーザーエージェントが自動的に、またはユーザーの代理で何らかの行動を行う場合は、 その行動やその結果を明確に伝える必要があります。
ユーザーエージェントは、説明のために テキスト・許可プロンプト・インジケーター・プレビュー・その他のインターフェース要素など 複数の手法を使ってもかまいません。 これらの要素の配置や、何か強調が必要かどうかも検討してください。
典型的な例として、ユーザーエージェントがWebサイトが暗号化接続で提供されているかどうかを示すことが挙げられます。 これは時と共に発展してきており、安全でないサイトには壊れた錠前アイコンを表示したものから、 一部のユーザーエージェントではURLバーに「安全でない」と明示するものまであります。
Media Capture and Streamsのような仕様では、 プライバシーインジケーター要件 などにより、ユーザーエージェントが特定の種類のWebサイトの挙動を説明することが求められていますが、 ユーザーが他の挙動について知る必要がある場合も、仕様が特にその挙動に言及していなくても 同じ技術を使うべきです。
誠実なユーザーエージェントは、ユーザーに事実を伝えるために積極的に働きます。 単に嘘を避けるだけではありません。 その説明は、 現在の状態や予想される結果を明確に伝え、 婉曲的または曖昧な表現を避け、 機微な操作が行われている際にはそれが明らかになるようにすべきです。
ユーザーエージェントは、これらの説明をいつ、どのくらいの頻度で表示するかを選択し、 説明が役立つタイミングで届き注意をそらさないようにしなければなりません。 またユーザーが、判断を下すかどうか、いつ下すかを制御できることも保証してください。
たとえばWebサイトが位置情報や音声録音のような長期間有効な権限を使っている場合、 ユーザーエージェントはURLバーにインジケーターアイコンを表示することで 何が起こっているかを説明できます。
3.3. 忠誠
ユーザーエージェントはユーザーの利益を 実装者や他の第三者の利益よりも優先しなければなりません。
公平で事前に合意された支払いである限り、 ユーザーエージェントがそのサービスの対価を徴収しても 忠誠心とは両立します。
またユーザーエージェントは 特定のページのサービスを受けるために信頼できるコミットメントをページに伝える役割を果たせます。 サービス獲得後もそのコミットメントを維持しても不忠実とはなりません。
ユーザーエージェントは、ユーザーが他のユーザーエージェントへ切り替えることを妨げてはなりません。 例えば、ユーザーデータへのアクセスをブロックしたり、エクスポートや保存の際に ポータビリティを妨げるような方法を取ってはいけません。 これはID情報、ブックマーク、履歴、パスワード、パスキー等の資格情報も含みます。 ユーザーエージェントが基盤のOSに 資格情報を保存している場合は、他のユーザーエージェントからのアクセスを ユーザーが許可できる方法が必要です。
4. 謝辞
Infra Standard には ユーザーエージェントの初期定義で、 Privacy Principlesには これらの義務の初期バージョンで感謝します。