本当は難しいPSL
by
Masahiro Honma
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
本当は難しいPSL hiratara
Slide 2
Slide 2 text
問題). Chromeのアドレスバーに “吉祥寺.pm” と入れて検索す るとどうなる?
Slide 3
Slide 3 text
答え: http://吉祥寺.pm へ飛んでイラッとする
Slide 4
Slide 4 text
問題). Chromeのアドレスバーに “吉祥寺.pm20” と入れて検 索するとどうなる?
Slide 5
Slide 5 text
答え: 吉祥寺.pm20 を検索した結果が表示される
Slide 6
Slide 6 text
問題: 次のうちイラッとせず検索できる文字列は? ● city.sapporo.jp ● city.kichijoji.jp ● town.nagoya.jp ● town.kyoto.jp ● 村.福岡.jp ● 村.沖縄.jp ● 高校.教育.香港 ● こんにちわ.世界 ● δγ.ελ ● jcode.pl 答え
Slide 7
Slide 7 text
Public Suffix List (PSL) とは (1) ● https://publicsuffix.org/ ● 2008年発祥 ● ドメインを登録可能な接尾辞の一覧 例: com, net co.jp, ne.jp
Slide 8
Slide 8 text
Public Suffix List (PSL) とは (2) ● Set-Cookie可能ドメインの判定のため作られた 例: www.fout.co.jp Set-Cookie 可能 fout.co.jp Set-Cookie 可能 co.jp Set-Cookie 不可 jp Set-Cookie 不可
Slide 9
Slide 9 text
PSLの用途 ● Cookieの制御 ● Chromeのキーワード or URL判定 ● URLバーでのドメインのハイライト ● (任意のアプリケーションで)root domainのバリデーション
Slide 10
Slide 10 text
PSL の構造 ● 1行に1つ定義が書かれている ● ピリオド区切りでPublic Suffixを記述する 例: co.jp ● ワイルドカードが使える 例: *.nagoya.jp ● 除外指定ができる 例: !city.nagoya.jp
Slide 11
Slide 11 text
town.nagoya.jpでイラッとしなくて済む理由 ● *.nagoya.jp のルールが適用できるので、これはPublic Suffix ● 除外ルール !city.nagoya.jp にも当てはまらない ● Public Suffix なので、登録不可能なドメインである→URLではない
Slide 12
Slide 12 text
city.yokohama.jpでイラッとさせられる理由 ● *.yokohama.jp のルールが適用できる ● しかし、除外ルール !city.yokohama.jp に合致するため、 Public Suffix は yokohama.jp ● yokohama.jp 配下に登録可能なドメイン → URLである
Slide 13
Slide 13 text
アプリケーションからPSLを使う C, C# Elixir, Erlang, Go, Haskell, Java, JavaScript, TypeScript, Lua, .NET, Objective-C, Perl, PHP, Python, Ruby, Rust, Swift https://publicsuffix.org/learn/
Slide 14
Slide 14 text
PSLの辛み ● 人手による管理である https://github.com/publicsuffix/list ● 静的にコンパイルして組み込む仕組みである ○ 更新までに時間がかかる ● ワイルドカード、除外ルールが割と複雑 ○ 単純な後方一致が使えない ● リストが恐ろしく巨大 ○ 12,987行もある ○ .jp だけで 1,795行もある
Slide 15
Slide 15 text
問題: nagoya.jp は Public Suffix だろうか? ● 2ラベルからなるので、 *.nagoya.jp というルールには合致しない ● jp というルールに合致する。よって jp が Public Suffix ● nagoya.jp は jp 以下に登録可能 → URL
Slide 16
Slide 16 text
結果: Chrome では Public Suffix 扱い
Slide 17
Slide 17 text
Public Suffixの仕様とブラウザの挙動は違う ● Chromeでは、*.x が PSL に含まれる場合に x も PSL に含まれるとする ● platform.sh problem と呼ばれる問題 https://wiki.mozilla.org/Public_Suffix_List/platform.sh_Problem ○ PSLの標準アルゴリズムとブラウザの一般的な挙動が異なる
Slide 18
Slide 18 text
問題: platform.sh は Public Suffix だろうか? ● 2ラベルからなるので、厳密には *.platform.sh というルールには合致しない ● しかし、 Chrome では platform.sh が Public Suffix と解釈される ● よって、URLではなく検索語句として扱われるはず
Slide 19
Slide 19 text
結果: URLとして扱われる
Slide 20
Slide 20 text
理由: Chromiumのコード見るとパッチ当ててる https://github.com/chromium/chromium/blob/825b9883f937af7ece0967553c1eacb85e3dd254/net/base/registry_controlled_domain s/effective_tld_names.dat#L12487
Slide 21
Slide 21 text
まとめ ● ドメインの正当性はPSLというもので判定されている ● PSLは手作業で更新され、静的にブラウザに組み込まれている ● 複雑で、巨大で、例外があって、辛い (特にライブラリ作る時)