言われて、たった今知りましたので首釣ってきます。 (修正して、該当コードは削除しました)

以下に言い訳を記す。 (昔の話と思って再確認したら去年の話だったでござる)

いいわけ

Blogger って2012年から公式に特定国に対するコンテンツ非表示 が始まったわけだが、 そのためにアクセス元に応じてドメイン名が変わるという施策が導入された。

いまはガジェット類その他何も使っていないので関係ないが、 当時確か何らかの問題が発生したので、 下記コードを投入して、.com にドメイン名を強制するようにした。 そういえば、暫定的な対処だった。

<script type='text/javascript'>
  if (location.host.indexOf('.com') == -1) location.href = location.href.replace(location.host + '/', 'cat-in-136.blogspot.com/ncr/');
</script>

方法は簡単で http://ほげほげ.blogspot.jp/http://ほげほげ.blogspot.com/ncr/ にリダイレクトしてやると、 その後 http://ほげほげ.blogspot.com/ になるという作戦。

だが、これは標題の通り

  • JavaScript を有効
  • Cookie 無効(またはドメイン名指定での拒否)

で無限リダイレクトしてしまう。

ブラウザには、セキュリティ上の理由から HTTP-Redirect の無限リダイレクト制限はあるが、 JavaScript を介しているのでこれが効かない。

具体的には下記の通り無限ループする。 下記アクセスをした場合に攻撃者と見なされるかどうかは不明。

  1. まず http://ほげほげ.blogspot.com/ にアクセス
  2. NCR クッキーがないならば、国別ドメインにリダイレクト。日本からの場合は、http://ほげほげ.blogspot.jp/ にリダイレクト
  3. JavaScript が有効なので、コードが実行されて http://ほげほげ.blogspot.com/ncr/ に転送
  4. Cookie が無効なので、NCR クッキーが発行されない。
  5. 2に戻る。

たぶん上の施策をするとしてもクッキーの有無(navigator.cookieEnabled)を確認するべきであった。 ただしが、これでも blogspot.com は許可していても国別ドメインの方は許可していないならば、やはり無限 redirect する。

if (navigator.cookieEnabled) {
  if (location.host.indexOf('.com') == -1) {
    location.href = location.href.replace(location.host + '/', 'ほげほげ.blogspot.com/ncr/');
  }
} else {
  // この処理が呼ばれるときに cookieEnabled が無効だった場合は対策方法はない。
  // 独自ドメインを取得するか、Blogger から逃げるかのみ。
}

参考文献