雛形とするページを読むことで、アクセス制限をかけたページを覗くことができる

  • 元タイトル: セキュリティーBug:編集時、雛形とするページを読むことでアクセス制限をかけられているページが見れる
  • ページ: BugTrack
  • 投稿者: ななみ
  • 優先順位: 普通
  • 状態: 完了
  • カテゴリー: 本体バグ
  • 投稿日: 2004-05-15 (土) 03:59:07
  • バージョン: PukiWiki 1.4.3
  • リリース予定バージョン: 1.5.2

メッセージ

うちでは.htpasswdで独自のアクセス制御を勝手に追加してやってるのですが pukiwiki.ini.phpの以下の内容の制御を最終的に使用しています。

/////////////////////////////////////////////////
// 閲覧認証フラグ
// 0:不要
// 1:必要
$read_auth = 1;
/////////////////////////////////////////////////
// 閲覧認証対象パターン定義
 $read_auth_pages = array(
'/ひきこもるほげ/' => 'hoge',
'/(ネタバレ|ねたばれ)/' => 'foo,bar,hoge',
);

しかし、現状のままですと、編集画面の雛形読み込みで 内容が丸見えになってしまいますTT

以下のような変更を提案してみます。

html.php 147行目付近

	if($load_template_func and $b_template) {
		$_pages = get_existpages();
		$pages = array();
		foreach($_pages as $_page) {
			if ($_page == $whatsnew or preg_match("/$non_list/",$_page)) {
				continue;
			}
>			if(!check_readable($_page,false,false)) {
>				continue;
			}
			$s_page = htmlspecialchars($_page);
			$pages[$_page] = "   <option value=\"$s_page\">$s_page</option>";
		}
		ksort($pages);
		$s_pages = join("\n",$pages);
		$template = <<<EOD
 <select name="template_page">
  <option value="">-- $_btn_template --</option>
$s_pages
 </select>
 <input type="submit" name="template" value="$_btn_load" accesskey="r" />
 <br />
EOD;

  • 雛形読み込みの実際の部分でも制御する必要あると思いますが、どのモジュールかがわかりません;; -- ななみ 2004-05-15 (土) 04:04:17
  • 1.4.4でも修正されていませんので、優先順位を一つ上げて"緊急"とします。 -- Ratbeta? 2004-09-20 (月) 12:03:15
  • これはですね、*.ini.php にて $load_template_func を 0 に、つまりテンプレートの読み込みボックス自体をなくしてしまうことで回避可能かと思っています。上にあるhtml.phpの先頭部でその値をチェックしていることからもわかる通り、その行には到達しなくなります。そういう意味ではセキュリティ上の問題ではなく、運用ポリシーと設定との兼ね合いの問題と捉えています。 -- henoheno 2004-09-20 (月) 12:08:34
  • ということで、ひとまずコメントができたので、「普通」に下げておきます。 -- henoheno 2004-09-20 (月) 12:11:57
  • その設定が見当たらないのですが…。それに、それでは根本的な解決にはならないと思います…。 -- Ratbeta? 2004-09-20 (月) 12:14:53
  • $load_template_func は 1.4.4 では default/keitai.ini.php にあります。 -- henoheno 2004-09-20 (月) 12:23:32
  • あら…ありましたね…。失礼しました…。 -- Ratbeta? 2004-09-20 (月) 12:27:04

$load_template_func の設定を無視して 特定のページの中身を覗くことができてしまう

  • む (^^; 私の今までの認識に反し、緊急に直すべき症状を確認しました。ちょっと検討します。 -- henoheno 2004-09-20 (月) 13:02:41
    • cvs:plugin/edit.inc.php (v1.4:1.16)
      12c12
      <       global $vars, $_title_edit;
      ---
      >       global $vars, $_title_edit, $load_template_func;
      18c18
      <       if (isset($vars['preview']) or isset($vars['template'])) {
      ---
      >       if (isset($vars['preview']) || ($load_template_func && isset($vars['template']))) {
  • templateの選択結果を「受ける」部分にチェック漏れありました。上のhtml.phpのパッチや $load_template_func の設定を無視して 特定のページの中身を覗くことが可能でしたので、これを修正しました。 -- henoheno 2004-09-20 (月) 13:19:03
  • これで、残りは「テンプレート読み込みの機能に閲覧認証を反映して欲しい」という提案だけですね。 -- henoheno 2004-09-20 (月) 13:27:36
  • まだ、穴が残っているように思えます。BugTrack2/256 で、plugin_edit_preview() 内で$vars['template'] を見ていない事が指摘されていますが、$load_template_func も見ていません。
    仮に$post['preview'] と$post['template_page'] が存在した場合、$post['preview'] が存在するのでplugin_edit_preview() へと送られ、$load_template_func 設定を無視して$post['template_page'] のページをロードしてしまいます。「閲覧認証を~」の機構がまだないので、この点があまり問題視されていないだけなのかもしれませんが。 -- 2009-10-24 (土) 00:21:29

テンプレート読み込みの機能に閲覧認証を反映して欲しい

  • ちょっと考えましたが、templateの一覧に表示させないだけでは足りません。プレビュー&編集しようとした時点ではねのける様な機構がないと、結局抜け道が残ってしまいそうですね。(関連: BugTrack/657) -- henoheno 2004-12-31 (金) 19:56:42
  • とりあえず暫定的なパッチを置いておきます。まだ見落としが残っているかもしれませんが、一応。 -- Ratbeta? 2005-07-25 (月) 12:40:25
    --- func.1.46.php	Mon Jul 04 00:09:27 2005
    +++ func.php	Mon Jul 25 12:31:15 2005
    @@ -107,7 +107,7 @@
     		if (! preg_match($rule_pattrn, $page, $matches)) continue;
     
     		$template_page = preg_replace($rule_pattrn, $template, $page);
    -		if (! is_page($template_page)) continue;
    +		if (! is_page($template_page) || ! check_readable($_page, FALSE, FALSE)) continue;
     
     		$body = join('', get_source($template_page));
     
    --- html.1.41.php	Mon Jul 04 23:14:10 2005
    +++ html.php	Mon Jul 25 12:28:46 2005
    @@ -174,7 +174,7 @@
     		$pages  = array();
     		$non_list_pattern = '/' . $non_list . '/';
     		foreach(get_existpages() as $_page) {
    -			if ($_page == $whatsnew || preg_match($non_list_pattern, $_page))
    +			if ($_page == $whatsnew || preg_match($non_list_pattern, $_page) || ! check_readable($_page, FALSE, FALSE))
     				continue;
     			$s_page = htmlspecialchars($_page);
     			$pages[$_page] = '   <option value="' . $s_page . '">' .
    --- edit.inc.1.36.php	Thu Jun 30 21:52:57 2005
    +++ edit.inc.php	Mon Jul 25 12:23:28 2005
    @@ -41,7 +41,7 @@
     	$page = isset($vars['page']) ? $vars['page'] : '';
     
     	// Loading template
    -	if (isset($vars['template_page']) && is_page($vars['template_page'])) {
    +	if (isset($vars['template_page']) && is_page($vars['template_page']) && check_readable($vars['template_page'], FALSE, FALSE)) {
     
     		$vars['msg'] = join('', get_source($vars['template_page']));
     
    --- template.inc.1.21.php	Sun Feb 27 17:06:48 2005
    +++ template.inc.php	Mon Jul 25 12:37:12 2005
    @@ -14,7 +14,7 @@
     	global $_err_template_already, $_err_template_invalid, $_msg_template_force;
     
     	if (PKWK_READONLY) die_message('PKWK_READONLY prohibits editing');
    -	if (! isset($vars['refer']) || ! is_page($vars['refer']))
    +	if (! isset($vars['refer']) || ! is_page($vars['refer']) || ! check_readable($_page, FALSE, FALSE))
     		return FALSE;
     
     	$lines = get_source($vars['refer']);


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-02-16 (木) 23:03:05
Site admin: PukiWiki Development Team

PukiWiki 1.5.2+ © 2001-2019 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u7. HTML convert time: 0.359 sec.

OSDN