※しろくろのへや:edit_authより移動してきました。 -- ぱんだ
そんなに強固なものではないらしいんですが*1。 気休めにはなるかもしれません。
閲覧は自由、編集はアカウントを持っている人だけ*2という仕掛けをしてみました。
編集をクリックしたときにダイアログが表示されます。 キャンセルを押すと「編集できません」と表示されます。 正しいユーザ名とパスワードを入力してOKを押すと編集フォームが表示されます。
$_msg_auth = 'Page Edit';
///////////////////////////////////////////////// // 編集時に認証が必要か $edit_auth = 1; ///////////////////////////////////////////////// // 編集時認証のアカウント // ユーザ名とパスワードを記入。 $edit_auth_users = array( '' => '', );
function edit_auth() { global $get,$_title_cannotedit; global $edit_auth,$edit_auth_users,$_msg_auth; if ($edit_auth and (!isset($_SERVER['PHP_AUTH_USER']) or !array_key_exists($_SERVER['PHP_AUTH_USER'],$edit_auth_users) or $edit_auth_users[$_SERVER['PHP_AUTH_USER']] != $_SERVER['PHP_AUTH_PW'])) { header('WWW-Authenticate: Basic realm="'.$_msg_auth.'"'); header('HTTP/1.0 401 Unauthorized'); // press cancel. $body = $title = str_replace('$1',htmlspecialchars(strip_bracket($get['page'])),$_title_cannotedit); $page = str_replace('$1',make_search($get['page']),$_title_cannotedit); catbody($title,$page,$body); exit; } }
--- pukiwiki.php.orig 2002-10-28 09:06:58.000000000 +0900 +++ pukiwiki.php 2002-10-28 09:08:51.000000000 +0900 @@ -103,6 +103,7 @@ // 追加 else if(arg_check("add")) { + edit_auth(); $title = str_replace('$1',htmlspecialchars(strip_bracket($get["page"])),$_title_add); $page = str_replace('$1',make_search($get["page"]),$_title_add); $body = "<ul>\n"; @@ -113,6 +114,7 @@ // 編集 else if(arg_check("edit")) { + edit_auth(); $postdata = @join("",get_source($get["page"])); if($postdata == '') { $postdata = auto_template($get["page"]); @@ -124,6 +126,7 @@ // プレビュー else if(arg_check("preview") || $post["preview"] || $post["template"]) { + edit_auth(); if($post["template"] && page_exists($post["template_page"])) { $post["msg"] = @join("",get_source($post["template_page"])); @@ -195,6 +198,7 @@ // 書き込みもしくは追加もしくはコメントの挿入 else if($post["write"]) { + edit_auth(); $post["msg"] = preg_replace("/^#freeze\n/","",$post["msg"]); $postdata_input = $post["msg"]; @@ -720,6 +724,7 @@ //$body = "指定されたページは見つかりませんでした。"; if(preg_match("/^(($BracketName)|($WikiName))$/",$get["page"])) { + edit_auth(); $title = str_replace('$1',htmlspecialchars(strip_bracket($get["page"])),$_title_edit); $page = str_replace('$1',make_search($get["page"]),$_title_edit); $template = auto_template($get["page"]);
pukiwiki.ini.php ///////////////////////////////////////////////// // 編集に認証が必要なページ名を正規表現で記入。 // メタキャラクタは適宜エスケープしてください。 $edit_auth_pages = array( '', //すべてのページ // '^AuthRequired\/', // 'AuthRequired/'で始まるページ // '(?!)', // すべてのページで認証が不要なとき :) );
edit_auth()を修正 function edit_auth() { global $get,$_title_cannotedit; global $edit_auth,$edit_auth_users,$_msg_auth; + global $vars,$edit_auth_pages; if ($edit_auth and + preg_match('/'.join('|',$edit_auth_pages).'/',$vars['page']) and (!isset($_SERVER['PHP_AUTH_USER']) or