[Re: Two Simultaneous Logins]
http://moodle.org/mod/forum/discuss.php?d=22401&parent=542691
LMSとして同一ユーザが複数の端末からログインして同時に***を実行するのは判別して防がなくてはいけない.これは非常に重要なことであるように感じます.
少々興味があります.
どのようなシチュエーションをOkamotoさんは考えているのでしょうか.具体的に防ぎたい行為を挙げて頂くと興味の度合いが更に向上するかも知れません.防止するメカニズムも異なるかもしれません.
他の方からもご意見頂けるとMoodleの価値向上に役立つ機構の開発に繋がる可能性があります.是非とも想定される不正(?)行為を挙げて頂けないでしょうか.
私はMoodleに対してFirefoxとIEとで同時にログインすることが多々あります.それぞれのブラウザの長所があるためです.HTMLエディタの親和性はIEの方が高く,Javascriptの中にはIEの方が/Firefoxの方が親和性の高い箇所があります.
私の予想では,ズルや不正アクセスを防ぐのが目的ではないか?と思っています.以下,私もなぜ同時ログインを防ぐのかが分からないので想像です^^;).
1.時間節約(ズル)
複数のSCORMのコンテンツを全部見る事!という課題があったとします.
うー,面倒くさいと思った場合に,2つ以上の端末を立ち上げてそれぞれでSCORMを再生する.なんと所要時間が1/nに!(n:同時再生するブラウザの数)
でも,これは一つのPC上で二つ以上のブラウザを立ち上げて行ってもできることです.MACアドレス等で判別? 何らかの方法で1つのPCから同時にアクセスを禁止する方法が開発できたとしても,複数のPCを使用すれば破られてしまう.
でも,根本的な解決は,一つのログインアカウントで同時に複数のSCORMコンテンツを再生できないようにすれば良い.「ただいまコンテンツを再生中」といった感じでしょうか.
一つのブラウザで課題を表示し,別のブラウザ(あるいはタブ)でSCORMを閲覧した方が学習効率は良い(私も複数のコースを表示することがありますね.移動が面倒なので)ので同時アクセスを禁止しない方が良い.
2.不正アクセスの防止(その1)
安直過ぎるパスワードを設定していた(時々,「僕のパスワードはaaaだ」などと自慢する学生がいる)ために,アカウントが乗っ取られる.授業中にイタズラでメッセージを送ったりして授業が混乱することが起こりえる...これはコンピュータリテラシーの良い教材ですね^^;
3.不正アクセスの防止(その2):代返
誰かが気を利かせて「お,誰々が今日は休みだから出席モジュールで出席したことにしてやろう」というところで本人が遅れて登場.めでたく同一人物が二つのPCからログイン.でもこれは実害とは言いがたい.
4.不正アクセスの防止(その3):オンラインで試験
情報処理センターなどで一斉にオンラインで試験を行う際に,誰か優秀な学生が他の学生の課題を解いて提出してくれる...その場合,不正を依頼した学生はログインしなければ良いので,これも該当しない.
5.不正アクセスの防止(その4):オンラインで試験
優秀な学生のアカウントを不正に入手した学生が,試験中に優秀な学生が提出した課題をなりすましてログインしてダウンロード.自分のアカウントでログインし直して提出.その詐取する際に複数の端末から同一の学生がログインした状態になる.もし同一アカウントで複数の端末からログインできないように設定できるならば,各人,試験中はログアウトしないように指導すれば不正は防ぐことができる.
でもコース単位で同時ログインを規制しないと,その時間中,他のコースの学生は複数のブラウザで同時ログインできなくなる.
以上,とりあえず5つほどシチュエーションを考えてみましたが,5を除いてログインを要求される段階でチェックを行う方法(required_login())で排除する方法がベストとは言い難いですね.
何か我々が見落としているシチュエーションがあるのではないか? 是非とも6以降,何かお気づきの点がある方はアドバイス願います.
実際のところ,サービスの品質を落とさずに有償サービスの使い回しを防ぐ方法ってあるのでしょうか.
毎日,コースの鍵を変えてメールで送信するとしたらサービスは低下しますし,USBのドングルという時代でもないです(PC以外からのアクセスができなくなる).Webカメラや音声で本人認証を行うところもあるとは思いますが(これは学位を出す場合のエビデンスとして).ただ,本人認証をなんらかのプラグインに任せて,本人認証したことを検知するAPIは用意してあると良いですね.
IPアドレスやサブネットで複数の経路からログインすることを防いでしまうと,デスクトップPCで受講しながら,コンテンツの一部をスマートフォン等にダウンロードするといった作業が並行して行えなくなりますねぇ. 駅の待合室で無線LANから受講していて,おっと時間だ(←ログアウトし忘れ)と新幹線に飛び乗ったら続きを30分間は視聴できない,というのも困りますよね.
ただ,それらのサービスが制限/低下するのは覚悟の上(ユーザの理解も得られる)で,同時アクセスを禁止する機能を選択できるようになっても良いと思います.
その場合,
- サイト単位で禁じる
- コース単位で禁じる
- ユーザ単位で禁じる
- コンテンツ単位で禁じる
少なくとも1だけではなく,2,3はシステムで設定可能にしたいですね.2よりも3の方が少ない改造で対応できます.ユーザプロファイルフィールドを追加すれば良いからです.追加したユーザプロファイルフィールド(二値)がtrueのユーザについては,require_login()の処理において異なるセッションIDを持つユーザが居た場合にログインを拒絶するか,先にログインしているユーザを強制ログアウトさせれば良いでしょう.
あ,吉田さんが既にコードの参照先を示していますね.
データベースに項目の追加が必要ですね.セッションIDを保存しないとこちらからは判別できませんね.
このコードに基づいて上記仕様を組み込むことはそれほど難しくないかな?