ゲストログイン不可なコースのRSS取得

ゲストログイン不可なコースのRSS取得

- Tatsuya Shirai の投稿
返信数: 19

 私の勘違いではないことを祈ります.

 ゲストログイン不可のコース内のフォーラムのRSSを現状は取得できませんよね?
 それはそうですよね,誰でも投稿内容の一部でも見ることができたら異常です.

 RSSを受信する際にログイン情報を送ることでゲストが入室不可なコースのRSSも正当に取得できる手段が,実はあるのではないか?と期待しています.(私は普段,RSSを全く使わないので知識が不足しています)

 もし,現状ではどうしようも無いのであれば,逆に何とか取得できるように改良する手は無いのでしょうか.例えばMoodleにログイン後,あるページに移動するとそこには私の取得可能なRSSのリストが表示されており,それを選択すると投稿されたフォーラムの内容がRSSリーダで見るように閲覧可能であるなど.

Tatsuya Shirai への返信

Re: ゲストログイン不可なコースのRSS取得

- Takahiro Kagoya の投稿

もし勘違いした返信だったらすみません。

ゲストログインできないコースのRSSの取得できました。http://moodle.org/course/view.php?id=48

本家にあるこちらのコースのフォーラムのRSSですが、これで読めます。http://moodle.org/rss/file.php/48/7583/forum/717/rss.xml

あれ?質問の意味と違いますか?

また、ログインして、取得可能なRSSのリストは、フォーラムの一覧で表示されているようですが...たとえば、以下のページにRSSアイコンがずらっと並んでいます。

http://moodle.org/mod/forum/index.php?id=14

Takahiro Kagoya への返信

Re: ゲストログイン不可なコースのRSS取得

- Tatsuya Shirai の投稿

 なるほど。コースID48( Moodle Certification はげストでログインできないことを確認しました。それなのにRSSを使ってフォーラムのRSSが登録でき、しかも読み出しにも成功しました。うーん、これってセキュリティの問題ではないでしょうか。

 以前に試したときは駄目だったのですけれどもね。

Tatsuya Shirai への返信

Re: ゲストログイン不可なコースのRSS取得

- Haruhiko Okumura の投稿
あれあれ,これはまずいですね。
バグトラッカーで報告されたほうがいいのかも。
Haruhiko Okumura への返信

Re: ゲストログイン不可なコースのRSS取得

- Tatsuya Shirai の投稿

 一仕事終わったので試してみました.

 goo RSSリーダーのWeb版を使用しました.

 例えば,

http://www.suzuka-ct.ac.jp/mech/moodle/rss/file.php/???/???/forum/???/rss.xml

という学内の授業のコースのフォーラムのRSSのアドレス(数字は???に置き換えてあります)をgoo RSSリーダーの追加のURL欄に入力すると,新規に書き込まれたフォーラムトピックスの一覧が表示されました.以前はうまく行かなかったような記憶があるのですが...

 便利です.便利ですが,???のところの数字を予想されたら誰でも読めてしまう,という意味ですよね.

 Moodle1.8.4+ と Moodle1.9+ のrss/files.php, rss/index.phpを比較してみましたが,どちらも同じ内容でした.さらに昨年の6月頃のファイルとも違いがありませんでした.

Tatsuya Shirai への返信

Re: ゲストログイン不可なコースのRSS取得

- Tatsuya Shirai の投稿

あまり公にする話ではないのでしょうか.

 RSSの取得がうまく行く場合とうまく行かない場合の違いが分かりました.

 まず,どんなに頑張ってもRSSを取得できないコースがあり,それは「学生は利用できない」設定になっているコースです.最低限の機密保持はされているようです.

 逆に言うと,「このコースを学生は利用できます」に設定されているコースであれば,ちょっと頭を使えば自分が登録されていないコース,それ以前に自分がそのMoodleサイトにアカウントを持っていなくてもRSSも読めてしまいます.コースの設定で”ゲストアクセス”が「ゲストを許可しない」になっていても,”登録キー”を登録していても,です.学生用のコースのセキュリティは緩いのですね.

 確かに,「ゲストを許可しない」コースでRSSを利用できないのでは学生の利便性は落ちます.でも,登録キーくらいはRSSのアドレスに含めてくれないと,「ええと,ホニャララ大学のMoodleのURLはこうだから,あとはロボットが適当にRSS取得できるフォーラムを集めてくれるぞ」が可能になります.もちろん,登録キーを含むRSSのアドレスが漏洩すれば読めてしまいますし,パスワード破り同様に登録キーをロボットが破れば同じことではありますが...

 rss/file.phpおよびRSSのアドレスを発行しているコードに手を加えれば,登録キーをRSSアドレスに含めることは可能だと思いますので,時間がある時に調べてみようと思います.

 吉田さん,もしこの記事が危険だと判断された場合は削除して下さい.


RSSアドレスの生成箇所は見つけました.こことrss/file.phpに手を入れれば良いのは分かるのですが...既にRSSを利用しているユーザがいると大混乱になりますね.

Tatsuya Shirai への返信

Re: ゲストログイン不可なコースのRSS取得

- Tatsuya Shirai の投稿

 RSSのURLにコースの登録キーを埋め込み,それがRSSリーダ側からの要求と一致しないとrss_not_found()とすることに成功しました.これでいまよりもセキュリティは高くなるのですが...その反面,もし学生があまり深いことを考えずにRSSのアドレスを第三者に教えてしまうと,登録キーがバレてしまい,それこそ勝手にコースに侵入されて被害が広がりますね.という訳で,登録キーをRSSのアドレスに”直接”埋め込むのは賢い方法ではないですね.

 そもそもコースID以外のデータまで生の状態でアドレスに付け加えてしまっているのが考えが甘すぎませんか.いまここでRSSのアドレスの詳細を説明する訳にはいきませんが.

 RSSのアドレスに含める”色々なデータ”は暗号化すべきではないでしょうか.サイトのRSSの暗号化キーを管理者が管理し,RSSのアドレスにはその暗号キーを元にして生成した”色々なデータ”の暗号化した情報を付加すれば,RSSアドレスを見ても第三者には何のことか全く分からなくなります.MoodleのサイトはそのRSSの暗号化キーを用いてRSSの要求があった場合には”色々なデータ”を復元すれば良い訳です.

 どうして最初からそう考えないのだろう??? 現状のセキュリティに不安は無いのかな.なまじクラッキングできそうなデータを公に晒すと,クラッカーのやる気を亢進すると思う.まあ,管理者がRSSの暗号化キーを勝手に変えたらみんなRSSを読めなくなりますが....でもそれならばRSSの暗号化キーなど使わずに”色々な情報”だけを用いて暗号化し,復元するのも無理ではないですよね?(セキュリティは弱くなるけれど)


 暗号化については詳しくありませんので,適当なことを書いています.


 でもどこかの段階で,新しいRSSのアドレス指定の方法を実装する必要はあると思いますよ.旧来のRSSのアドレス形式も許すとして,フォーラム作成時などにセキュリティの高いRSSアドレス形式を選択できるようにすれば,徐々に移行が進むと思います.どう思われますか,皆さん?

Tatsuya Shirai への返信

Re: ゲストログイン不可なコースのRSS取得

- Tatsuya Shirai の投稿

 もちろん新しいRSSのアドレス形式を実装したとしても,RSSリーダに与えるためのアドレスを誰かが第三者に漏らしてしまえば同じことです.そのRSSアドレスのフォーラムの一部は自由に読めてしまいます.ですので,「学生が利用できない」コースのRSSは読めない,という方針は変えようが無いです.

 ただ,平文で”色々なデータ”が生のまま連結されただけの現在のRSSのアドレスよりは,RSSアドレスを元にしたMoodleサイトのクラッキング(RSSを取得するくらいですが)を防げる,というメリットがあります.

 RSSリーダがサイトからRSSを取得する際に,サイトとの間でアカウントとパスワードの認証を行う仕組みがない(のですよね?)以上,仕方がありません.それともそういう機能をもつRSSリーダがあるのでしょうか? それならばMoodleのコードを対応させれば「学生が利用できない」コースであってもRSSで更新されたフォーラムのリストを取得できるように改善できますね.


 ”RSS セキュリティ”で検索すると,大半はRSSフィードに悪意のあるコードを埋め込まれる類の記事です.

 ただ,以下のような記事もありました.やはりプライベートなRSSを守る手段は現状では一般化したものがない,ということでしょうか?

http://blog.myrss.jp/archives/2006/04/google_calendar.html

※ https://(ユーザー名):(パスワード)@gmail.google.com/gmail/feed/atom という URL を登録する方法です。

この(ユーザー名):(パスワード)を送るのにhttpsを用いるのがネックですね...Moodle側から公開されるRSSのアドレスはアカウント情報を抜いたアドレスとし,頭に付けるユーザー名とパスワードはRSSリーダが自動的に付けるようにしてくれれば良い様な気がします.もちろん暗号化して.

Tatsuya Shirai への返信

Re: ゲストログイン不可なコースのRSS取得

- Haruhiko Okumura の投稿
いろいろお調べいただきありがとうございます。

うちのMoodleはRSSをoffにしています(デフォルトのまま)。これが安全でしょうね。
Haruhiko Okumura への返信

Re: ゲストログイン不可なコースのRSS取得

- Tatsuya Shirai の投稿

 cronの仕事も増えるだけですので,もしこれ以上,RSSのセキュリティに関して大きな改良がない限りは,RSSをoffにする方が良さそうですね.

 RSSが使えると,多分,多くの方々にはメリットがあると思うので,すこし残念ですね.Moodleのみで対応できることには限界があります.


 kagoさん,情報提供ありがとうございました.お陰で頭の中がかなり整理できました.

 という訳で,冒頭の”RSSリーダに相当する機能をMoodleに実装して欲しい”に戻りました満面の笑顔.これは個人で実装するのは不可能です.どこかにRSSのXMLを展開表示するライブラリでも転がっていない限り...もしかして,あるのか?!

Tatsuya Shirai への返信

Re: ゲストログイン不可なコースのRSS取得

- Takahiro Kagoya の投稿

非常に興味深い話題を提供していただき、感謝しております。

あまり深く考えず、RSSって便利に使える...ってことだけで理解しておりましたが、ちょっと前のGmailのRSS配信のニュースを聞いて、認証どうするだろう?と、ちょっと疑問には思っていました。

moodle.org本家でも古くから関連する話題はあがっているようですね。
http://moodle.org/mod/forum/discuss.php?d=23099
http://tracker.moodle.org/browse/MDL-8845
http://tracker.moodle.org/browse/MDL-5502

こんな試みも...
http://docs.moodle.org/en/Student_projects/Secure_RSS_feeds

そしてMoodle 2.0へのロードマップにも...secure rss の項目が。
http://docs.moodle.org/en/Roadmap

「セキュア RSS 」というキーワードがちゃんといろんなところで話題にあがっていることも知ることができました。

....と、結局白井先生のようなアイデアで当面をしのぐしかなさそうです。学生に積極的にRSSの活用を薦めようと思っていた矢先でしたのですが...

ホスト認証(IPアドレス?)によって、RSSを読める場所を限定するという手もありますでしょうか。ただ、これだとモバイル関係にはつらいか。でも携帯電話関係では「携帯情報端末認証」というのがあるようなので、これで限定できそうです。IPアドレスではなく固体識別IDで、一度携帯電話を登録させるのでしょうかね...


あと、MoodleでRSS関係といえば、RSS feedsブロックがありますね。サイト内でフォーラムとこのブロックを組み合わせて、コース間での連携も考え中です。

それと、「RSSのXMLを展開表示するライブラリ」というのは、このブロックがあるということなので、すでにmoodleで実装されているのでは? あるいは、こんなのもあるようです。

http://phpspot.org/blog/archives/2008/01/phprsslast_rss.html
http://phpspot.org/blog/archives/2008/02/rssphprss74.html

Takahiro Kagoya への返信

Re: ゲストログイン不可なコースのRSS取得

- Tatsuya Shirai の投稿

 色々と調査頂いて助かりました。
 依然として未解決な課題であるということが分かりました。

 ところで、RSS feedsブロックというのはどのような機能をもつブロックなのか,簡単にご紹介いただけると助かります.当初は色々とブロックを試していたのですが,ヘルプファイルを消し忘れたり,そもそもデータベースを拡張するなど,試すだけにしては思った以上の痕跡を残すことに気づき,標準のブロック以外はあまり触らないようにしていました.

 

 

Tatsuya Shirai への返信

Re: ゲストログイン不可なコースのRSS取得

- Takahiro Kagoya の投稿

ひとことで言うと、他のサイトなどのRSSを指定して、ブロックにニュースなどを表示するものですね。 フォーラムなどのRSSの配信とは逆の関係(?)でしょうか。

最近は、Windows Vistaのサイドバーや、Google gadgetなどでもこのRSSのクライアント機能がありますよね。

Haruhiko Okumura への返信

Re: ゲストログイン不可なコースのRSS取得

- Tatsuya Shirai の投稿

 諦めが悪いです赤面

 やはりRSSを無効にするのも気が引けて...
 とはいえ”色々なデータ”をRSSのリンクアドレスに付加されるのは堪らない.

 そこでfile.php/の後の”色々なデータ”をmoodlelib.php中のrc4encrypt()で暗号化し,rc4decrypt()で復号化してみました.ただし,rc4encrypt()はurlencode()したバイナリーデータを返して来ますので,これをそのままURLのお尻に付けるとRSSリーダが勝手にurldecode()してくれるようでうまく行きませんでした.そこで,ちょっとlib/rsslib.phpに関数を追加して,地道にバイナリー変換(標準では良いコマンドが無いのですね...)&暗号化/復号化を関数に行わせました.

http://www.suzuka-ct.ac.jp/mech/moodle/rss/file.php/B0834C03B572A21BED08B677AC46C97280...

お尻の数文字は削ってあります.どうです,これならば誰も何だか分からないでしょう!

 RSSのXMLファイルを出力するrss/file.phpの方では,file.php/の後の文字列を$relativepathとして解析しますが,この$relativepathに'/'が一つも含まれて居ない場合は拡張されたRSSのリンクだぞ,と判断して,復号化する関数で元の”生の色々なデータ”に戻します.あとは元々あるコードに処理を引き継いであげれば,旧来のRSSリンクも新しいRSSリンクも受け入れ可能でした.

 オリジナルよりも安心です.


lib/rsslib.phpのfunction rss_get_url()がRSSのリンクを生成する大元の関数ですので,この関数の近くに以下の2つの関数を追加しました.

// RSSのリンクの”生のデータ”を暗号化
function rss_link_encrypt($str)
{
    $encrypted = urldecode(rc4encrypt($str));
    $hexString = '';
    for ($i = 0; $i < strlen($encrypted); $i++) {
        $hexString .= sprintf("%02X", ord(substr($encrypted, $i, 1)));
    }
    return $hexString;
}
// RSSのリンクの暗号化された情報を”生のデータ”に復号化
function rss_link_decrypt($str)
{
    $decrypted = '';
    for ($i = 0; $i < strlen($str) / 2; $i++) {
        sscanf(substr($str, $i * 2, 2), "%X", $bbyte);
        $decrypted .= chr($bbyte);
    }
    return rc4decrypt($decrypted);
}

あとは,リンク生成時にはrss_link_encrypt()を利用し,rss/file.phpでは上記のように新しいRSSリンク形式だと判断したらrss_link_decrypt()するだけです.

 ことの性質上,あまりオープンにrss/file.phpとlib/rsslib.phpのどこを修正したのか説明しにくいですね.

Tatsuya Shirai への返信

Re: ゲストログイン不可なコースのRSS取得

- Tatsuya Shirai の投稿

 あ,そういえば登録キーのことを忘れていましたね.

 ”色々な情報”に登録キーも付け加えて暗号化すれば登録キーは漏れにくい(いまはrc4encrypt()もrc4decrypt()もソース中にある暗号キーを使って暗号化しているので推測される可能性がある).

 もしも登録キーによるチェックも付け加えてあげれば,同じコースを毎年毎年使い続ける場合であっても,古い登録キーを元にしてRSSのアドレスを入手した学生は,登録キーが変更されたあとのコースのRSSを読めなくできます.
(もし留年して再び同じコースのメンバーになった場合は,RSSのリンクを再登録する必要はありますが!)

Tatsuya Shirai への返信

Re: ゲストログイン不可なコースのRSS取得

- Tatsuya Shirai の投稿

 も,ものすごく寝ぼけた状態で確認したので自信がありません.(”げスト”ですし...)

 別に時間を設けてもう一度,チェックしてみます.

#書き込んだ記憶もあやふやな有様です赤面

Tatsuya Shirai への返信

覗き見防止のためのRSSアドレスの暗号化

- Tatsuya Shirai の投稿

 fs_moodle2.3, 2.3aで実装したRSSリンクアドレスの暗号化をもう一度見直しました.今度こそ最終になりそうです.一応,動作を確認しました.

 TripleDES風に2個あるいは3個の鍵でRSSリンクアドレスのデータ部を暗号化します.コースの登録キーも(設定されているならば)利用します.

 登録キーが登録されていないコースやブログの場合はサイト共通の秘密鍵AとBのみ,登録キーの登録されているコースの場合は秘密鍵AとBと登録キーの3つを鍵として用います.

(暗号化時)

  1. 秘密鍵Aで暗号化
  2. 秘密鍵Bで復号化
  3. 秘密鍵A(あるいは登録キー)で暗号化

(復号化時)

  1. 秘密鍵A(あるいは登録キー)で復号化
  2. 秘密鍵Bで暗号化
  3. 秘密鍵Aで復号化

 秘密鍵AとBはconfig.php(あるいはfsconfig.php)に設定すれば誰にもバレません.一個の秘密鍵だけで暗号化を考えていたら簡単に解読される心配があってウロウロと迷っていたのですが,秘密鍵を2個に増やしたら暗号化/復号化手順もシンプルに共通化できました.
 コースの登録キーが推測されたらどうしよう,とも悩んでいたのですが,コースの登録キーこそ学生に告知してしまうので秘密の情報ではないですね(もちろん第3者に知られるのは好ましくない).コースの登録キーを安全にするために秘密鍵を危険にさらす方が余計に危険です.秘密鍵を2つに増やした結果,この問題もクリアしました.

 Moodleのソース変更は3ファイル,それぞれごく少量です.あとは新規に1個のライブラリを読み込んで貰って,設定ファイルに秘密鍵2つとRSSアドレスのセキュリティレベル(後述)を設定すれば良いだけですので,fs_moodle以外にも簡単に導入できます.


 セキュリティレベルを0から5までの6段階に設定できます.出力するRSSアドレスの種類(生か,登録キーを考慮しないか,考慮するか),受け入れるRSSアドレスの種類(何でもOK,暗号化されていればOK,登録キーを考慮した暗号化のみOK)です.過渡期には,暗号化されたRSSリンクアドレスを出力するけれど,RSSリーダからは低いセキュリティのRSSリンクアドレスも(少なくとも年度末までは)受け付けないとクレーム処理が大変だ,というくらいにRSS機能が活用されているサイトへの配慮です.当方は全く問題ないのですが...

 近頃は携帯電話にもRSSリーダが搭載されているそうですね.来週,私が機種変更予定の携帯電話もウインク.ですので,少し頑張りました.IE7もFirefoxもRSSリーダ機能が割りと自然に使えるようになっているようですし,「セキュリティは甘いよ!」と十分に告知すればRSS機能,学生は使いこなすのではないでしょうか.大きなMoodleサイトですとcronの処理が増えて大変ですけれども...


 繰り返しますが,ユーザ認証を行なっている訳ではありません.単に,”RSSリンクアドレスを推測に基づいて偽造してRSSフィードを不正に覗き見”されにくくするための改善です.暗号化されたRSSリンクアドレスを誰かが第3者に教えてしまえば誰でもRSSフィードを受信できてしまう,という点では現状と変わりません.

Tatsuya Shirai への返信

Re: 覗き見防止のためのRSSアドレスの暗号化

- Tatsuya Shirai の投稿

 RSSリンクアドレスを暗号化するためのライブラリを添付します.ファイル名が他のRSS関係のライブラリと同じため,不用意にコピーすると上書きしてしまいますので,敢えてrsslib.php (fs_moodle)からcryptRsslib.phpに変更してあります.


(導入方法)
 fs_moodle2.4以降は標準で組み込まれていますので,この作業は不要です.あくまでfs_moodle以外のMoodleのための説明です.

  1. cryptRsslib.phpをどこか適当なフォルダ(moodle/libなど)へコピーします.
  2. 以下に示すrss/file.php,lib/rsslib.php,blog/rsslib.phpの3つのファイルに修正を行ないます.
    rss/file.hpはRSSリーダからのRSSフィードの要求に答える箇所,lib/rsslib.phpはフォーラムのRSSリンクアドレスを生成する箇所,blog/rsslib.phpがブログのRSSリンクアドレスを生成する箇所です.
  3. config.phpに$fsCFG->rss_secure_levelの設定値と$fsCFG->rssCryptKeyAと$fsCFG->rssCryptKeyBの設定値を追加します.

以上です.これでRSS(フォーラムおよびブログ)のリンクアドレス中のデータ部を暗号化できます.実際に確かめてみて下さい.


(各ファイルの修正箇所)
 Moodle1.9+(2008/04/03)を対象に説明を行ないますが,Moodle1.8.4+でもほぼ同じはずです.

・rss/file.phpの修正箇所
 冒頭, 40行近辺

    // disable moodle specific debug messages
    disable_debugging();

    $relativepath = get_file_argument('file.php');

    if (!$relativepath) {
        rss_not_found();
    }

    // extract relative path components
// ここから追加
    require_once($CFG->libdir.'/cryptRsslib.php');
    if (($relativepath = analyze_secure_rss_link($relativepath)) === false) rss_not_found();
// ここまで追加
    $args = explode('/', trim($relativepath, '/'));

    if (count($args) < 5) {
        rss_not_found();
    }

 ・lib/rsslib.phpの修正箇所
function rss_get_url(), 25行近辺

//This function returns the URL for the RSS XML file.
function rss_get_url($courseid, $userid, $modulename, $id) {
    global $CFG;
//  if ($CFG->slasharguments) {
//      $rsspath = "$CFG->wwwroot/rss/file.php/$courseid/$userid/$modulename/$id/rss.xml";
//  } else {
//      $rsspath = "$CFG->wwwroot/rss/file.php?file=/$courseid/$userid/$modulename/$id/rss.xml";
//  }
// ここから追加
    require_once($CFG->libdir.'/cryptRsslib.php');
    $rsspath = generate_secure_rss_link("$courseid/$userid/$modulename/$id", $modulename);
// ここまで追加
    return $rsspath;
}

 ・blog/rsslib.phpの修正箇所
38行近辺

        if ($tagid) {
            $path .= '/'.$tagid;
        }

//      $path .= '/rss.xml';
//      $rsspix = $CFG->pixpath .'/i/rss.gif';
//
//      if ($CFG->slasharguments) {
//          $path = $CFG->wwwroot.'/rss/file.php/'.$path;
//      } else {
//          $path = $CFG->wwwroot.'/rss/file.php?file='.$path;
//      }
// (Shirai062): ここから追加
        require_once($CFG->libdir.'/cryptRsslib.php');
        $path   = generate_secure_rss_link($path, 'blog');
        $rsspix = $CFG->pixpath .'/i/rss.gif';
// (Shirai062): ここまで追加

        print '<div align="right"><a href="'. $path .'"><img src="'. $rsspix .'" title="'. strip_tags($tooltiptext) .'" alt="'.get_string('rss').'" /></a></div>';

    }


変数の設定

 config.phpに$fsCFG->rss_secure_levelと$fsCFG->rssCryptKeyA, Bを設定する必要があります.
 まず,$fsCFG->rss_secure_levelについて説明します.

//  (8) [RSSリンクアドレスのセキュリティレベル]
//  $fsCFG->rss_secure_level = 0;   // 旧アドレス形式を出力.
                                    // 全アドレス形式を受け入れる(オリジナルに近い,安全性最低)
//  $fsCFG->rss_secure_level = 1;   // 共通鍵アドレス形式を出力
                                    // 全アドレス形式を受け入れる(過渡期向け,安全性低い)
//  $fsCFG->rss_secure_level = 2;   // コース別暗号化形式を出力
                                    // 全アドレス形式を受け入れる(過渡期向け,安全性低い)
//  $fsCFG->rss_secure_level = 3;   // 共通鍵アドレス形式を出力
                                    // 暗号化アドレス形式(共通鍵/コース別)のみ受け入れる(過渡期向け,安全性中)
//  $fsCFG->rss_secure_level = 4;   // コース別アドレス形式を出力
                                    // 暗号化アドレス形式(共通鍵/コース別)のみ受け入れる(安全性高い)
//  $fsCFG->rss_secure_level = 5;   // コース別アドレス形式を出力
                                    // コース別アドレス形式のみ受け入れる(安全性最高)

例えば,以上のテキストをconfig.phpにまるごと貼り付け,設定したいレベル(0から5)の行頭のコメントアウト記号(//)を外すのも手です.config.phpにあまり余分なものを詰め込みたくない,という方は,単に変数だけを設定すれば良いでしょう.

 なお,レベルと機能の関係を以下に表で示します. 

出力

受け入れ

Level

コース別対応

共通鍵のみ

旧アドレス

コース別対応

共通鍵のみ

旧アドレス

Yes

Yes

Yes

Yes

0

Yes

Yes

Yes

Yes

1

Yes

 

Yes

Yes

Yes

2

Yes

Yes

Yes

 

3

Yes

 

Yes

Yes

 

4

Yes

 

Yes

 

 

5

 レベル0から2まではどの形式のアドレスでも受け入れますので安全性は向上しません.設定変更時の過渡期に用いるために設けました.もしまだユーザがほとんどRSSを利用していない状況でしたら,思い切って最初から$fsCFG->rss_secure_level = 5; の設定を勧めます.
 コース別対応アドレス形式はRSS共通鍵アドレス形式と上位互換です.登録キーが登録されているコースのRSSリンクアドレスのみ,少し異なる暗号を生成します.ですので,敢えてRSS共通鍵しか使わないレベル3(および1)を設定する必要もないでしょう.まずはレベル2で運用を開始して,年度が替わった頃にレベル5に設定すると良いでしょう.

 次に,RSS共通鍵A/Bについて説明します.
 $fsCFG->rssCryptKeyAと$fsCFG->rssCryptKeyBに重要性の違いはありません.設定する値は文字列です.あまり極端に長かったり,あるいは短いと問題が発生すうかも知れません.ほどほどに.日本語文字の使用は保証できません.半角アルファベットが無難でしょう.意味のある単語ですと,辞書を利用したハッキングツールで解読されやすくなりますので,$fsCFG->rssCryptKeyA = 'dfaltxqc'; といったようなランダムな文字の羅列が好ましいです.
 $fsCFG->rssCryptKeyA, Bどちらか1文字でも変数の値を変更すると,サイト全体のRSSリンクアドレスが変わります.逆に言うと,RSSリンクアドレスを一気に変えたい場合はこの値を変えます.ただ注意して頂きたいのは,登録キーが設定されているコースのRSSリンクアドレスも変わってしまう点です.授業のコースは年度が変わる度に登録されている学生が入れ替わるかも知れませんが,研究室のコースなどは複数年度に渡って学生が在籍します.ですので,相当な理由(RSS共通鍵が破られたなど)がない限りは値を変えない方が良いでしょう.


(RSSリンクアドレス暗号化例)

・旧アドレス形式
 http://www.suzuka-ct.ac.jp/mech/moodle/rss/file.php/???/???/???/???/rss.xml
 これがMoodleオリジナルのRSSリンクアドレスづ.file.phpの後のスラッシュで区切られた ???の値を推測してアクセスされると誰でもRSSを読むことができてしまいます.

・RSS共通鍵アドレス形式
 http://www.suzuka-ct.ac.jp/mech/moodle/rss/file.php/CBF6A30BAC6AFD67B0057DF29551
 これがブログや登録キーが設定されて居ないコースのRSSリンクアドレスを暗号化したものです.当方のサイトの実験用のフォーラムのRSSです.
 (安全だからと言ってこのように迂闊に公開するのは危険です.誰でもこのアドレスを使えば読めてしまいます!)

・コース別アドレス形式
 http://www.suzuka-ct.ac.jp/mech/moodle/rss/file.php/B79E_559BC5A011C114EFB98111B2C566
 これが登録キーが設定されているコースのフォーラムのRSSリンクアドレスです.B79Eの部分がコースIDを現す暗号化された情報です.これは簡単に解読できるでしょう.しかし559B..以降のデータは2つの秘密鍵と登録キーで暗号化されているので簡単には解読できないでしょう.


説明は以上です.

 

Tatsuya Shirai への返信

Re: 覗き見防止のためのRSSアドレスの暗号化

- Tatsuya Shirai の投稿

 function rc4encrypt_rss()とfunction rc4decrypt_rss()にバグ(define忘れ,秘密鍵を2つに増やしたことへの対応忘れ)がありましたので修正しました.ワーニングが出ていたかも知れませんね.

Tatsuya Shirai への返信

Secure RSS (Student project)

- Tatsuya Shirai の投稿

http://docs.moodle.org/en/Student_projects/Secure_RSS_feeds

 少し中身が更新されていたので見てみたのですが,あまり私の対策と変わりないなぁと思っていたのですが,さすがは本家,少し違いますね.

 私も実はちょっと考えたのですが,ユーザ個々の認証のために各人のプライベートキー(ハッシュ値)のようなものをRSSのアドレスに埋め込むつもりのようですね.私がなぜ止めたのかと言うと,ユーザパスワードのハッシュ値が漏出すると危険,かといってRSS専用の個人のパスワードをデータベースに追加する根性が無かったためです.

 私が考えた暗号化RSSリンクアドレスでもユーザIDが暗号化されたアドレスの中に含まれているので,もしRSSリンクアドレスが漏出していることが判明した場合は誰が漏らした(あるいはバラされた)かは分かりますが,その場合はコース全体(あるいはサイト全体)のRSSリンクアドレスに影響する秘密鍵を変更しなくてはならないのに対して,個人のプライベートキーを変更して貰うだけで不正なアクセスは禁止できますね.なるほど.

 現状はfs_moodleに組み込んだ暗号化RSSリンクアドレスでしのぐ必要がありますが,Moodle2.0でRSS用プライベートキーがデータベースに設定可能になったら,いま以上に運用が安全かつ簡単になりますね.それでもサイトの秘密鍵+コースキーを使う方式は便利なので今後もこの方針は残します.本家でも取り込んでくれると嬉しいのだけれども.


 フォーラムとblogに加えて,カレンダーなどもRSS対応を狙っているようですので,ちょっと今後が楽しみです.(でも,依然として私個人はRSSを使いこなせていない...)