アクセス制限の話

どれほど活用されているのか知らないが、サーバにはアクセス制限機能がある。当初はなかったものだが、荒らし行為をする人がいるので追加した機能である。わざわざデュエルオンラインで荒らし行為をする人がいるとはねぇ…
アクセス制限にはその運用上の難しさがあるのだが(どの程度の行為を荒らしとみなし制限をかけていくのか、いつ解除するか等々)、それはおいておいて、ここでは技術的な話だけしておく。
自分のサイトの掲示板とか管理したことのある人は知っていると思うけど、通常、アクセス制限は「IPアドレス」か「ホスト名」で行われる(本質的には同じものということで話を進める)。というか、逆にそれら以外に使える情報がない。しかし、これらによる制限に問題が多いことはわざわざ私が言うまでもないくらい周知のことである。
IPアドレスは一定ではなく、相手の接続が変われれば変わることがある。したがって、特定の相手を制限しようとしてもすり抜けられてしまうことが多い。その対策として、制限したい相手の使っているプロバイダーごと制限してしまうという手があるが、それは無関係の人のアクセスまで制限してしまうという問題がある。これIPアドレスを使う限りどうにもならないことである。このため、掲示板で思うようにアクセス制限をかけるのは難しい。
さて、で、私は考えた。デュエルオンラインのサーバのアクセス制限はどうするか。IPアドレスは当然わかっているので、それで制限することは簡単だが、それでは上記の問題はそのままである。幸い(?)、サーバに接続するクライアントであるデュエルオンラインも私がつくっているソフトである。ということは、何か相手を特定できる情報をデュエルオンラインから送ってやって、それをキーにアクセス制限をかければいいのではないかと考えた。いけそうである。
となると、次の問題は「相手を特定する情報として何を送るか」である。一番最初に思いついたのは「レジストリに何か書いておいて、それを送る」というものである。サーバでシリアル番号のようなものを管理して、それを各パソコンのレジストリに書いておいて、サーバ接続時に送るというわけである。レジストリが空ならサーバから新しいシリアル番号を与えてやればよい。
発想は良さそうだったが大きな問題があった。「サーバは誰でも立てられる」ということである。これではシリアル番号の管理はできない。それとレジストリをいじることに嫌悪感を抱く人がいることも知っていたので、この案ばボツとなった。
次に考えたのは、パソコンの中から、そのパソコンを特定できるような何らかのシリアル番号のようなものを抽出するというものであった。「そういえばWindowsXPアクティベーションでそんな話を聞いた記憶が」と思い、調べてみると使えそうな情報があることがわかった。そして、その中から比較的簡単に取り出せて、変更が難しい2つの情報を取り出してサーバに送ることにした。それが今のバージョンに入っているものである。何を送っているかはあえて秘密ということで(たいしたものは送ってない)。「プライバシーの侵害」ということを言う人もいるかもしれないけど、そういう人は遠慮なく文句を言って欲しい。
「これで完璧!」というわけではない。今の仕掛けでも知識のある人であればアクセス制限をすり抜けることはできる。少なくとも私は(作者であるということを抜きにしても)技術的にできる。あるいは、無関係の人に制限をかけてしまう可能性も0ではない。
ただ、サーバを管理している人がアクセス制限をかけようと思ったときはIPアドレスやホスト名ではなく、サーバのアクセス制限の説明の「謎の文字列」って奴を使った方が精度がいいということは知っておいて欲しい。