Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
本当は難しいPSL
Search
Masahiro Honma
November 22, 2019
Technology
3
4.1k
本当は難しいPSL
吉祥寺.pm のアンカンファレンスの資料です。
https://kichijojipm.connpass.com/event/152180/
Masahiro Honma
November 22, 2019
Tweet
Share
More Decks by Masahiro Honma
See All by Masahiro Honma
ARA に捧げる鎮魂歌
hiratara
0
2.7k
偶然見つけたEncode.pmのバグ
hiratara
1
370
Rustに入門したくて!
hiratara
0
730
Haskellを使おう
hiratara
3
2.9k
Lens : Smart setter for immutable data
hiratara
1
790
Other Decks in Technology
See All in Technology
EMからVPoEを経てCTOへ:マネジメントキャリアパスにおける葛藤と成長
kakehashi
PRO
9
1.6k
OpenClawで回す組織運営
jacopen
3
690
マルチプレーンGPUネットワークを実現するシャッフルアーキテクチャの整理と考察
markunet
2
230
[2026-03-07]あの日諦めたスクラムの答えを僕達はまだ探している。〜守ることと、諦めることと、それでも前に進むチームの話〜
tosite
0
170
事例に見るスマートファクトリーへの道筋〜工場データをAI Readyにする実践ステップ〜
hamadakoji
1
290
ランサムウエア対策してますか?やられた時の対策は本当にできてますか?AWSでのリスク分析と対応フローの泥臭いお話。
hootaki
0
110
Google系サービスで文字起こしから勝手にカレンダーを埋めるエージェントを作った話
risatube
0
130
NewSQL_ ストレージ分離と分散合意を用いたスケーラブルアーキテクチャ
hacomono
PRO
1
160
オレ達はAWS管理をやりたいんじゃない!開発の生産性を爆アゲしたいんだ!!
wkm2
4
490
Security Diaries of an Open Source IAM
ahus1
0
210
マルチロールEMが実践する「組織のレジリエンス」を高めるための組織構造と人材配置戦略
coconala_engineer
3
710
SaaSからAIへの過渡期の中で現在、組織内で起こっている変化 / SaaS to AI Paradigm Shift
aeonpeople
0
120
Featured
See All Featured
Building Flexible Design Systems
yeseniaperezcruz
330
40k
Large-scale JavaScript Application Architecture
addyosmani
515
110k
jQuery: Nuts, Bolts and Bling
dougneiner
65
8.4k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
122
21k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
460
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
68
[SF Ruby Conf 2025] Rails X
palkan
2
820
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
130
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
9.9k
Abbi's Birthday
coloredviolet
2
5.3k
Code Reviewing Like a Champion
maltzj
528
40k
Transcript
本当は難しいPSL hiratara
問題). Chromeのアドレスバーに “吉祥寺.pm” と入れて検索す るとどうなる?
答え: http://吉祥寺.pm へ飛んでイラッとする
問題). Chromeのアドレスバーに “吉祥寺.pm20” と入れて検 索するとどうなる?
答え: 吉祥寺.pm20 を検索した結果が表示される
問題: 次のうちイラッとせず検索できる文字列は? • city.sapporo.jp • city.kichijoji.jp • town.nagoya.jp • town.kyoto.jp
• 村.福岡.jp • 村.沖縄.jp • 高校.教育.香港 • こんにちわ.世界 • δγ.ελ • jcode.pl 答え
Public Suffix List (PSL) とは (1) • https://publicsuffix.org/ • 2008年発祥
• ドメインを登録可能な接尾辞の一覧 例: com, net co.jp, ne.jp
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 不可
PSLの用途 • Cookieの制御 • Chromeのキーワード or URL判定 • URLバーでのドメインのハイライト •
(任意のアプリケーションで)root domainのバリデーション
PSL の構造 • 1行に1つ定義が書かれている • ピリオド区切りでPublic Suffixを記述する 例: co.jp •
ワイルドカードが使える 例: *.nagoya.jp • 除外指定ができる 例: !city.nagoya.jp
town.nagoya.jpでイラッとしなくて済む理由 • *.nagoya.jp のルールが適用できるので、これはPublic Suffix • 除外ルール !city.nagoya.jp にも当てはまらない •
Public Suffix なので、登録不可能なドメインである→URLではない
city.yokohama.jpでイラッとさせられる理由 • *.yokohama.jp のルールが適用できる • しかし、除外ルール !city.yokohama.jp に合致するため、 Public Suffix
は yokohama.jp • yokohama.jp 配下に登録可能なドメイン → URLである
アプリケーションからPSLを使う C, C# Elixir, Erlang, Go, Haskell, Java, JavaScript, TypeScript,
Lua, .NET, Objective-C, Perl, PHP, Python, Ruby, Rust, Swift https://publicsuffix.org/learn/
PSLの辛み • 人手による管理である https://github.com/publicsuffix/list • 静的にコンパイルして組み込む仕組みである ◦ 更新までに時間がかかる • ワイルドカード、除外ルールが割と複雑
◦ 単純な後方一致が使えない • リストが恐ろしく巨大 ◦ 12,987行もある ◦ .jp だけで 1,795行もある
問題: nagoya.jp は Public Suffix だろうか? • 2ラベルからなるので、 *.nagoya.jp というルールには合致しない
• jp というルールに合致する。よって jp が Public Suffix • nagoya.jp は jp 以下に登録可能 → URL
結果: Chrome では Public Suffix 扱い
Public Suffixの仕様とブラウザの挙動は違う • Chromeでは、*.x が PSL に含まれる場合に x も PSL
に含まれるとする • platform.sh problem と呼ばれる問題 https://wiki.mozilla.org/Public_Suffix_List/platform.sh_Problem ◦ PSLの標準アルゴリズムとブラウザの一般的な挙動が異なる
問題: platform.sh は Public Suffix だろうか? • 2ラベルからなるので、厳密には *.platform.sh というルールには合致しない
• しかし、 Chrome では platform.sh が Public Suffix と解釈される • よって、URLではなく検索語句として扱われるはず
結果: URLとして扱われる
理由: Chromiumのコード見るとパッチ当ててる https://github.com/chromium/chromium/blob/825b9883f937af7ece0967553c1eacb85e3dd254/net/base/registry_controlled_domain s/effective_tld_names.dat#L12487
まとめ • ドメインの正当性はPSLというもので判定されている • PSLは手作業で更新され、静的にブラウザに組み込まれている • 複雑で、巨大で、例外があって、辛い (特にライブラリ作る時)