このページは完全に研究室内向けの内容で、どのように設定をしたかを忘れないために書く備忘録のようなページです。


閲覧制限について




*ファイル名 : pukiwiki.ini.php


$read_auth = 1;
$read_auth_pages = array(
  '#^PageName$#' => 'auth_User',
);


正規表現も確認しておこう。


  • " ^ " : 先頭を意味する。
  • " $ " : 終端を意味する。



上記の

^PageName$



は、

^$
PageName



という意味なので、結果的に「PageName」というものだけがマッチし、
閲覧制限がかかります。



編集制限について




*ファイル名 : pukiwiki.ini.php


$edit_auth = 1;
$edit_auth_pages = array(
  //'/^.*$/' => 'auth_User',
  '#^(?!^EditAuthPage$)#' => 'auth_User',
);


正規表現も確認しておこう。


  • " . " : 1文字(何でも良い)を意味する。
  • " * " : 繰り返しを意味する。
  • " ^ " , " $ " は、既に登場済み。



" * "に関してもう少し詳しく書くと、
" * "は" * "の直前の文字がないか、直前の文字と同じ文字が1個以上続くという意味になる。


例えば、

tes*t



のときは、

直前の文字"s"なし直前の文字"s"が1個続く直前文字"s"が2個続く
tettessttessst



というものがマッチする。



しかし、今回の" * "は前述したものとは少し違う" ワイルドカード "とよばれる、
ファイル名を指定したりする際に使用されるものである。

" ワイルドカード "での" * "は、

testtessttessst



などがマッチする。

(直前の文字に関係なく、" * "の後の文字が何もない、または,1個以上の文字(何でも良い)が" * "の後に続くという意味)


ということで、

'/^.*$/' => 'auth_User',



は、

  • 何でも良い文字が1文字以上、先頭から終端まで続いている

^$
...・・・..



という意味になり、

  • 全てにマッチする



と同義になる。


#^(?!^EditAuthPage$)#' => 'auth_User',



  • " ^EditAuthPage$ " : EditAuthPage と同じもの
  • " ?! " : は否定の先読みという意味~(= 一致していないものにマッチする)

は、EditAuthPageに一致していないもの、すなわち、EditAuthPage以外全てにマッチするという意味である。




IP制限について




*ファイル名 : lib/auth.php


function edit_auth($page, $auth_flag = TRUE, $exit_flag = TRUE)
{
  global $edit_auth, $edit_auth_pages, $_title_cannotedit;
  if ( preg_match('/^xxx.xx.xx./', $_SERVER['REMOTE_ADDR']) || !preg_match('/^PageName$/', $page) ){  //変更点
    return $edit_auth ?  basic_auth($page, $auth_flag, $exit_flag,$edit_auth_pages, $_title_cannotedit) : TRUE;
  }else{
    return FALSE;
  }
}




preg_match('/^xxx.xx.xx./', $_SERVER['REMOTE_ADDR'])



アクセスされたIPアドレスが先頭から、" xxx.xx.xx. "と始まっている場合は、 preg_match関数は TRUE が戻る。



!preg_match('/^PageName$/', $page)



これから編集しようとするするページ名が、" PageName "であれば、preg_match関数は TRUE が戻るが" ! "となっているので結果的に、" PageName "でなければ全体的に TRUE となる。


結果的に、" xxx.xx.xx. "のIPアドレスからのアクセスであるか、" PageName "でないページの場合には通常の編集するための認証手続きに入るが、
" xxx.xx.xx. "のIPアドレスからのアクセスでない、かつ、" PageName "のページの場合には、編集されることを拒否することが可能となる。











*ファイル名 : plugin/attach.inc.php



attach_upload($file, $page, $pass = NULL)関数の部分で

} else if (PLUGIN_ATTACH_UPLOAD_ADMIN_ONLY && $pass !== TRUE &&($pass === NULL || ! pkwk_login($pass))) {
  if ( preg_match('/^xxx.xx.xx./', $_SERVER['REMOTE_ADDR']) && preg_match('/^PageName$/', $page) ){ //変更点
    ;
  }else{
    return array('result'=>FALSE,'msg'=>$_attach_messages['err_adminpass']);
  }
}




を変更した。


これで、" xxx.xx.xx."から始まる特定のIPアドレスからのアクセス、かつ、" PageName "のページ に対して、パスワードを入力しなくても添付できるようになる。




また、


AttachFileクラスの、delete($pass)関数に対しても同様にして、


if (! pkwk_login($pass)) {
  if ( preg_match('/^xxx.xx.xx./', $_SERVER['REMOTE_ADDR']) && preg_match('/^PageName$/',  $this->page) ){ //変更点
    if( md5($pass) != $this->status['pass'] ) {
      return attach_info('err_password');
    }
  }else{




と変更すると、


" xxx.xx.xx."から始まる特定のIPアドレスからのアクセス、かつ、" PageName "のページ に対して、パスワードを入力しなくても添付されたファイルを削除できるようになる。



トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2014-10-28 (火) 15:23:04 (1118d)