mixiの「青少年ユーザーへの機能制限」について。

もう何か月も前のことですが、mixiモバイル(以下mixi)を利用していると、コミュニティ機能が無効化されることがありました。
mixiからのお知らせとして、「機能制限のお知らせ」が届くんですね。

ケータイのフィルタリングサービスに加入していた場合、コミュニティ機能などが使えなくなるわけです。
加入していない場合でも、なぜか画像表示OFF設定のケータイも誤判定されてしまいました。
ここでは、その詳細を書きとめておこうと思います。

 

ケータイのフィルタリングサービスでは、mixiドメインは安全なサイトとしてホワイトリストに入っています。
しかしmixi側は、ホワイトリストに入っているmixi内で、フィルタリングサービスの有無によってコミュニティ機能などを制限しようとしました。本来なら実現する方法などないはずです。

 

まずは、この制限を導入した直後の仕様から。

mixiに接続した際、mixiはtoken(セッションIDのようなもの)を一つ生成します。
パッと見た感じ、tokenは
(おそらくSHA-1)_(UnixTime)
というフォーマットのようです。SHA-1が何を元にしたハッシュなのかは分かりませんが・・・。

接続した際に送られてくるHTMLの中に、
http://age-check.jp/check.gif?id=(mixiID)&token=(token)
というgif画像(1px * 1px)を読み込むimgタグが含まれています。
このage-check.jpというドメインは、mixiが各ケータイキャリアに依頼してブラックリストに登録されていると思われます。
詳細 : http://age-check.jp/
このHTMLがサーバから送信される時点では、mixi側がフィルタリングサービスの有無を判断できません。そのため、このHTMLではコミュニティ機能などが有効化されたままです。(それ以前からコミュニティ機能などを利用していたら の話ですが。)

tokenが生成されたにも関わらずcheck.gifが読み込まれない場合には、フィルタリングサービスに加入していると判断し、コミュニティ機能などが次回(もしくは数回以内で)接続時に無効化されます。ケータイ端末の画像表示OFF設定の場合に誤判定されるのはこのためです。

制限の導入直後は、確かこのimgタグがソースの下部に記述されていたと思います。
そのため、フィルタリングサービス未加入かつ画像表示ON設定の端末でも、mixiトップページが完全に読み込まれる前に、ページ移行した場合には制限にかかることがありました。

しばらくすると、このimgタグがソースの上部と下部の2か所に記述されるようになりました。
読み込まれる確率を上げたということでしょう。

 

そして、最近また調べてみると、仕様が変更されていました。

tokenの生成は今までと同じで、異なるのは、imgタグを用いた画像読み込みではなく、linkタグを用いたcssの読み込みに変更されている点です。
http://age-check.jp/check.css?id=(mixiID)&token=(token)
というURLでした。実際に読み込んでみると、中身は以前と同じgif画像でしたが・・・。

CSSの読み込みは、かなり前のケータイブラウザでも対応しています。
再現度こそ高くはありませんでしたが、文字色や背景色を変えるなどという基本的なことはできたように記憶しています。
そのため、この方法を用いることで、かなり多くのケータイ端末をサポートでき、かつ画像表示OFF設定であっても機能するようになりました。