$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
本当は難しいPSL
Search
Masahiro Honma
November 22, 2019
Technology
3
3.9k
本当は難しい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
偶然見つけたEncode.pmのバグ
hiratara
1
110
Rustに入門したくて!
hiratara
0
690
Haskellを使おう
hiratara
3
2.7k
Lens : Smart setter for immutable data
hiratara
1
720
Other Decks in Technology
See All in Technology
Autonomous Database サービス・アップデート (FY25)
oracle4engineer
PRO
0
250
マルチプロダクト、マルチデータ基盤での Looker活用事例 〜BQじゃなくてもLookerはいいぞ〜
gappy50
0
140
EthernetベースのGPUクラスタ導入による学びと展望
lycorptech_jp
PRO
0
570
振る舞い駆動開発(BDD)における、テスト自動化の前に大切にしていること #stac2024 / BDD formulation
nihonbuson
2
670
システムリプレイスプロジェクト発足から7年、改めてコスト最適化に向き合う / replace and cost optimization
takumi
1
480
ゆるSRE勉強会 #8 組織的にSREが始まる中で意識したこと
abnoumaru
2
1.1k
Advancing the 3D Geospatial Ecosystem in Japan via Global Collaborations
osgeojp
0
160
高品質と高スピードを両立させるソフトウェアQA/Software QA that Supports Agility and Quality
goyoki
8
1.3k
12/3(火)のBedrockアプデ速報(re:Invent 2024 Daily re:Cap #2 with AWS Heroes)
minorun365
PRO
4
130
asumikamというカンファレンスオーガナイザの凄さを語る / The Brilliance of Asumikam
tomzoh
1
290
2024/11/29_失敗談から学ぶ! エンジニア向けre:Invent攻略アンチパターン集
hiashisan
0
430
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
5
52k
Featured
See All Featured
Producing Creativity
orderedlist
PRO
341
39k
A Tale of Four Properties
chriscoyier
157
23k
Intergalactic Javascript Robots from Outer Space
tanoku
269
27k
How to train your dragon (web standard)
notwaldorf
88
5.7k
Designing for humans not robots
tammielis
250
25k
How to Think Like a Performance Engineer
csswizardry
21
1.2k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
365
24k
The Cult of Friendly URLs
andyhume
78
6.1k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
7k
Facilitating Awesome Meetings
lara
50
6.1k
What's in a price? How to price your products and services
michaelherold
243
12k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
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は手作業で更新され、静的にブラウザに組み込まれている • 複雑で、巨大で、例外があって、辛い (特にライブラリ作る時)