hoge.example.com
でユーザが作成したサイトをホスティングして、任意のJavaScriptを実行できる状態にしたいケース。
サブドメインを分けることで、Fetch APIなどはSame Origin Policyを基本にするため、別のサブドメインや example.com
に対するリクエストなどはできなくなる。
一方で、CookieはSame Origin Policyではない。
デフォルトでは、hoge.example.com
から example.com
に対するCookieが設定できる。
これを利用したDoS(Cookie Bomb)やこの挙動を組み合わせた別の脆弱性に利用できる場合がある。
- The Cookie Monster in Your Browsers - Speaker Deck
- Cookie の Domain 属性と SameSite 属性の違い - 完全に理解した.com
- Breaking GitHub Private Pages for $35k
📝 example.com
がログイン機能などを持っているときにこの問題は起きやすい。セッションなどもないただのサイトの場合は、どこまで問題になるかの知見はない。
次のパターンで、サブドメインを分けた方にホスティングを行なっているサービス(ここではexample.com
の運営者が運用しているサービスのこと)への影響を回避できる。
- サブドメインだけを使うパターン
- hoge.example.com をクライアントサイト
- example.com は使わない(別ドメインのLPなどへリダイレクト)
- Public Suffix Listを使うパターン
- hoge.example.com をクライアントサイト
- example.com をLP
- PSLにexample.comを登録する
サブドメインだけを使うパターンはexample.com
は使わないで、ユーザーホスティングサイト専用のものとして扱うということ。
Public Suffix Listを使うパターンは、PSLに登録することでPSLを利用するブラウザが、サブドメインを別の"Site"として認識させる方法。
PSLは申請性でむやみに増やすと大変なので、ホスティング専用のドメインを使う方が良さそう。
- Public Suffix List の用途と今起こっている問題について | blog.jxck.io
- なぜ我々はsession.cookieを変更しなければならなかったのか - BASEプロダクトチームブログ
- GitHub
- github.io と github.com
- https://atmarkit.itmedia.co.jp/ait/articles/1304/08/news115.html
- Netlify
- netlify.app と netlify.com
- https://answers.netlify.com/t/changes-coming-to-netlify-site-urls-com-to-app/8918
- Shopify
もっと詳しいケーススタディはコメント欄に書いてくれる