閲覧できないページが編集できてしまう†
- ページ: BugTrack
- 投稿者: teanan
- 優先順位: 重要
- 状態: 完了
- カテゴリー: その他
- 投稿日: 2004-08-16 (月) 12:54:39
- バージョン: 1.4.x
- リリース予定バージョン: 1.5.2
メッセージ†
閲覧認証が有効なページで「編集認証なし($edit_auth=0)」にしている場合、閲覧認証エラー
「~は閲覧できません」が表示されているときに編集ができてしまいます。
例えば、編集認証の指定が無い場合、閲覧が許可されたページのみを
編集可能とするような対策をしたほうが良いかと思います。
ご検討をお願いいたします。
auth.php
[40行目付近]
// 編集認証
function edit_auth($page,$auth_flag=TRUE,$exit_flag=TRUE)
{
global $edit_auth,$edit_auth_pages,$_title_cannotedit;
+ global $read_auth,$read_auth_pages;
// 編集認証フラグをチェック
- return $edit_auth ?
- basic_auth($page,$auth_flag,$exit_flag,$edit_auth_pages,$_title_cannotedit) : TRUE;
+ if($edit_auth)
+ {
+ $retval = basic_auth($page,$auth_flag,$exit_flag,$edit_auth_pages,$_title_cannotedit);
+ }
+ else if($read_auth)
+ {
+ $retval = basic_auth($page,$auth_flag,$exit_flag,$read_auth_pages,$_title_cannotedit);
+ }
+ else
+ {
+ $retval = TRUE;
+ }
+ return $retval;
}
まず、閲覧制限(認証)をつけて編集制限をつけないというのは基本的に設定ミスです。
管理者が正しく設定を行う必要があり、PukiWikiコードでは設定ミスをカバーする動作をしません。
標準に「編集」操作はread権限及びedit権限両方を必要とするようになりました。
(標準プラグイン、外部プラグインに限らず)プラグインによっては、read権限がないページにedit権限がある場合に、予期しない動作になる可能性があります。
- 普通考えたら、そうなんですが、あえてそういう仕様であり、関数を利用する側で考慮するものだと認識していました。柔軟性を持たせたんだろうとね。作者じゃないので、分かりませんけど。が、適用する場合には、読めるか?を当然判断してから次を判断なのでしょうよ。 --
- 編集できる、という以前に閲覧できないページの中身が見える、という点に問題が発生しています。優先順位を一つ上げて"重要"としておきます。関連:BugTrack/694 -- Ratbeta
- 直すかどうかとは別問題として、対応当初から、そのような症状が起きることは意識されていたようです。 see 任意のページごとの閲覧・編集制限 -- にぶんのに
- templateの候補に上げない(BugTrack/598)だけでは根本的な解決ではなく、「編集」「プレビュー」のようなactionを拒否するようにしないといけないでしょうね。 -- henoheno
- 閲覧制限(認証)をつけて編集制限をつけないというのは基本的に設定ミスだと考えています。(現実的に今PukiWikiを運用していてこういう設定のところは無いでしょう)。その上でポイントとしては以下 -- umorigu
- (a)「$read_auth = 1 かつ $edit_auth = 0」のときにFail-safeで編集制限をかけるかどうか
- (read/edit auth「同一設定でいい」場合に、常に2か所編集が必要なのは不便とは思っていました。)
- (b) $read_auth_pages と $edit_auth_pages に矛盾があるときにFail-safeで編集制限をかけるかどうか
- (c) そもそも各制限を制御しているのはプラグインなので、これに沿わないプラグインも作れるし、存在する
- (d) editプラグインぐらいは(目立つので)readableとeditable両方見てもいいかもしれない
- (e) の対応を行いました。 ( commit:ef78541b4d ) (a)については、$edit_auth と $edit_auth_page の取りうる値に対して暗黙の補正をかけてしまうと、管理者の意図しない動作をする恐れがあったので対応していません。$edit_auth と $read_auth の設定を合わせる時は $edit_auth = $read_auth; $edit_auth_pages = $read_auth_pages で対応できます -- umorigu