RSSリンクアドレスを暗号化するためのライブラリを添付します.ファイル名が他のRSS関係のライブラリと同じため,不用意にコピーすると上書きしてしまいますので,敢えてrsslib.php (fs_moodle)からcryptRsslib.phpに変更してあります.
(導入方法)
fs_moodle2.4以降は標準で組み込まれていますので,この作業は不要です.あくまでfs_moodle以外のMoodleのための説明です.
- cryptRsslib.phpをどこか適当なフォルダ(moodle/libなど)へコピーします.
- 以下に示すrss/file.php,lib/rsslib.php,blog/rsslib.phpの3つのファイルに修正を行ないます.
rss/file.hpはRSSリーダからのRSSフィードの要求に答える箇所,lib/rsslib.phpはフォーラムのRSSリンクアドレスを生成する箇所,blog/rsslib.phpがブログのRSSリンクアドレスを生成する箇所です.
- 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つの秘密鍵と登録キーで暗号化されているので簡単には解読できないでしょう.
説明は以上です.