本当は難しいPSL
by
Masahiro Honma
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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は手作業で更新され、静的にブラウザに組み込まれている ● 複雑で、巨大で、例外があって、辛い (特にライブラリ作る時)