attach.inc.php プラグインで、存在しないページにファイルを添付できてしまう†
- ページ: BugTrack
- 投稿者: jjyun
- 優先順位: 普通
- 状態: 完了
- カテゴリー: プラグイン
- 投稿日: 2004-08-13 (金) 07:28:46
- バージョン: 1.4
メッセージ†
plugin_attach_action()関数内の Authentication 部分で、
ページの存在チェックを行っていますよね。
ページが存在した場合は、参照権限の確認などを行っていますが、
ページが存在しなかった場合の対処コードが書かれていないため、
以下のように、存在しないページを故意に指定してファイルのアップロードができてしまいます。
~pukiwiki.php?plugin=attach&pcmd=upload&page=<存在しないページ名>
通常の使い方では、存在しないページにファイルを添付するような
使い方は考えられないと思いますので、次のように修正してはいかがでしょうか?
// Authentication
if (array_key_exists('refer',$vars)
and is_pagename($vars['refer']))
{
$read_cmds = array('info','open','list');
in_array($pcmd,$read_cmds) ?
check_readable($vars['refer']) :
check_editable($vars['refer']);
}
+ else {
+ return array('result'=>FALSE,'msg'=>$_attach_messages['err_noparm']);
+ }
- お知らせいただきありがとうございます :) 普通ありえないですね。修正させていただきましたので、可能であればお試しください。 -- henoheno
- 現状、副作用により、各ページから ?plugin=attach&pcmd=upload&page=ページ名 に移動できなくなっています。確認中です。 -- henoheno
- 「ページの有無をチェックする」というシチュエーションなのに (is_pagename()ではなく) is_page() でチェックしていない、ということでした。また、このチェックをその場所ですると一覧の表示などができなくなりますので、アップロードの部分でのみ行う必要がありました。とり急ぎこのBugTrackの要件を最低限カバーする修正を行い、エラーメッセージの部分は die_message でかわしておきました。 -- henoheno
- 修正していただいたコードを確認し、存在しないページへの添付ができなくなったことを確認しました。ありがとうございます。
使えない修正コードをあげて足を引っ張ってしまい申し訳ありませんでした。 -- jjyun
- 隠し添付で良い気がするんですけどねぇ。どうせ、添付してあるページを削除する際に、ページだけ消すのか?添付ファイルもあわせて消すのか?となると、現状は、ページだけ削除している状況なんですよねぇ。 -- upk
- 私は、ページの削除を行うなら、そのページへの添付ファイルも消さなければと思っています(面倒ですけど)
それはさておき、今回のhenohenoさんにしていただいた対処は、ページを先に消してしまっても、ページに添付していたファイルは後から消せるので(でも追加はできない)、私が抱いているイメージと合致しています。
(upkさんのコメントを見てもう一度考えてみたのですが)私は気づきにくい方法で添付ファイルを追加されてしまうことを懸念に思い、これまでの動作に問題があるのではないかと思いました。でも添付ファイルの追加は、#recentプラグインも検知しませんね。う~ん。メールを飛ばす程ではないのですが、ファイルが添付されたことを知る方法ってあったでしょうか?。 -- jjyun
- そうなんです。まだ忘れ物がありますよねぇ。ということです。-- upk
- (upkさんへ) コメントありがとうございます :) 今回の処置は「異常な入力への対処」だと認識しています。(ファイルを添付する追加機能についても)ページの存在を前提にするのは堅実な処理だと思いますよ。 -- henoheno
- アップロード前にそのページの有無をチェックし、ページが存在しないならばアップロード用のフォームを表示しない様に修正を加えました -- henoheno