- 追加された行はこの色です。
- 削除された行はこの色です。
#norelated
[[../]]
*任意のページごとの閲覧・編集制限 -- [[Ynak]] [#b0e3a2f6]
※旧「BASIC認証で任意のページごとに閲覧制限や編集制限をかける方法」。名前が長すぎなので修正しました。
*任意のページごとの閲覧・編集制限 -- [[Ynak]] [#vafde73d]
-[[PukiWiki/1.4/BasicAuth]] より派生
**目次 [#sf802fd5]
#contents
**やりたいこと [#f26d6529]
任意のページごとに閲覧制限や編集制限をかけたい。((Wikiの思想に逆行するのは重々承知の上です。))
具体的には
+××ページは全員が閲覧できるが、内容を編集できるのは○○だけ。
+△△ページは□□だけが閲覧・編集できる。
+○△ページは□□だけが閲覧できるが、編集は○○だけ。
*できること [#nb75034e]
任意のページに対する閲覧・編集・検索でアクセス制御を行う。
というようなことをやりたい。
アクセス制御対象となるページは、以下のいずれかで決定できる。
-ページ名にある正規表現にマッチした場合
-ページ内容にある正規表現にマッチした場合
**現状 [#n98e6dfb]
-他のWikiEnginesでは、実装されているものもある。
-PukiWiki1.3.xでは、実装されていない。
-かろうじて使用できるのがページ内容の凍結であるが、PukiWiki全体で1つのパスワード設定しかできないので、運用面で困る。
(具体例)
-××ページは全員が閲覧できるが、内容を編集できるのは○○だけ。
-△△ページは□□だけが閲覧・編集できる。
-○△ページは○○と□□が閲覧できるが、編集は○○だけ。
**方針 [#tb83a099]
[[PukiWiki/1.4/BasicAuth]]で紹介されている方法をそのまま使えば、全ページに対する編集権限を設定できる。
**PukiWiki-official の関連ページ [#z477cd79]
-[[official:Q&A/運営#y9a598f1]] 設定の具体例など
-[[official:正規表現]]
更に、コメント部で紹介された方法((多少修正が必要であるが。))を使用すれば、正規表現で定義されたページ名に対する編集権限を1セット設定できる。
*設定ファイルの仕様 [#a08ac0a5]
pukiwiki.ini.phpに以下の項目を設定することで、
既存・新規作成ページに対するアクセス制御を行うことができる。
-ユーザ定義
-認証方式種別
-閲覧認証フラグ
-閲覧認証対象パターン定義
-編集認証フラグ
-編集認証対象パターン定義
-検索認証フラグ
しかし、最終目標には少々足りていないので、更なる改造が必要。
**ユーザ定義 [#q9906b10]
アクセス制御で使用するユーザとパスワードを設定する。
**仕様 [#s05d1c04]
pukiwiki.ini.phpで
// ユーザ定義
$auth_users = array(
'foo' => 'foo_passwd',
'bar' => 'bar_passwd',
'hoge' => 'hoge_passwd',
);
1.4.6 以降のパスワード保存書式については、[[BugTrack/709]] を参照
|ユーザID|パスワード|
|正規表現によるページ名のパターン|閲覧できるユーザID(カンマ区切り)|
|正規表現によるページ名のパターン|編集できるユーザID(カンマ区切り)|
**認証方式種別 [#k1476f05]
××認証対象パターン定義で定義したパターンがどこにあったら、
マッチしたことにするのか、を設定する。
を定義することで、ちょっとUNIXライクな読み書き((関係ないけど、送りがなを詰めると''読書''になるって知ってた?))権限の設定ができる。
※今回からページ内容によるアクセス制御に対応した。
// 認証方式種別
// pagename : ページ名
// contents : ページ内容
$auth_method_type = "contents";
**改造方法((diff形式じゃなくてすみません。)) [#rb4e61a7]
PukiWiki1.3.4をベースに改造する方法は以下の通り。
**閲覧認証 [#pe619681]
***ja.lng [#sc6cff98]
以下を追加する。
$_msg_auth = 'PukiWikiAuth';
$_title_cannotread = '$1 は閲覧できません';
***閲覧認証フラグ [#z874fa60]
閲覧認証によるアクセス制御を行うかどうか設定する。
不要な場合はオフにすればパターンマッチングを行わないので、性能劣化を防止できる。
***en.lng [#v8077a9e]
以下を追加する。
$_msg_auth = 'PukiWikiAuth';
$_title_cannotread = '$1 is not readable';
// 閲覧認証フラグ
// 0:不要
// 1:必要
$read_auth = 1;
***func.php [#ja82bba5]
以下を追加する。
/////////////////////////////////////////////////////////////////
// Basic認証による権限チェック
function edit_auth() {
global $get, $_title_cannotedit;
global $edit_auth, $auth_users, $_msg_auth;
global $vars, $edit_auth_pages;
// 編集認証フラグをチェック (システム全体として編集認証するかどうか)
if (!$edit_auth) {
return;
}
// 認証が必要なページかどうかをチェック
$edit_auth_users = "";
while (list($key, $val) = each($edit_auth_pages)) {
if (preg_match($key, $vars['page'])) {
$edit_auth_users = $val;
break;
}
}
if ($edit_auth_users == "") {
return;
}
// 認証を行う
if ((!isset($_SERVER['PHP_AUTH_USER']) or
!preg_match("/".$_SERVER['PHP_AUTH_USER']."/", $edit_auth_users) or
!array_key_exists($_SERVER['PHP_AUTH_USER'], $auth_users) or
$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;
}
}
function read_auth() {
global $get, $_title_cannotread;
global $read_auth, $auth_users, $_msg_auth;
global $vars, $read_auth_pages;
// 閲覧認証フラグをチェック (システム全体として編集認証するかどうか)
if (!$read_auth) {
return;
}
// 認証が必要なページかどうかをチェック
$read_auth_users = "";
while (list($key, $val) = each($read_auth_pages)) {
if (preg_match($key, $vars['page'])) {
$read_auth_users = $val;
break;
}
}
if ($read_auth_users == "") {
return;
}
// 認証を行う
if ((!isset($_SERVER['PHP_AUTH_USER']) or
!preg_match("/".$_SERVER['PHP_AUTH_USER']."/", $read_auth_users) or
!array_key_exists($_SERVER['PHP_AUTH_USER'], $auth_users) or
$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_cannotread);
$page = str_replace('$1',make_search($get['page']),$_title_cannotread);
catbody($title, $page, $body);
exit;
}
}
***閲覧認証対象パターン定義 [#z1848dd8]
閲覧認証をかけるページを決定するための正規表現パターンを設定する。
マッチしたページに閲覧認証をかける。
カンマ区切りで複数ユーザを書いても良い。
***pukiwiki.php [#mfc298c7]
編集制限が必要な追加・編集・プレビュー等の箇所に
edit_auth();
を、閲覧制限が必要な表示関係の箇所に
read_auth();
を挿入する。
// 閲覧認証対象パターン定義
$read_auth_pages = array(
'/ひきこもるほげ/' => 'hoge',
'/(ネタバレ|ねたばれ)/' => 'foo,bar,hoge',
);
-103行付近
// 追加
else if(arg_check("add"))
{
edit_auth(); // ★これを挿入!
-113行付近
// 編集
else if(arg_check("edit"))
{
edit_auth(); // ★これを挿入!
-124行付近
// プレビュー
else if(arg_check("preview") || $post["preview"] || $post["template"])
{
edit_auth(); // ★これを挿入!
-195行付近
// 書き込みもしくは追加もしくはコメントの挿入
else if($post["write"])
{
edit_auth(); // ★これを挿入!
-384行付近
// 差分の表示
else if(arg_check("diff"))
{
read_auth(); // ★これを挿入!
-462行付近
// バックアップ
else if($do_backup && arg_check("backup"))
{
read_auth(); // ★これを挿入!
-629行付近
// WikiName、BracketNameが示すページを表示
if(is_page($get["page"]))
{
read_auth(); // ★これを挿入!
-641行付近
else if(preg_match("/($InterWikiName)/",$get["page"],$match))
{
read_auth(); // ★これを挿入!
-722行付近
if(preg_match("/^(($BracketName)|($WikiName))$/",$get["page"])) {
edit_auth(); // ★これを挿入!
-736行付近
// 何も指定されない場合、トップページを表示
else
{
read_auth(); // ★これを挿入!
**編集認証 [#cff5af8a]
***pukiwiki.ini.php [#hd8d4502]
以下のように設定を追加する。
***編集認証フラグ [#l75b2298]
編集認証によるアクセス制御を行うかどうか設定する。
不要な場合はオフにすればパターンマッチングを行わないので、性能劣化を防止できる。
下記は設定例のため、設定内容は適切に変更すること。
// 編集認証フラグ
// 0:不要
// 1:必要
$edit_auth = 1;
//////////////////////////////////////////////////
// 閲覧・編集制限の設定
// 認証のアカウント
// ユーザ名とパスワードを記入。
$auth_users = array(
'foo' => 'foo_passwd',
'bar' => 'bar_passwd',
'hoge' => 'hoge_passwd',
);
// 編集時に認証が必要か
$edit_auth = 1;
// 編集認証をかけるページ名のパターンを正規表現で設定する。
// マッチしたページに編集認証をかける。
// カンマ区切りで複数ユーザを書いても良い。
***編集認証対象パターン定義 [#s48f4bb2]
編集認証をかけるページを決定するための正規表現パターンを設定する。
マッチしたページに編集認証をかける。
カンマ区切りで複数ユーザを書いても良い。
// 編集認証対象パターン定義
$edit_auth_pages = array(
'/Barの公開日記/' => 'bar',
'/ひきこもるほげ/' => 'hoge',
'/(ネタバレ|ねたばれ)/' => 'foo',
'/Barの公開日記/' => 'bar',
'/ひきこもるほげ/' => 'hoge',
'/(ネタバレ|ねたばれ)/' => 'foo',
);
// 閲覧時に認証が必要か
$read_auth = 1;
// 閲覧認証をかけるページ名のパターンを正規表現で設定する。
// マッチしたページに編集認証をかける。
// カンマ区切りで複数ユーザを書いても良い。
$read_auth_pages = array(
'/ひきこもるほげ/' => 'hoge',
'/(ネタバレ|ねたばれ)/' => 'foo,bar,hoge',
);
**検索認証フラグ [#jc7b64ea]
検索時にも閲覧認証と同等のアクセス制御が必要かどうか設定する。
どちらの場合も、ページ名は公開情報なので検索対象となる。
// 検索認証フラグ
// 0: 閲覧が許可されていないページ内容も検索対象とする
// 1: 検索時のログインユーザに許可されたページのみ検索対象とする
$search_auth = 0;
**上記設定例の解説 [#pd05d4f5]
上の例では
-「Barの公開日記」は、誰でも閲覧できて、barだけが編集できる。
-「ひきこもるほげ」ページは、hogeだけが閲覧・編集できる。
-「映画紹介~ネタバレ注意」ページは、foo, bar, hogeの三人だけが閲覧できて、かつ、編集はfooだけが可能。
のような設定となる。
かなり強引にUNIXっぽく表現すると、こうなる。
アクセス権 ユーザID グループ ページ名
-rw----r-- bar なし Barの公開日記
-rw------- hoge なし HogeOnly
-rw-r----- foo hoges 映画紹介~ネタバレ注意
※グループhogesには、barとhogeが所属するとする。
**注意点 [#ae8cccdb]
-初めてPHPをさわった人間が改造しているので、実装的に問題があるかも。
--添削希望。
----
*改造 [#d2b16226]
**本体の改造 [#x8da611f]
PukiWiki1.4rc2(20030529版)をベースにする場合は、以下を改造する。
((長いので別ページで。))
-[[./ja.lng]]
-[[./en.lng]]
-[[./func.php]]
**pukiwiki.ini.php [#l09a39d1]
設定ファイルの仕様で紹介した項目を追加して、適切な設定を行う。
すでに存在している$edit_auth, $edit_auth_usersの設定は削除するか、
コメントアウトすること。
**プラグインの改造 [#b5bf2187]
アクセス制御する仕組みは用意したが、
実際にページにアクセスするのはすべてプラグインである。
よって、プラグインで以下の関数による事前チェックを行うように改造する必要がある。
**アクセス制御用の関数仕様 [#fdd50fbf]
-check_readable($page, $auth_flag=true, $exit_flag=true)
--閲覧することができるかチェックする。
--今のところread_authと全く同じ。内部でread_authのみを呼び出している。
-check_editable($page, $auth_flag=true, $exit_flag=true)
--編集することができるかチェックする。
--edit_auth+凍結などのチェックをする場合。
-read_auth($page, $auth_flag=true, $exit_flag=true)
--閲覧権限があるかチェックする。
-edit_auth($page, $auth_flag=true, $exit_flag=true)
--編集権限があるかチェックする。
~
|引数 |説明|
|$page |ページ名文字列|
|$auth_flag |true: 現在のログイン状態で認証NGであれば、BASIC認証発動(デフォルト)|
| |false:現在のログイン状態で判断するだけ|
|$exit_flag |true: 認証NGの場合、check_xxxable関数側でNG画面に遷移する(デフォルト)|
| |false:認証NGの場合でも、戻り値falseで戻ってくるだけ|
~
|戻り値 |true: 認証OK|
| |false:認証NG|
-get_source, file関数を使用している全てのプラグインで、
以下の関数による事前チェックを行うように改造しなければ、
そこが''セキュリティホール''になるので注意!!
-使わないプラグインはpukiwiki/plugin/disableディレクトリを作って
そこに入れておくなどして、無効化すると良い。
-check_xxxxable系とxxx_auth系の使い分けは、特に問題がなければ、総合的な
観点で読めるか書けるかを判断しているcheck_xxxx系の方を利用する方がよいと思う。
-第2、第3引数のデフォルト値は既存プラグインとの互換性のために用意している。
今後プラグインを実装する場合は明示的に指定した方がよいと思う。
**要改造プラグイン一覧 [#nb9236e1]
この改造に伴って一緒に改造する必要があるプラグインの一覧を以下に示す。
Ynakの環境で単にgrep -lE '(get_source|file)' pukiwiki/plugin/*.phpした結果+read.inc.phpなので漏れがあるかもしれない。
このうち少なくともedit, read, edit, backup, diffは絶対に改造する必要がある。
※改造したものからリンク先に改造方法を書く、ということでよろしければご協力お願いします。
-plugin/add.inc.php → r1.2 以降対応済み
-[[plugin/amazon.inc.php>./amazon.inc.php]] → 一応対応はしているが、[[アクセス制御用の関数>#fdd50fbf]]を使っていないので、LDAP互換の形式をパスワードとして利用できません(パスワードの関連: [[BugTrack/709]])
-[[plugin/article.inc.php>./article.inc.php]] → 編集は×でもコメントは追加していい、という場合は改造不要。
-[[plugin/attach.inc.php>./attach.inc.php]] → r1.33 以降対応済み([[BugTrack/471]])
-[[plugin/backup.inc.php>./backup.inc.php]] → r1.8 以降対応済み([[BugTrack/370]])
-[[plugin/bugtrack.inc.php>./bugtrack.inc.php]] → 編集は×でも投稿を許可するのか、閲覧は×でも一覧表示での(部分)閲覧を許可するのか、で対応が分かれる
-[[plugin/calendar2.inc.php>./calendar2.inc.php]]
-[[plugin/calendar_edit.inc.php>./calendar_edit.inc.php]] → ページ名の表示を認めるかどうか、で対応が分かれる
-[[plugin/calendar_read.inc.php>./calendar_read.inc.php]] → ページ名の表示を認めるかどうか、で対応が分かれる
-[[plugin/calendar_viewer.inc.php>./calendar_viewer.inc.php]] → r1.8 以降対応済み([[BugTrack/370]])
-[[plugin/comment.inc.php>./comment.inc.php]] → 編集は×でもコメントは追加していい、という場合は改造不要。
-[[plugin/counter.inc.php>./counter.inc.php]] → カウント数のキャッシュファイルへのアクセスのみ
-[[plugin/deleted.inc.php>./deleted.inc.php]]
-[[plugin/diff.inc.php>./diff.inc.php]] → r1.3 以降対応済み([[BugTrack/370]])
-[[plugin/edit.inc.php>./edit.inc.php]] → r1.7 以降対応済み([[BugTrack/370]])
-[[plugin/filelist.inc.php>./filelist.inc.php]]
-[[plugin/freeze.inc.php>./freeze.inc.php]]
-[[plugin/include.inc.php>./include.inc.php]] → r1.7 以降対応済み([[BugTrack/370]])
-[[plugin/includesubmenu.inc.php>./includesubmenu.inc.php]]
-[[plugin/insert.inc.php>./insert.inc.php]] → 編集は×でも投稿を許可するのか、で対応が分かれる
-[[plugin/interwiki.inc.php>./interwiki.inc.php]]
-[[plugin/list.inc.php>./list.inc.php]]
-[[plugin/ls.inc.php>./ls.inc.php]]
-[[plugin/ls2.inc.php>./ls2.inc.php]]
-[[plugin/map.inc.php>./map.inc.php]]
-[[plugin/memo.inc.php>./memo.inc.php]] → 編集は×でも更新を許可するのか、で対応が分かれる
-[[plugin/online.inc.php>./online.inc.php]] → カウント数のキャッシュファイルへのアクセスのみ
-[[plugin/paint.inc.php>./paint.inc.php]] → 編集は×でも投稿を許可するのか、で対応が分かれる
-[[plugin/pcomment.inc.php>./pcomment.inc.php]] → r1.18 以降対応済み([[BugTrack/370]])
-[[plugin/popular.inc.php>./popular.inc.php]]
-[[plugin/read.inc.php>./read.inc.php]] → r1.3 以降対応済み([[BugTrack/370]])
-[[plugin/recent.inc.php>./recent.inc.php]]
-[[plugin/rename.inc.php>./rename.inc.php]]
-[[plugin/ref.inc.php>./ref.inc.php]]
-[[plugin/rss.inc.php>./rss.inc.php]]
-[[plugin/rss10.inc.php>./rss10.inc.php]]
-[[plugin/showrss.inc.php>./showrss.inc.php]]
-[[plugin/source.inc.php>./source.inc.php]] →r1.11 以降対応済み([[BugTrack/541]])
-[[plugin/template.inc.php>./template.inc.php]]
-[[plugin/touchgraph.inc.php>./touchgraph.inc.php]]
-[[plugin/tracker.inc.php>./tracker.inc.php]] → 編集は×でも投稿を許可するのか、閲覧は×でも一覧表示での(部分)閲覧を許可するのか、で対応が分かれる
-[[plugin/unfreeze.inc.php>./unfreeze.inc.php]]
-[[plugin/versionlist.inc.php>./versionlist.inc.php]]
-[[plugin/vote.inc.php>./vote.inc.php]] → 編集は×でも投票を許可するのか、で対応が分かれる
-[[plugin/yetlist.inc.php>./yetlist.inc.php]]
*推奨運用方式 [#tf70d0ad]
Ynakのところで運用している方式と、その説明ページの内容をコピーしておく。
→[[./推奨運用方式]]
*注意事項 [#s838ea07]
-閲覧認証をかけたページは、編集認証も必須。
--でないと、「編集」リンクから内容が読めてしまったり、挙動が怪しくなったりする。((UNIXでも、rw-(閲覧認証&編集認証の同時設定)はOKだけど、 -w-(編集認証のみ)はいろいろと問題が発生するのと似てる。))
--編集可能ユーザは、閲覧可能ユーザのサブセットとなるように設定すること。
-edit_auth_pagesなどのvalue部分と、BASIC認証のユーザ名の比較をpreg_matchで行っているので、あるユーザIDのサブセットとなるようなユーザIDがあるとややこしくなる。
--例えば、'hogefoobar'というユーザIDがあって、このユーザだけが編集できるようなページを以下のように設定する状況を考える。
$edit_auth_pages = array(
'/Secret/' => 'hogefoobar',
);
--ここでもし、'hoge'、'foo'、'bar'というユーザIDが存在していれば、そのいずれかのユーザIDでBASIC認証を突破すれば、このSecretページにアクセスできてしまう。
--とりあえず、pukiwiki.ini.phpにユーザID設定をする人が気を付ければ良いので、気にしていませんが、良い回避法があれば修正してください。
*コメント [#fa4b735d]
-うおお、 おみごと。ページ単位の認証ってニーズ高いですもんね。 -- [[yateeight]] &new{2003-05-17 (土) 17:10:37};
-実は、オートリンクとNoBracketNameが素敵なので1.4に乗り換えようとしてます。で、1.4も同じように改造しようとしてますが、1.3.4とだいぶ作りが違うので難儀してるところです。 -- [[Ynak]] &new{2003-05-17 (土) 20:30:32};
-おっと、includeプラグインで無権限者による閲覧ができる穴発見。 -- [[Ynak]] &new{2003-05-17 (土) 21:10:03};
-他にもcalendar_viewerとかその手のプラグインで続々抜け穴を発見。プラグインを無効にするか、プラグインの頭のところでread_auth()を呼ぶようにしないとだめっぽいです。 -- [[Ynak]] &new{2003-05-17 (土) 21:23:11};
-編集系プラグインはあまりないですが、閲覧系プラグインは結構あるので対処も大変ですね・・・。 -- [[Ynak]] &new{2003-05-17 (土) 21:24:26};
-暫定対処として、include,calendar_read,calendar_editは使わないのではずして、calendar_viewerは改造して第1引数を無効にしてみました。 -- [[Ynak]] &new{2003-05-17 (土) 23:15:53};
-ページ単位じゃなくって、全体(どのページも)に認証かけるのはどうすればよろしいのでしょうか?「新規」も制限かけたいのですが。 -- [[Naox]] &new{2003-05-18 (日) 09:12:37};
-Wikino -- [[Naox]] &new{2003-05-18 (日) 09:13:42};
-全ページに均一に認証をかけるのであれば、ページ名を"/.*/"とかにするとか、[[PukiWiki/1.4/BasicAuth]]のそのままの方法でやるとかが良いと思います。 -- [[Ynak]] &new{2003-05-18 (日) 12:00:09};
-あと、ここの改造方法では、新規ページ作成も制限対象に含まれています。 -- [[Ynak]] &new{2003-05-18 (日) 12:02:16};
-./wiki/なディレクトリを、Webで公開しているディレクトリであれば、その文書ファイル名を直接指定したら読めませんか?ということで、そういう場合の読者の無意味さがあるので、注意書きでも追加しないとねぇ。ということが1点。ページ単位での制御を行う上で、ページを追加時に、この php に定義を追加していくことの運用の手間というところを、なんとかすると、もっとよくなると思います。の2点。で、config じゃないですけど、とあるページで制御しつつ、そのページに制限を行う。の組み合わせはどうかなぁ?と。 -- [[upk]] &new{2003-05-18 (日) 16:05:06};
-通常の設定ではwikiディレクトリ配下のファイルは直接URL指定でアクセス可能であるため、
ApacheのBasic認証などを利用して、直接アクセスを防止しておかないといけない。
--たとえば、下記のような.htaccessを配置すると良い。
AuthUserFile /usr/local/apache/htdocs/basic/.htpasswd
AuthGroupFile /dev/null
AuthName "PukiWikiData"
AuthType Basic
require valid-user
--詳しくはApacheなどのドキュメントを参照のこと。
#comment
**[[関連>./関連ページ]] [#pa5bdccf]
#include(./関連ページ,notitle)
#br
----
*コメント [#r1236f33]
-できるだけ1.4の設計思想(?)を優先して、きれいにまとめてみたつもりです。 -- [[Ynak]] &new{2003-05-20 (火) 23:28:16};
-pcommentもセキュリティホールになりますね。改造しないと。 -- [[Ynak]] &new{2003-05-22 (木) 00:09:00};
-あと、メイン機能系では添付ファイルのアクセス制限に未対応ですが、これをやるのはかなりの大工事になりそうですね。ページごとにサブディレクトリを作って、とかやればいいのかな? -- [[Ynak]] &new{2003-05-22 (木) 00:10:39};
-ページ名による制御対象のページ指定に対応したので、一新してみました。しかしアレですね、ページ名の階層が深くなると、#recentの出力が鬱陶しくなるという弊害があるんですね。皆様すみません。 -- [[Ynak]] &new{2003-06-06 (金) 01:43:32};
-すばらしいですね。是非本家に取り入れて欲しい機能です。 -- [[puchi]] &new{2003-06-06 (金) 13:21:27};
-ありがとうございます。[[BugTrack/370]]で要望を出してみたところ、シグネチャ変更はまずいとのことなので(そりゃそうですね)、現在のCVS版と互換性を実現してみました。 -- [[Ynak]] &new{2003-06-07 (土) 00:15:48};
-私の方での利用形態では一通り試して特に問題は見つかりませんでした。edit_authを独自に使用されているプラグインと連携してどうなるかですが、どのプラグインでedit_authを使用されているかわからなかったので確認できていません。 -- [[Ynak]] &new{2003-06-07 (土) 00:30:11};
-ソース差分をチェックしただけで検証をしていないのですが、sourceプラグインも参照権限のチェックが必要ではありませんか? -- [[にぶんのに]] &new{2003-07-06 (日) 22:21:30};
-まだ、使いはじめたばかりでわからないこといっぱいなんですが、passwordをmd5にするにはどうしたらいいんでしょう? -- [[merlin]] &new{2003-07-15 (火) 16:19:54};
-md5というプラグインが1.4で追加されているのでそれを使ってみて下さい。使い方はマニュアル/プラグインに書いてありますので。 -- [[にぶんのに]] &new{2003-07-15 (火) 23:54:08};
-ユーザ定義のところにmd5にしたパスワードを書きたいのですが、認証時にエンコードしてくれるか?ということなんですが ... -- [[merlin]] &new{2003-07-16 (水) 01:58:03};
-以下のようにすればいいのではないかと。 -- [[ぱんだ]] &new{2003-07-16 (水) 10:16:27};
--pukiwiki.ini.php
/////////////////////////////////////////////////
// ユーザ定義
$auth_users = array(
-'foo' => 'foo_passwd',
-'bar' => 'bar_passwd',
-'hoge' => 'hoge_passwd',
+// ユーザ名 => パスワード(md5 hash)
+// pukiwiki.php?md5=pass のようにURLに入力し
+// MD5ハッシュにしてから記入してください。
+'foo' => 'f122914144e12fa7d7b7b14cc223f671',
+'bar' => 'f53ae779077e987718cc285b14dfbe86',
+'hoge' => '0c165e4475e0726a1f4a5dc55647d992',
);
--auth.php
// ユーザリストに含まれるいずれかのユーザと認証されればOK
if (!isset($_SERVER['PHP_AUTH_USER'])
or !in_array($_SERVER['PHP_AUTH_USER'],$user_list)
or !array_key_exists($_SERVER['PHP_AUTH_USER'],$auth_users)
- or $auth_users[$_SERVER['PHP_AUTH_USER']] != $_SERVER['PHP_AUTH_PW'])
+ or $auth_users[$_SERVER['PHP_AUTH_USER']] != md5($_SERVER['PHP_AUTH_PW']))
{
-この方が安全(pukiwiki.ini.phpを盗まれたとしても、ある程度の時間は稼げる?)でしょうね。 -- [[ぱんだ]] &new{2003-07-16 (水) 10:16:27};
-ありがとうございます。どうもパスワード直打ちが気持ちわるかったものですから -- [[merlin]] &new{2003-07-16 (水) 10:39:53}; &br;
-- 'hoge' => md5("hoge_passwd"), ってのもいけそうなので こっちのがいいかな?
--pukiwiki.ini.php
/////////////////////////////////////////////////
// ユーザ定義
$auth_users = array(
-'foo' => 'foo_passwd',
-'bar' => 'bar_passwd',
-'hoge' => 'hoge_passwd',
+// ユーザ名 => パスワード(md5 hash)
+// pukiwiki.php?md5=pass のようにURLに入力し
+// MD5ハッシュにしてから記入してください。
+// 面倒ならば以下のようにどうぞ
+// ユーザ名 => md5(パスワード)
+'foo' => 'f122914144e12fa7d7b7b14cc223f671',
+'bar' => 'f53ae779077e987718cc285b14dfbe86',
+'hoge' => md5("hoge_passwd"),
);
-はじめまして &br;
閲覧認証を設定したいのですが、ユーザー定義で定義したユーザー名・パスワードで接続しようとしてもできません。どうしてでしょう・・・ &br;
「Windows 2000 Professional」に「pukiwiki_1.4.2」ではできるのは確認できてるのですが &br;
現在は「Windows Xp HomeEdition」に「pukiwiki_1.4.2」を使用させてもらっています。設定の問題でしょうか、環境的な問題でしょうか? -- [[ひがけん]] &new{2004-01-10 (土) 00:02:22};
-このページを参考に、既に使っているDBのセッション認証を付加しました。閲覧制限されている場合、list.inc.phpやrecent.inc.phpも改変しました。でないと隠す意味が。。。 -- [[taketan]] &new{2004-02-28 (土) 13:41:24};
--閲覧制限されているページをlist.inc.phpやrecent.inc.phpで表示しないようにすると弊害があります。list.inc.phpやrecent.inc.phpで表示したくないページは$non_listで設定すべき。[[pukiwiki:続・質問箱/36]]参照。 -- [[reimy]] &new{2004-02-28 (土) 15:30:01};
- 上記の方法でうまくいきましたが、雛形から見ることが出来てしまいます・・・何か良い対処法はありませんでしょうか? -- [[どん]] &new{2007-07-23 (月) 17:36:23};
--[[関連リンク>./#o3e8c198]] を少し足してみました。雛形に関するリンクもあります。 &new{2007-07-24 (火) 19:22:40};
--- 元の著者が誰かがわからなくなるような修正がありましたので、ちょっと戻しました -- [[henoheno]] &new{2007-07-26 (木) 10:47:14};
- lib/pukiwiki.php の次の部分もチェックしたほうがいいのでは?
if (isset($retvars['body']) && $retvars['body'] != '') {
$body = & $retvars['body'];
} else {
if ($base == '' || ! is_page($base)) {
$base = & $defaultpage;
$title = htmlspecialchars(strip_bracket($base));
$page = make_search($base);
}
$vars['cmd'] = 'read';
$vars['page'] = & $base;
- $body = convert_html(get_source($base));
+ if (check_readable($base, true, false)) {
+ $body = convert_html(get_source($base));
+ } else {
+ global $title_cannot;
+ $body = str_replace('$1', htmlspecialchars(strip_bracket($page)), $title_cannot);
+ }
}
例えば、コメントプラグインでメッセージが空だった場合に、array('msg'=>'', 'body'=>'') と返してくるので、ノーチェックでconvert_html しています。他には、ページが存在しなかった場合は$defaultpage を読み込むようになっていますが、この場合も$defaultpage に制限がかかっているかをチェックしていません。 -- &new{2008-03-29 (土) 13:06:51};
-- 関連: [[BugTrack2/198]] -- &new{2009-06-16 (火) 23:10:32};
- 現在
'/^☆.*$/' => 'tokubetu', (イ)
のようにして、☆で始まるページは「tokubetu」ユーザにだけ閲覧させています。これに加え、後から「ippan」というユーザーも管理を始めました。
'/[^(FrontPage)]/'=> 'ippan,tokubetu', (ロ)
という行も追加しました。つまり、フロントページは誰でも見られる。それ以外のページは、「ippan」「tokubetu」ユーザーが見られる。☆で始まるページは「tokubetu」ユーザーのみ。という運用を行いたいのですが、「ippan」ユーザーで☆で始まるページも閲覧出来てしまいます。(ロ)の行の記載では、たしかに☆で始まるページも含まれるのは理解しましたが、解決方法が分かりません。どのようにすれば良いのでしょうか。-- &new{2008-07-04 (金) 20:01:31};
--自己解決しました
'/^☆.*$/' => 'tokubetu',
'/^(?!^(FrontPage|^☆.*$)$).*$/' => 'ippan,tokubetu',
が正解でした。 -- &new{2008-07-08 (火) 15:45:20};