[インデックス 15053] ファイルの概要
このコミットは、Go言語の実験的なexp/cookiejar
パッケージ内のjar.go
ファイルにおけるドキュメントコメントの更新に関するものです。具体的には、PublicSuffixList
のドキュメントコメントに含まれる例が、Public Suffix Listの公式ウェブサイトの変更に合わせて修正されました。
コミット
commit 6799b773ebbd53c2c6d3d36e5b58e6efd0f4dc80
Author: Nigel Tao <nigeltao@golang.org>
Date: Thu Jan 31 14:12:43 2013 +1100
exp/cookiejar: update PublicSuffixList doc comment to match the
examples at http://publicsuffix.org/.
That website previously listed pvt.k12.wy.us, but that was an error,
as confirmed by correspondance with submissions@publicsuffix.org, and
the website was fixed on 2013-01-23.
R=adg
CC=dr.volker.dobler, golang-dev
https://golang.org/cl/7241053
GitHub上でのコミットページへのリンク
https://github.com/golang/go/commit/6799b773ebbd53c2c6d3d36e5b58e6efd0f4dc80
元コミット内容
このコミットは、exp/cookiejar
パッケージのPublicSuffixList
のドキュメントコメントを更新し、http://publicsuffix.org/
の例と一致させることを目的としています。
以前、publicsuffix.org
のウェブサイトにはpvt.k12.wy.us
が例として記載されていましたが、これは誤りであることがsubmissions@publicsuffix.org
とのやり取りで確認され、2013年1月23日にウェブサイトが修正されました。このコミットは、その修正を反映したものです。
変更の背景
この変更の背景には、Public Suffix List (PSL) の公式ウェブサイトであるpublicsuffix.org
における情報の修正があります。PSLは、ドメイン名の「パブリックサフィックス」を定義するリストであり、ウェブブラウザやその他のアプリケーションがクッキーのセキュリティやドメインの有効性を判断する際に非常に重要です。
Go言語のexp/cookiejar
パッケージは、HTTPクッキーの管理を扱うための実験的な実装であり、その中でPSLの概念を利用しています。PublicSuffixList
インターフェースのドキュメントコメントには、PSLの動作を説明するための例が含まれていました。
しかし、その例の一つであるpvt.k12.wy.us
が、実際にはPSLの誤ったエントリであったことが判明しました。これは、publicsuffix.org
の管理チームとのやり取りを通じて確認され、公式ウェブサイト自体が2013年1月23日に修正されました。
このコミットは、Goのドキュメントが最新かつ正確な情報を提供し続けるために、公式ウェブサイトの修正に追従して、誤った例を正しい例に更新することを目的としています。これにより、開発者がPublicSuffixList
の概念を理解する際に、誤解を招く情報に触れることを防ぎます。
前提知識の解説
Public Suffix List (PSL)
Public Suffix List (PSL) は、インターネット上のドメイン名における「パブリックサフィックス」を定義するリストです。パブリックサフィックスとは、組織がドメイン名を登録できるドメインの最上位部分を指します。例えば、.com
、.co.uk
、.jp
などがこれに該当します。
PSLの主な目的は、セキュリティとプライバシーの向上です。特に、ウェブブラウザがクッキーを設定する際に、悪意のあるウェブサイトが他のドメインのクッキーを盗んだり、ユーザーを追跡したりするのを防ぐために使用されます。
PSLが解決する問題の例:
- クッキーのセキュリティ:
example.com
というドメインのウェブサイトが、sub.example.com
というサブドメインに対してクッキーを設定することは一般的です。しかし、もしexample.com
がパブリックサフィックスであった場合、attacker.example.com
という悪意のあるサイトがexample.com
全体にクッキーを設定し、他のサブドメインのクッキーを読み取ることができてしまう可能性があります。PSLは、com
がパブリックサフィックスであり、example.com
はそうではないことを明確にすることで、このような攻撃を防ぎます。 - ドメインの有効性判断: PSLは、ドメイン名が有効な登録可能なドメインであるかどうかを判断するのにも役立ちます。
PSLは、Mozillaによって管理されており、世界中の様々なトップレベルドメイン (TLD) やセカンドレベルドメイン (SLD) の情報が含まれています。リストは定期的に更新され、新しいドメインや変更が反映されます。
Go言語のexp/cookiejar
パッケージ
exp/cookiejar
は、Go言語の標準ライブラリの一部として提供されている、HTTPクッキーを管理するための実験的なパッケージです。このパッケージは、HTTPリクエストとレスポンス間でクッキーの状態を維持し、セッション管理や認証などの機能を実現するために使用されます。
このパッケージの重要な機能の一つが、PSLを利用したクッキーのドメイン制限です。cookiejar
は、PSLを参照して、クッキーが設定されるドメインがパブリックサフィックスではないことを確認します。これにより、セキュリティ上の脆弱性を防ぎ、クッキーが意図しない範囲で共有されることを防ぎます。
exp
というプレフィックスは、このパッケージがまだ実験段階であり、APIが将来変更される可能性があることを示しています。しかし、その基本的な機能とPSLの利用方法は、Go言語におけるセキュアなHTTP通信の実現において重要な役割を果たしています。
技術的詳細
このコミットは、Go言語のexp/cookiejar
パッケージ内のjar.go
ファイルにあるPublicSuffixList
インターフェースのドキュメントコメントを修正しています。
jar.go
ファイルは、http.CookieJar
インターフェースの実装を提供し、HTTPクッキーの保存と取得を管理します。この実装は、クッキーのセキュリティとプライバシーを確保するために、Public Suffix List (PSL) の概念を利用しています。
PublicSuffixList
インターフェースは、与えられたドメインのパブリックサフィックスを返すメソッドを定義しています。このインターフェースのドキュメントコメントは、その機能と期待される振る舞いを説明するための例を含んでいます。
変更前のドキュメントコメントでは、bar.pvt.k12.wy.us
のパブリックサフィックスがpvt.k12.wy.us
であると例示されていました。しかし、これはPublic Suffix Listの公式ウェブサイトで誤って記載されていた情報に基づいています。pvt.k12.wy.us
は、実際にはワイオミング州のK-12教育機関に関連するドメインの一部であり、PSLのルール上、パブリックサフィックスとして扱われるべきではありませんでした。
publicsuffix.org
の管理チームとのやり取りの結果、この誤りが確認され、2013年1月23日に公式リストからpvt.k12.wy.us
が削除されました。
このコミットは、この公式リストの修正に追従し、ドキュメントコメントの例をbar.pvt.k12.ma.us
に変更しました。ここで、pvt.k12.ma.us
はマサチューセッツ州のK-12教育機関に関連するドメインであり、PSLのルールに従ってパブリックサフィックスとして扱われるべきではないドメインの例として適切です。この変更により、GoのドキュメントがPSLの最新かつ正確な情報と一致するようになりました。
この修正は、コードの動作には影響を与えませんが、ドキュメントの正確性を保つ上で重要です。特に、PSLのようなセキュリティに直結する概念においては、正確な情報提供が開発者の誤解を防ぎ、よりセキュアなアプリケーション開発を促進します。
コアとなるコードの変更箇所
変更はsrc/pkg/exp/cookiejar/jar.go
ファイルの一箇所のみです。
--- a/src/pkg/exp/cookiejar/jar.go
+++ b/src/pkg/exp/cookiejar/jar.go
@@ -16,7 +16,7 @@ import (
// PublicSuffixList provides the public suffix of a domain. For example:
// - the public suffix of "example.com" is "com",
// - the public suffix of "foo1.foo2.foo3.co.uk" is "co.uk", and
-// - the public suffix of "bar.pvt.k12.wy.us" is "pvt.k12.wy.us".
+// - the public suffix of "bar.pvt.k12.ma.us" is "pvt.k12.ma.us".
//
// Implementations of PublicSuffixList must be safe for concurrent use by
// multiple goroutines.
コアとなるコードの解説
変更された行は、PublicSuffixList
インターフェースのドキュメントコメントの一部です。
元の行:
// - the public suffix of "bar.pvt.k12.wy.us" is "pvt.k12.wy.us".
変更後の行:
// - the public suffix of "bar.pvt.k12.ma.us" is "pvt.k12.ma.us".
この変更は、bar.pvt.k12.wy.us
というドメインの例をbar.pvt.k12.ma.us
に変更しています。これは、publicsuffix.org
のウェブサイトでpvt.k12.wy.us
が誤ってパブリックサフィックスとしてリストされていた問題が修正されたことに対応するものです。
このドキュメントコメントは、PublicSuffixList
インターフェースの目的と、それがどのように機能するかを説明するためのものです。このインターフェースは、与えられたドメイン名からそのパブリックサフィックスを抽出する機能を提供します。例えば、example.com
のパブリックサフィックスはcom
であり、foo1.foo2.foo3.co.uk
のパブリックサフィックスはco.uk
です。
この例の修正は、コードの実行には全く影響を与えません。これは純粋にドキュメントの正確性を向上させるための変更であり、開発者がPublicSuffixList
の概念を理解する際に、最新かつ正確な情報に基づいた例を参照できるようにすることを目的としています。
関連リンク
- Public Suffix List 公式ウェブサイト: https://publicsuffix.org/
- Go言語の
exp/cookiejar
パッケージのドキュメント (当時のものに近い情報源を探す必要がありますが、現在は標準ライブラリに統合されています):- Go 1.0.3 (コミット当時のバージョンに近い): https://pkg.go.dev/go1.0.3/exp/cookiejar
- 現在の
net/http/cookiejar
パッケージ: https://pkg.go.dev/net/http/cookiejar
参考にした情報源リンク
- Public Suffix List: https://publicsuffix.org/
- Go言語の公式ドキュメント: https://go.dev/
- GitHubのコミットページ: https://github.com/golang/go/commit/6799b773ebbd53c2c6d3d36e5b58e6efd0f4dc80
- Go CL 7241053: https://golang.org/cl/7241053 (Goのコードレビューシステムにおける変更リスト)
- Wikipedia - Public Suffix List: https://ja.wikipedia.org/wiki/Public_Suffix_List (日本語での概要理解に役立つ)
- Mozilla Public Suffix List Project: https://wiki.mozilla.org/Public_Suffix_List (PSLの背景と目的に関する詳細情報)
- RFC 6265 (HTTP State Management Mechanism): https://datatracker.ietf.org/doc/html/rfc6265 (HTTPクッキーの仕様に関する詳細)