pukiwikiに認証をかける方法はいろいろありますが、毎回認証するのって結構面倒くさい。特に自分用wikiなんかだとユーザーが1人しかいないし、変に凝った認証をするのも何か面倒くさい。例えば特定のURLにアクセスするとクッキーが記録されて、以降そのクッキーが入っていればアクセスできるみたいな感じができたらなーと思って、さっと作ってみました。
pukiwikiと同じディレクトリに下記のようなスクリプトを書きます。このファイルの名前は何でも良いです。好きな名前.phpにしておきましょう。この好きな名前.phpを他人に知られるとpukiwikiにアクセスされてしまうのでここで使う名前は慎重に考えましょう。
<?php if ( $fp=fopen("secret.txt", "r") ){ $name = hash('md5' , fgets($fp)); $value = hash('sha512', fgets($fp)); setcookie($name, $value, 9999999999); /* 有効期限はMax */ }else{ print "Error\n"; } ?>
このコードは単純にsecret.txtの1行目のハッシュをcookieのname、2行目のハッシュをvalueにしてるだけです。なんでnameはMD5でvalueはsha256なのかについては、特に何も考えてないです。ただハッシュ化しないとCookieに使えない文字とか入ってきちゃうのでハッシュ化した方が無難かなと思いました。(そうすればsecret.txtを気軽に書ける。)
その後同じくpukiwikiのディレクトリにsecret.txtを作成します。内容は何でもいいからとりあえず2行以上の文字列を書いておけば問題はありません。
最後にindex.phpのrequire(LIB_DIR . ‘pukiwiki.php’);よりも手前の所に下記のように加えます。正直Cookieの有効期限最大値というのもどうかとは思うので、そこはtime()+2592000(1か月)とかの方がいいかもしれません。ちなみにこの有効期限はUNIXTIMEになっています。
if ( $fp=fopen("secret.txt", "r") ){ $name = hash('md5' , fgets($fp)); $value = hash('sha512', fgets($fp)); if ( $_COOKIE["$name"] == $value ){ $auth_flg=1; } } // auth_flgが0のままならエラーとしてプログラムを止める if( !$auth_flg ){ die("Error"); }
以上で完成です。これで好きな名前.phpにアクセスしてCookieを生成しない限りpukiwikiにアクセスできません。ただこの方法はいろいろ穴だらけですので大事な事を書くwikiでは絶対に使用しない方がいいです。
あとsecret.txtは必ずhtaccess等でアクセス禁止に設定しておきましょう。ここ見られたらバレます。Cookieカスタマイズするツールで簡単に入り込まれちゃいます。
そこまでして守らなくてもいいけど誰でも見れる状態は不安という時にお使いください。