ブログプラットフォーム-example.com
について考えてみましょう。信頼できないコンテンツをsubdomain1.example.com
とsubdomain2.example.com
でホストしたいと考えています。
デフォルトでは、同じOriginポリシーはこれら2つのサブドメイン間の通信を許可しません。 SOP以外に、subdomain1.example.com
がsubdomain2.example.com
のプロパティを読み取ったり操作したりできないようにするために必要なセキュリティ上の考慮事項は何ですか?
たとえば、各サブドメインのセッションCookieをその特定のサブドメインにスコープすることができます。
最新のWebテクノロジーはcompleteドメイン名を1つのセキュリティ境界として使用していますが、HTTP CookieはRFCに根ざしていない古いテクノロジーですが、歴史と貧しい孤立の世界から進化しました。
Cookieは、正確なドメイン名の一致、またはスーパードメインによって分離できます。そのWebページで、私のブラウザは、ドメイン_stackexchange.com
_のスーパードメインであるCookieの束があることを通知します。ページ(_https://security.stackexchange.com/questions/227598/ideas-for-subdomains-isolation
_)。
これらのCookieの共有はtheホスティングユーザーが提供する問題のある問題であり、恣意的で完全に安全でないHTTPコンテンツです
スーパードメインで。
これが唯一の問題ではありません。既存のCookieが読み取られるだけでなく(HttpOnlyフラグによって阻止される可能性があります)、これらのCookieがない場合でも、アクティブなHTMLコンテンツがスーパーで共有される新しいCookieを設定する可能性があります-ドメイン。これらのCookieはスーパードメインに関連付けられます。
HTTPプロトコルの極端な弱点は、HTTPサーバーのみがブラウザにCookieの範囲を設定するときに、Cookieの範囲を通知し、ブラウザがそれを繰り返すことはないことを意味します情報。これは、HTTPサーバーがCookieのオリジンを判別する方法がないことを意味します:どの完全なドメイン名がCookieを設定し、そのスコープは何ですか。ブラウザーにはその情報があり、エンドユーザーはそれにアクセスできます(たとえば、ページインスペクターを使用すると、ページの読み込み中に設定または送信されたすべてのCookieのリストを表示できます)が、サーバーにはありません。
[注意:
Googleは_googleusercontent.com
_を設定しました。理由:すべての完全な(HTMLフラグメントではなく、Webページ全体)ユーザーコンテンツが、ブラウザーによって信頼されているドメイン(_webcache.googleusercontent.com
_)から完全に異なるドメイン(_google.com
_)から提供されている(SOMECODE)__):Webクライアントがこれらのドメインを混同する可能性はゼロです。エンドユーザーのみが(存在しない)_https://webcache.googleusercontent.com/zfzefzef
_に移動できます
ドメイン証明書が原因であることを確認します
_CN = *.googleusercontent.com
O = Google LLC
L = Mountain View
S = California
C = US
_
(別のヒントは、証明書内のaltNamesのリストであり、その多くはGoogleのものとして非常に認識可能です。)
これは、ドメインが別のエンティティと同じエンティティによって所有されていることをエンドユーザーが特定するために必要な作業です。
エンドノート]
クライアントはブラウザに特定のCookieのソースであるエンティティを通知しないため、サーバーは、サブドメインによって設定された同じ名前のCookieによって混乱する可能性があります。複数のドメインに同じ名前のCookieがある場合、ブラウザーの動作は予測できません。複数のCookie
ヘッダーがブラウザー依存の順序であるか、すべてのCookieが1つのヘッダーに連結されています。 (_cookie_name_RANDOM_SEQUENCE
_のように)Cookie名の一部を攻撃者が予測できないようにすることで、少なくとも複数のCookieの問題の連結を回避できますが、Cookieの発行元は認証されません。
結論:安全のためにdonot内部(サブドメイン内)の任意の場所でアクティブな可能性のあるHTMLコンテンツ(Javascriptが動作するもの)を許可します信頼できるドメイン。