カランのブログ

ソフトウェアエンジニア / 台湾人 / 福岡生活

今のモード ライト

ウェブを閲覧する際、私たちはしばしばサブドメインを使用してサービスの内容を区別します。例えば:

  • music.youtube.com/ → YouTube Musicにアクセス
  • youtube.com → https://www.youtube.com/ → YouTubeにアクセス

明らかに、ドメイン名がyoutube.comであるため、これら2つのドメインはYouTubeによって所有されていることがすぐにわかります。そのため、中のコンテンツを信頼して安心して閲覧できます。では、2つのドメインが同じ所有者に属しているかどうかを判断するにはどうすればよいでしょうか?URLにyoutube.comの文字列が含まれているかどうかで判断するのでしょうか?

明らかに、これは有効な区別方法ではありません。例えば:

  • youtube.kalan.dev
  • youtube.com.kalan.dev

これらの2つのサブドメインは、youtubeという文字列を含んでいますが、すぐにわかりますが、これらはYouTubeが所有するドメインではありません。

したがって、サブドメインの判別方法は右から左に探していくべきであり、左から右ではありません。ソフトウェアエンジニアにとっては、サブドメインを判別するのは簡単ですが、ドメインの動作メカニズムを理解していない人々にとっては、サブドメインを使用したフィッシングは罠に陥りやすいものです。

次の問題は、右から左に何個の部分を探すべきかということですか?blog.kalan.devという例を考えましょう。ドメイン名はkalan.devであり、次のようにコードを書くことができます:

const host = 'blog.kalan.dev'.split('.').reverse().slice(0, 2).reverse().join('.')

しかし、これは正しい書き方ではありません。例えば:

先ほどの書き方で見ると、co.ukはドメイン名であり、www.ebayとwww.googleはサブドメインであり、したがって2つのウェブサイトは.co.ukに属しているということになるでしょうか?明らかに、このような区別は間違っています。ebayはebayであり、googleはgoogleであり、これら2つのドメインはまったく異なる会社によって所有されています。これは、国コードトップレベルドメインが二次ドメインと組み合わさる場合、それらも独立したドメイン名として使用されるためです。したがって、ここでは正しい解析方法は、google.co.ukebay.co.ukを2つの独立したホストとして扱い、所有者もまったく異なるということです。

TLD(トップレベルドメイン)

トップレベルドメイン(TLD)について話しましょう。例えば、.io.dev1.orgなどのサフィックスは、ICANNが管理しており、誰でも独自のドメインを申請できます。例えば、私のkalan.dev.devをサフィックスとして使用したドメインです。

Group 25

ccTLD(国コードトップレベルドメイン)

地域に応じて使用できる対応するトップレベルドメインもあります。例えば、.tw.jpです。注意すべきは、一部の国コードが他のセカンドレベルドメインと組み合わさると、それらも独立したドメインを形成する場合があるということです。例えば:

これら2つのウェブサイトでは、momoshop.com.twとbooks.com.twがドメイン名であり、www.momoshop.com.twとwww.books.com.twがそれぞれのサブドメインです。

Group 25 (1)

eTLD(有効トップレベルドメイン)

上記の例からわかるように、一部のトップレベルドメインはセカンドレベルドメインと組み合わさってドメイン名を形成することができます(例:kalan.dev)。一方、他のトップレベルドメインは2つのドメインが結合してトップレベルドメインを形成します(.com.tw)。ブラウザはこれをどのように解析するのでしょうか?その背後にある概念は、広範なPublic Suffix List(PSL)リストを維持することです。リストに記載されているドメイン名は、有効なトップレベルドメイン(eTLD)と呼ばれます。リストはこちらで入手できます。

もう1つの一般的な用語は、eTLD+1です。これは、有効なトップレベルドメイン+セカンドレベルドメインがドメインを形成することを意味します。この例では、.com.twが有効なトップレベルドメインであり、momoshopがセカンドレベルドメインです。

検査してみましょう

SameSiteがフロントエンドアプリケーションに与える影響

ドメインの動作メカニズムがフロントエンドにとって最も重要な意味を持つのは、SameSite2の判定です。2つのウェブサイトがSameSiteであるかどうかを知りたいですが、SameSiteの場合、ウェブサイトのCookieが共有される(特別なヘッダーが設定されていない場合)からです。

したがって、2つのウェブサイトのURL、kalan.hacker.comjack.hacker.comがSameSiteであるかどうかを教えてください。最初に思い浮かぶのは、これら2つのURLはhacker.comのサブドメインのように見えますが、先ほどの例と説明を読んだ後は、hacker.comがpublic suffix listに含まれているかどうかを確認する必要があります。

CookieとSameSiteに関する議論に興味がある場合は、以前に書いた記事CookieとCORSの再考も参考にしてください。

GitHubを例に挙げる

GitHubでは、リポジトリの設定によって無料でxxx.github.ioのドメインを生成することができます。例えば、私の古いブログ:kjj6198.github.io/blogです。このような場合、xxx.github.ioのCookieが相互にアクセスできないようにしたくありません。このタイプのアプリケーションでは、各xxx.github.io.github.ioのサブドメインではなく、独立したドメインであることを望んでいます。eTLDを使用することで、この問題を効果的に解決できます。また、public suffix listを確認すると、.github.ioが存在することも確認できます。

Public Suffix Listは誰が申請できますか?

publicsuffixの公式ドキュメントを見る限り、公式のガイドラインに従ってPRを送るだけで申請できます。ただし、全体のプロセスは時間がかかるようで、過去のPRを見る限り、すべて手動で審査されているようです。

ブラウザのアドレスバーについて

私のblog.kalan.devは、FirefoxとEdgeのアドレスバー上で上記のように表示されます。上の画像はFirefoxの表示で、下の画像はEdgeの表示です。

違いに気づきましたか?Edgeでは、blogのテキストの色がkalan.devと同じ色ですが、Firefoxではblogのテキストが少し薄くなっています。Firefoxのアドレスバーは、ドメイン名の色を強調しますが、EdgeとChromeはドメイン部分(サブドメインを含む)も強調します。この例では、Firefoxのアドレスバーを使用すると、blogがkalan.devのサブドメインであることがすぐにわかります。

この違いは非常に小さいですが、eTLDが含まれている場合、Firefoxのアドレスバーの機能は非常に便利です。例えば、.github.ioがeTLDであるため、kjj6198.github.io全体がドメインとなります。

次回、誰かが2つのドメインがSameSiteであるかどうか尋ねた場合は、Firefoxを開いてURLを入力し、強調表示される部分が同じかどうかを確認すると良いでしょう。同じ場合、私たちは自信を持ってSameSiteであると言えます!

Footnotes

  1. 追記ですが、.devはGoogleが登録および運営しているトップレベルドメインであり、HTTPSを使用してのみウェブページを閲覧できるように強制されています。開発者でなくても申請できるようです。

  2. SameSiteとSame originはまったく異なる概念です。

次の記事

useMemoの使い方

前の記事

WebGLを使って線を描くことは、私が想像していたよりも難しいです。

この文章が役に立つと思うなら、下のリンクで応援してくれると大変嬉しいです✨

Buy me a coffee

作者

Kalan 頭像照片,在淡水拍攝,淺藍背景

愷開 | Kalan

Kalan です。台湾出身で、2019年に日本へ転職し、福岡に住んでいます。フロントエンド開発に精通しているだけでなく、IoT、アプリ開発、バックエンド、電子工作などの分野にも挑戦しています。 最近、エレキギターを始めました。ブログを通じて、より多くの人と交流できればと思っています。気軽に絡んでください