ボクが関わっているブランドで人気投票をやったのだが、今回は不正投票があった。ただ、これを「不正投票」と呼んでいいかは疑問ではある。とりあえず今日の日記では「不正投票」と表現するが、ボク自身はこの行為自体を 100% 悪しきものとは考えていないことを最初に記しておきたい。
投票自体は終わっているので、その投票画面にリンクを張ることは出来ないのだが、 4 人のキャラクタのうちから好きなキャラクタを投票するというものだ。仕組みは非常に簡単で、いわゆる「カウンタ」を利用している。よくサイトのトップでみかける「何人来ました」っていうヤツだ。各キャラクタごとにカウンタが設置されており、「好きなキャラクタを選ぶ」=「そのキャラクタ専用のサイトに訪問した」と解釈するわけである。これによってカウンタが一つ上がり、そのキャラクタの票が一つあがることになる。
そして 4 人分のカウンタをグラフ表示するための CGI が別途あり、そこでどのキャラが何位なのかが解るようになっている。下の絵がグラフ表示されたものである。
で、カウンターは cookie を使って同じ人かどうかをチェックしている。また cookie の寿命は 24 時間に設定されている。つまり 24 時間経過するまでは何度投票してもカウンタは増えない(無効票となる)。同じ人かどうかは IP アドレスではチェックしていない。というのも現在は NAT がかなり広範に普及しており、同じ IP でも違う人がアクセスすることは珍しいことではないからだ。
さて、サーバの HTTP ログを見たところ、「桜織」と「十和子」というキャラに不正投票があった。不正投票する方法は実に簡単で、この Cookie を削除してもう一度投票すればよいのだ。Cookie が削除されると寿命が切れたことになり、もう一度投票出来る。これをくり返せば、何度でも有効票が投票出来てしまうのだ。
従ってこの Cookie を使った仕組みそのものが「何度でも投票出来る」という状況を作り出している。そしてこれは誰にでも簡単にできてしまうので「不正投票」と言い切れないのだ。つまり仕組み自体がよくない。
投票した方もその仕組みを自覚しているらしく(?)、大量に票を入れていない。一度には 8 ~ 12 くらい。それをある程度時間をおいて行い、ちょっとずつ投票しているのだが、しかしほぼ 24 時間でビリだったキャラクタが一位になってしまった。まぁだから「不正投票があった」とこっちも勘づいてしまったのだけど。
この辺の増加量は難しいもので、ウチが弱小ブランドだっていうのもあるかもしれない。一度に 8 ~ 12 入れても全然影響しないような人気ブランドだったら、たぶん本当にちょっとずつ上がっていき、知らず知らずのうちに一位になっているということもあったのだろうが、ウチはそこまで人が来ていないのか、8 ~ 12 増えただけでかなり形勢が変わってしまうのだ(汗)。
結局集計はこの一度に 8 ~ 12 投票したヤツを 1 票としてカウントした。それでも不備はあるものの、まぁ、細かい所を突き詰めてもしようがないし、このような不正投票が出来てしまう仕組み自体が問題なので、今回はこれで良しとしよう。レベルファイブさんなんかはこの不正投票も含めてネタにしてしまっているみたいだけど、ウチとしては正直、誰が一番なのかを知りたいし……。
他に方法としては順位をリアルタイムで見せないという方法もあるかもしれない。でもそうなると逆に 8 ~ 12 なんてカウント数では済まず、スクリプトとかで大量投票してくるかもしれない……。
あとはどうせ不正投票されるのなら、「同じ人は 24 時間経たないと投票できない」という制限そのものを取っ払う。とにかく投票すればそれがどんな状態だろうと、1 票とするというのも有りかもしれない。
さて、次回はどうしようかなぁ……どういう仕組みにすればいいのだろう。cookie 以外で同じ人かどうかを判別する方法はあるだろうか? 実はある。あるのだが、けっこう仕組みが面倒くさいというか、組むのが面倒くさい……。このへん、他社さんとかどうしているかいろいろ見てみる必要がありそうだ。