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
<title><a id="</title>君はこのHTMLをパースできるか"></a></t...
Search
pizzacat83
July 27, 2026
Programming
100
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
<title><a id="</title>君はこのHTMLをパースできるか"></a></title> #雑LT_study
[雑LT_study](
https://web-study.connpass.com/event/396644/
) (2026/07/27) の登壇資料です。
pizzacat83
July 27, 2026
More Decks by pizzacat83
See All by pizzacat83
Haskell/Servantを通してWebミドルウェアを捉え直す
pizzacat83
1
610
F#で自在につくる静的ブログサイト - 関数型まつり2025
pizzacat83
1
680
Language Server と喋ろう – TSKaigi 2025
pizzacat83
4
3.5k
開発者向けツールを魔改造してセキュリティ診断ツールを作っている話 - 第1回 セキュリティ若手の会 LT
pizzacat83
0
2.3k
自分好みの TS バンドラを Rust で作れる!Deno の内部ライブラリの活用 – Denoで変わるランタイムの景色 実践事例 Lunch LT
pizzacat83
5
1.1k
Deno で作る快適な “as Code” プラットフォーム – TSKaigi 2024
pizzacat83
4
2.1k
Other Decks in Programming
See All in Programming
アルゴリズムは何を圧縮しているのか ─ Haskell から育った「圧縮代数」というメンタルモデル
naoya
16
3.6k
AIキャラアプリkaiwaの低遅延音声通話基盤をどう作ったか - AWS Gravitonで支える低遅延・低コストAI Agent基盤
mogamit
0
190
Terraform標準の組織で AWS CDKをどう使うか
mu7889yoon
1
380
そこに3びきプロダクトがいるじゃろう——生成AI時代における“価値が届かない理由”の構造
kosuket
0
170
地域 SRE コミュニティ最前線 - ホンマでっかSRE勉強会
tk3fftk
0
280
GDG Korea Android: 2026 I/O Extended ~ What's new in Android development tools
pluu
0
180
【やさしく解説 設計編・中級 #4】ルールの寿命と、システムの年輪
panda728
PRO
2
170
使用 Meilisearch 建立新聞搜尋工具
johnroyer
0
180
仕様書を書く前にハーネスを作る - Agent Native開発は「探索を速く、判定を固く」
gotalab555
1
320
なぜ関数型プログラミングで「型」と「証明」が語られるのか #fp_matsuri
kajitack
3
1k
Lean は証明の正しさを確認するためだけのツールって思ってませんか?
inoueasei
1
110
吝嗇家のためのAI活用 / AI development for miser - ChatGPT + Issue Driven Development
tooppoo
0
200
Featured
See All Featured
Speed Design
sergeychernyshev
33
1.9k
30 Presentation Tips
portentint
PRO
1
350
Claude Code のすすめ
schroneko
67
230k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.4k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.5k
Fashionably flexible responsive web design (full day workshop)
malarkey
408
67k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.3k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
660
Product Roadmaps are Hard
iamctodd
55
12k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.8k
Designing for Timeless Needs
cassininazir
1
400
Chasing Engaging Ingredients in Design
codingconduct
0
240
Transcript
君はこのHTMLをパースできるか"></a></title> <title><a id="</title> #雑LT_study 2026/07/27 pizzacat83 1
とりあえずブラウザにパースしてもらおう <title><a id="</title> 君はこのHTMLをパースできるか"></a></title> (ブラウザで開いて DevTools で DOM ツリー見てみましょう) 2
第2問! 君はこのHTMLをパースできるか"></a></div> <div><a id="</div> タグの代わりに div タグにしてみた (ブラウザで開いて DevTools で
DOM ツリー見てみましょう) title 3
は、 今 <title> の中にいるかどうかで パーサーの振る舞いがまるで違う <a id="</X>hoge"></a> 4
HTML パーサーの仕様を見ると…… 5 引用元: https://html.spec.whatwg.org/multipage/parsing.html
HTML パーサーの仕様をもっと見ると…… 目次がもうデカい!→ 字句解析器: 84状態の状態機械 構文解析器: 21状態の状態機械 (& タグ毎大量分岐) 引用元:
https://html.spec.whatwg.org/multipage/parsing.html 6
HTML なんもわかってなかったわ! 自分が書いた HTML が意図通りにパースされるか不安になってきた テンプレートエンジンが生成した HTML が意図通りにパースされるのかも不安 ???「DOM ツリー作って
.innerHTML 取れば 完璧な HTML になるのでは」 7
びっくり事実: DOM ツリーを シリアライズしてパースすると違う木になりうる ……と、仕様に注意書きがある 8 引用元: https://html.spec.whatwg.org/multipage/parsing.html
びっくり事実: DOM ツリーを シリアライズしてパースすると違う木になりうる 実例もある! 9
この挙動使ってサニタイザすり抜けができた (今は修正済み) 詳細:「HTMLパーサー自作で理解するmXSS (CVE-2019-16728・CVE-2020-6413 篇)」 10
おわりに HTMLの仕様は膨大、複雑怪奇。でも パーサーを自分で書いてみると、意外と読み解ける ブラウザ自作を通して、Web仕様の理解を深めよう! 11