認証の実装を考える

2007-11-27 (火) 01:49:49
「PukiWiki/1.4/ちょっと便利に/任意のページごとの閲覧・編集制限/編集認証実装方法案」から変更。

現状について

PukiWiki/1.4/ちょっと便利に/任意のページごとの閲覧・編集制限にあるように、get_sourceやfileでgrepして、認証対応が必要と思われるプラグインが多数あるが、未だに対応出来ていない。PukiWikiユーザーは、上記ページやdevサイトを注意深く見ていなければ、未対応のプラグインがあることに気づかないため、pukiwiki.ini.phpで認証設定をして、保護されていると誤解してしまうおそれがある。

必要と思われる対応

案1

pukiwiki.ini.phpのauth関連の設定箇所に、「未対応のpluginがある。PukiWiki/1.4/ちょっと便利に/任意のページごとの閲覧・編集制限参照のこと」との注意書きコメントを追加する。(これは最低限必要では)

案2

現状について、で書いたように、get_sourceやfileを使用しているプラグインが認証対応を求められる。それならget_sourceやfile(file_write)関数で制限をしてしまえば良いのでは。
基本的には各プラグインで対応するが、万一漏れていたら、get_sourceやfile_write関数で認証を行い、情報が漏れたり編集権限が漏れたりすることを防ぐ。

編集制限対策案

lib/file.phpのfunction file_write()で編集認証チェックをする。

function file_write($dir, $page, $str, $notimestamp = FALSE)
{
	global $_msg_invalidiwn, $notify, $notify_diff_only, $notify_subject;
	global $whatsdeleted, $maxshow_deleted;
+	global $editable_flag;

	if (PKWK_READONLY) return; // Do nothing
+	if (defined('PKWK_SECURITY_READONLY')) return; // Do nothing
+	if (!$editable_flag && !check_editable($page, FALSE, FALSE)) {
+		 die('file_write(): not editable');
+	}
	if ($dir != DATA_DIR && $dir != DIFF_DIR) die('file_write(): Invalid directory');

とする。(注 $editable_flagのチェックはcheck_editableより先に行わなければならない。明示的にif文2つに分けた方がよいかな。)

明示的に編集認証を無視する場合には、

	global $editable_flag;
	$editable_flag = TRUE;

を記載する。プラグイン「rename.inc.php」や「unfreeze.inc.php」の様に直接file_write()やpage_write()を呼び出しているプラグインではその前に記載必要。
#commentのように、(一部の人は)書き込み認証に関係なく書き込み可としているプラグインにはreturnの前に記載する。

die()の代わりにreturnとするのでも良いだろう。ただ、本来pluginで編集制限をかけるべきところが、処理が漏れている状態であるので、それが分かるようにdie()という案をあげた。

閲覧制限対策案

lib/file.phpのfunction get_source()で閲覧権限認証チェックする。

function get_source($page = NULL, $lock = TRUE, $join = FALSE)
{
+	global $readable_flag;
	$result = $join ? '' : array();
 
 	if (is_page($page)) {
+		if (!$readable_flag && !check_readable($page, FALSE, FALSE)) {
+			die('get_source(): not readable');
+		}
		$path  = get_filename($page);

ないとは思うが、プラグイン等で閲覧認証を回避したい場合には

global $redable_flag;
$redable_flag = TRUE;

とする。
die()部分については編集認証と同様でreturnとする案もある。

関連


コメント



トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-03-03 (日) 23:41:06
Site admin: PukiWiki Development Team

PukiWiki 1.5.4+ © 2001-2022 PukiWiki Development Team. Powered by PHP 8.2.12. HTML convert time: 0.385 sec.

SourceForge